Interactive Brokers 証券とは
日本には珍しく自動売買プラットフォームが提供されいてる証券会社です。基本的には全部JAVAで書かれていますが、最近Pythonも公式に対応しました。
Python ライブラリの入手
Latest版のzipをダウンロードしてください。Stable版にはPythonが同梱されていないととても小さい文字で書いてありました。Python3のみ対応とのこと。
Pythonのパッケージディレクトリから下記コマンドでインストールしておきます。
python3 setup.py install
つなぎ方
IB Gatewayアプリを立ち上げるか、TWSを起動して、ローカルにAPIサーバーを立ち上げます。
まだ開発途中でデバッグがしやすいので、TWSを利用した形での説明をします。
TWSを立ち上げて、File -> Global Configuation -> API の項目からEnable ActiveX and Socket clientsにチェックを入れれば、APIサーバーが立ち上がります。
公式 Python API つらい
ドキュメントを見ながら、実装していこうと思った矢先、ドキュメントに動くコードがあまり載っていないことが発覚。コードの切り出しだけ貼り付けてある感じで、実際にどのようにすれば価格情報を取得できるのかがパット見で全然分かりませんでした。
2018-08-07 追記
そのままibapiを使うと、loggingのrootでのログが大量に発生してしまいます。
インストール時に下記コマンドでインストールしておけば、名前でログの管理ができるようになります。
unzip twsapi_macunix.973.07.zip
cd IBJts/source/pythonclient/ibapi
sed -i -e 's/import logging/\0\nlogger = logging.getLogger("ibapi")/g' *
sed -i -e 's/logging.debug/logger.debug/g' *
sed -i -e 's/logging.info/logger.info/g' *
sed -i -e 's/logging.error/logger.error/g' *
sed -i -e 's/logging.log/logger.log/g' *
cd ..
python3 setup.py install
より使いやすいライブラリを使う
そんななかどりらんさんより救いの手が。
こういうのあります https://t.co/yXXt5AfRLs
— driller/どりらん (@patraqushe) July 31, 2018
これで簡単に価格情報とかとれました。
サンプルコード
from ib_insync import *
import time
def onPendingTickers(tickers):
for t in tickers:
print(t.bidSize, t.bid, t.ask, t.askSize, t.high, t.low, t.close)
if __name__ == "__main__":
ib = IB()
ib.connect('127.0.0.1', 4001, clientId=1)
contracts = [Forex(pair) for pair in 'EURUSD USDJPY GBPUSD USDCHF USDCAD AUDUSD'.split()]
eurusd = contracts[0]
for contract in contracts:
ib.reqMktData(contract, '', False, False)
ib.pendingTickersEvent += onPendingTickers
while True:
ib.sleep(1)
ib.sleep
を使わないと、イベントループが周ってくれません。ハマった・・・。
コメント