準備
アプリケーションのインストール
まず、ここを理解しないと厳しいです。
「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 page explains to users how we are operating at the current time.
再起動と合わせて、この切断もシストレを開発する際は、この点も考慮する必要があります。
接続の確認
接続の有無の確認
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で接続したものを切断します。他の接続を切断することはできません。
コメント