準備
アプリケーションのインストール
まず、ここを理解しないと厳しいです。
「APIなんだからPythonで直接RESTとかすればいいんじゃないの」と思い込んだらハマります。
IB証券のAPIはゲートウェイから接続となります。説明しにくいので以下の図を参照してください。
要はシステムを稼働させるパソコンやサーバにIB証券が提供しているソフトウェアをインストールしないといけないということです。
このソフトウェアは2種類あります。
- IBゲートウェイ(これが本来のゲートウェイのソフトウェア
- デスクトップTWS(本来はデスクトップアプリの投資ツール
私のやり方は、
- IBゲートウェイ(本番の実行時のみ利用
- デスクトップTWS(開発時に利用
として使っています。IBゲートウェイはゲートウェイしか機能がありませんので、視覚的に発注や決済が見れるデスクトップTWSを利用しながらシステムを開発しています。
ソフトウェアはこちら
IBゲートウェイ
https://www.interactivebrokers.co.jp/jp/index.php?f=16901
デスクトップTWS
https://www.interactivebrokers.co.jp/jp/index.php?f=15901&ns=T#tws-software
インストール後の設定
2つのソフトウェアとも設定内容は同じですが、画面が違うので少し悩みます。
設定画面へのアクセス
- IBゲートウェイ
- メニュー「設定」ー>「設定」
- 設定ー>APIー>設定
- デスクトップTWS
- メニュー「ファイル」ー>「グローバルコンフィグ」
- 設定ー>APIー>設定
設定内容
以下の3つで問題ないと思います。
- ActiveXとソケットクライアントを有効にする:ON
- API(読み込みのみ):OFF
- ソケットポート:任意の数値(このポートを利用してターミナルなどから接続します
パッケージのインストール
ib_insync
というライブラリを利用します。他にもあるようですが、これが比較的に簡単で安定しているようです。インストールに-U
というのがついています。
pip install -U ib_insync
理由は分かりませんが、ドキュメントに書いてある通りにしています。
ドキュメントなどは以下にあります。これを知らないと厳しいかもです。
(スキンヘッドのイカツイおにいさん?は気にしないでください)
接続
from ib_insync import *
でib_insync
の全てのオブジェクトをインポートします。
util.startLoop()
はJupyter Notebookで使う時のみ必要です。
ib.connect(ローカル・ループバック・アドレス, ポート番号, clientId=任意の数値)
で接続します。
- ローカル・ループバック・アドレス:自身のPCなどのIPアドレス(
'127.0.0.1'
または'localhost'
- ポート番号:ゲートウェイで設定したポート番号
- clientId:1以上の任意の数値(複数の接続が可能ですが、その際は数値が重複しないようにしましょう。
from ib_insync import * util.startLoop() ib = IB() ib.connect('127.0.0.1', 4002, clientId=1000)
再起動
デスクトップTWSとIBゲートウェイは毎日再起動します。再起動の時間は、以下の画面で設定することができます。
再起動中はもちろん接続できません。シストレを開発する際は、この点も考慮する必要があります。
以下を使うと再起動を止めることができるようなのですが、まだ使ったことはありません。情報共有まで。
https://github.com/ib-controller/ib-controller/
切断
上記の再起動とは別に、接続が切断することが多々あります。多分、毎日日本時間で1時ごろ、13時ごろ、19時ごろに断続的にです。
以下のページを見ると赤のマーカーにあるようにシステムのリセットがあるようです。
1日に3回あると思うのですが、2回のAsiaのサーバかなと思います。
First reset: 16:30 – 17:00 ETはアメリカ東部時間なので日本より13時間遅いので一致、Second reset: 20:15 – 21:00 HKTは香港時間なので1時間遅いのでこれも一致しています。
お昼頃の謎の切断は謎です。
Trading is available 24 hours a day, 7 days a week with the exception of system reset times described in the table below.
Server Reset Times North America Europe Asia Saturday – Thursday 23:45 – 00:45 ET 1 05:45 – 06:45 CET 1 First reset: 16:30 – 17:00 ET 1
Second reset: 20:15 – 21:00 HKTFriday 23:00 – 03:00 ET 2 23:00 – 03:00 ET 2 23:00 – 03:00 ET 2 Current System Status | Interactive Brokers LLCInteractive Brokers system status
再起動と合わせて、この切断もシストレを開発する際は、この点も考慮する必要があります。
接続の確認
接続の有無の確認
ib.isConnected()
で接続の有無を確認することができます。
返り値はブーリアン型で、接続していればTrue
、接続していなければFalse
となります。
ib.isConnected()
接続情報の確認
ib.client.connectionStats()
で接続情報を確認することができます。
ib.client.connectionStats() # ConnectionStats(startTime=1589937766.302922, duration=20.51628303527832, numBytesRecv=35203, numBytesSent=112, numMsgRecv=708, numMsgSent=7)
デスクトップTWS
画面右上にある「データ」をクリックすると接続状況を確認することができます。
赤枠のところですが、3つの接続があります。この画面から切断することはできません。
切断
ib.disconnect()
引数の設定はなく、ibで接続したものを切断します。他の接続を切断することはできません。
コメント