CYBOS Plus インストールチュートリアル
環境
- OS: Windows
- IDE: VS code
ガイド
WindowsでCYBOS Plusをインストールし、Pythonで接続状態を確認するチュートリアルだ。Pythonのオブジェクト指向性やIDEの操作については、ある程度慣れているユーザーを前提とする。
Step 1. CYBOS Plusのインストール
大信証券ダウンロードセンターでCYBOS Plusをダウンロードしよう。
実は別にダウンロードできるわけではなく、CYBOS PlusはCYBOSプログラムに内蔵されている形なので、CYBOSをダウンロードする必要がある。ウィザードの指示に従ってインストールすればいい。インストールが完了すると、Visual C++ 2008 Setupが進む。この段階では少し待つだけで、特に難しいことはない。
再起動するか聞かれたら、素直に再起動しよう。
Step 2. CYBOS Plusの接続確認
次はCYBOS Plusが接続されているかを確認するPythonコードで、win32com.client
のDispatch()
モジュールが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の実行
CYBOSを実行し、上のスクリーンショットのように正確にCYBOS Plusタブを選択した後、ログインする。少し待つと、次のようにCYBOS Plusのお知らせを表示するウィンドウが現れる。
トレイでCYBOS Plus Startというプログラムが実行されているかを確認できる。
この状態で再度接続状況を確認すると、以前とは違うがやはりエラーが出る。
>>> 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でなければならない。
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またはターミナルを管理者権限で実行
管理者権限で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
接続はされたが、実際に情報を受け取っているかどうかを確認するために、銘柄名で銘柄コードが呼び出されているかを確認しよう。例えば「シージェン」なら、以下のようにA096530をうまく取得できる。
>>> instCpStockCode = win32com.client.Distpatch("CpUtil.CpStockCode")
>>> seegene = instCpStockCode.NameToCode("씨젠"); seegene
'A096530'
このAPIのアプリケーションは、CYBOS Plusが実行されている状態でのみ使用できる。