logo

CYBOS Plus インストールチュートリアル 📂データ確保

CYBOS Plus インストールチュートリアル

環境

  • OS: Windows
  • IDE: VS code

ガイド

WindowsでCYBOS Plusをインストールし、Pythonで接続状態を確認するチュートリアルだ。Pythonのオブジェクト指向性やIDEの操作については、ある程度慣れているユーザーを前提とする。


Step 1. CYBOS Plusのインストール

20210716_105422.png

大信証券ダウンロードセンターでCYBOS Plusをダウンロードしよう。

20210716_105831.png

実は別にダウンロードできるわけではなく、CYBOS PlusはCYBOSプログラムに内蔵されている形なので、CYBOSをダウンロードする必要がある。ウィザードの指示に従ってインストールすればいい。インストールが完了すると、Visual C++ 2008 Setupが進む。この段階では少し待つだけで、特に難しいことはない。

20210716_112458.png

再起動するか聞かれたら、素直に再起動しよう。


Step 2. CYBOS Plusの接続確認

次はCYBOS Plusが接続されているかを確認するPythonコードで、win32com.clientDispatch()モジュールがCYBOSを使用できるオブジェクトinstCpCybosを取ってくれる。接続された場合、最後にIsConnectプロパティが1と出力される。win32com.clientが存在しない場合は、pip install pywin32でインストールすればいい。

import win32com.client
instCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
print(instCpCybos.IsConnect)

もちろん、そのまま実行すると当然、以下のようなエラーが出る。CYBOS Plusをインストールしただけで、実行していないからだ。

>>> instCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
Traceback (most recent call last):
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\dynamic.py", line 81, in _GetGoodDispatch
    IDispatch = pythoncom.connect(IDispatch)
pywintypes.com_error: (-2147221005, '잘못된 클래스 문자열입니다.', None, None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\dynamic.py", line 98, in _GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\dynamic.py", line 83, in _GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
pywintypes.com_error: (-2147221005, '잘못된 클래스 문자열입니다.', None, None)

他にもエラーが発生した場合、その理由は以下の4つのうちの1つである可能性が高い:

  • Dispatch("CpUtil.CpCybos")に入れた文字列にタイプミスがある。
  • CYBOS Plusを実行していない。
  • IDEやターミナルを管理者権限で実行していない。
  • Pythonが32-bitではない。

逆に、上記の条件の1つでも満たしていない場合、エラーが発生する可能性が高い。


Step 3. CYBOS Plusの実行

20210716_114818.png

CYBOSを実行し、上のスクリーンショットのように正確にCYBOS Plusタブを選択した後、ログインする。少し待つと、次のようにCYBOS Plusのお知らせを表示するウィンドウが現れる。

20210716_120746.png

トレイでCYBOS Plus Startというプログラムが実行されているかを確認できる。

20210716_120758.png

この状態で再度接続状況を確認すると、以前とは違うがやはりエラーが出る。

>>> instCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
Traceback (most recent call last):
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\dynamic.py", line 81, in _GetGoodDispatch
    IDispatch = pythoncom.connect(IDispatch)
pywintypes.com_error: (-2147221021, '작업을 사용할 수 없습니다.', None, None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\dynamic.py", line 98, in _GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\dynamic.py", line 83, in _GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
pywintypes.com_error: (-2147221164, '클래스가 등록되지 않았습니다.', None, None)

Step 4. Python 32-bitのインストール

CYBOS Plusは32-bitで開発されたため、使用している環境がどうであれ、CYBOS Plusを呼び出すアプリケーションは32-bitでなければならない。

20210716_121639.png

Pythonダウンロードページから32-bitインストーラを探してダウンロードする。もし、既に使っているPython 64-bitと一緒に使いたくなければ、この機会にAnaconda 32-bitをインストールするのも悪くない。逆にcondaを使っていた人は、ただのpipを使ってみるのもいい。

バージョンコントロールは特に便利ではないし、CYBOS Plus以外で32-bitをわざわざ使う必要がない開発者にとっては、反対バージョンをインストールする方がずっと楽だろう。とにかくここでは、単純化のためにAnacondaをインストールせずにpipでバージョンを管理してみる。一番難しい道を行くのがチュートリアルのアプローチだ。

Python 3.7.2 64-bitを使用していたコンピュータで、わざわざPython 3.9.6 32-bitをインストールした後、そこでwin32comを使用できるようにパッケージをインストールしたコマンドは以下の通りだ。

C:\Users\rmsms\AppData\Local\Programs\Python\Python39-32\python.exe -m pip install pywin32

今、接続状態を確認すると、以下のようにエラーは起きないが、接続されていないため0が出力されることが確認できる。

Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:04:37) [MSC v.1929 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import win32com.client
>>> instCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
>>> print(instCpCybos.IsConnect)
0

Step 5. IDEまたはターミナルを管理者権限で実行

20210716_125142.png

管理者権限でIDEを実行してもう一度接続を確認すると、以下のように1が出力されることを確認できる。

Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:04:37) [MSC v.1929 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import win32com.client
>>> instCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
>>> print(instCpCybos.IsConnect)
1

20210716_125642.png

接続はされたが、実際に情報を受け取っているかどうかを確認するために、銘柄名で銘柄コードが呼び出されているかを確認しよう。例えば「シージェン」なら、以下のようにA096530をうまく取得できる。

>>> instCpStockCode = win32com.client.Distpatch("CpUtil.CpStockCode")
>>> seegene = instCpStockCode.NameToCode("씨젠"); seegene
'A096530'

このAPIのアプリケーションは、CYBOS Plusが実行されている状態でのみ使用できる。