Interactive Brokers 証券の Python API を利用する

Python
スポンサーリンク

Interactive Brokers 証券とは

日本には珍しく自動売買プラットフォームが提供されいてる証券会社です。基本的には全部JAVAで書かれていますが、最近Pythonも公式に対応しました。

Python ライブラリの入手

IB API | Interactive Brokers
はてブ数
Our proprietary API solutions let you create your own trading programs that take advantage of our high-speed order routing and broad mark...

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

より使いやすいライブラリを使う

そんななかどりらんさんより救いの手が。

これで簡単に価格情報とかとれました。

サンプルコード

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を使わないと、イベントループが周ってくれません。ハマった・・・。

参考リンク

コメント

タイトルとURLをコピーしました