デリバティブ偏愛家の日記

インタラクティブ・ブローカーズ証券のAPIをExcelで操作する リアルタイムデータ編

IB証券のAPI紹介シリーズ、今回はExcelに関するAPIを使います。

※Python編はこちら

インタラクティブ・ブローカーズ証券のAPIをPythonで操作する データ取得編

自明ですが、普通にそのままExcelのシート上にデータが出て来るので、Excelの方がPythonより簡単です。なので、「いや、プログラミングとか普段やってないからハードル高いな」という方にもオススメです。特にExcel版において便利なのは「リアルタイムマーケットデータの表示機能」で、これに関してはしっかり自作のシステムで作り込みたい、という人でなければ、データのDB投入は別の言語でも、マーケット監視はExcelで十分な印象です。ですので、今回は先にリアルタイムデータ取得の方法について書きます。

 

公式ヘルプのURL

http://interactivebrokers.github.io/tws-api/dde_realtime_tutorial.html#dde_rt_requisites

今回はPython以上に公式ヘルプが充実していますので、英語を見ると拒絶反応で震えが止まらない、というような事情が無ければ、こちらも参照することをオススメします。

 

基本的な考え方

これはPythonの時と同じで、銘柄毎に重複しない「id」を割り振り、そのidに対して「bid」や「last」といったパラメータを要求する、という形になります。

 

idの設定

どこか適当なセルに以下の式を入れます。

=S[口座ID]|tik!’id[id]?req?[銘柄情報]~/’

[青字]は変数なので、適宜変更する必要があります。

  • 口座ID:まあそのまんまですね。
  • id:これが要求する銘柄に紐づくidで、整数なら何でも良いですが重複はNG。
  • 銘柄情報:どの銘柄のデータを要求するか、ここで定義します。

途中に、細い縦棒(バーティカルバー)が含まれていたりと色々厄介なので、丁寧にコピーしましょう。結構ここでハマります。

※式の例(”tes123456″という口座でUSDJPYのデータを取る)

=Stes123456|tik!’id101?req?USD_CASH_IDEALPRO_JPY_~/’

 

銘柄の定義

今回もPython同様に厄介な銘柄定義が必要です。解説します。基本的には銘柄情報は、

シンボル + 商品タイプ + 取引所 + 通貨

で定義され、各要素の隙間は「_(アンダーバー)」で繋ぎます。なので、EURUSDみたいなシンプルな例だと

EUR_CASH_IDEALPRO_USD_

となります。まあ「EUR」みたいなタイプは簡単なんですが、「ZF   SEP 18」のようにシンボルに隙間(スペース)がある場合、途端にカオスになります。というのも、式の中にスペースを入れられないので「singlespace」という文字をダイレクトに入れるという謎の仕様になっているんです。この「ZF   SEP 18」(米国債5Y先物2018年9月限)の場合、

ZFsingleSpacesingleSpacesingleSpaceSEPsingleSpace18_FUT_ECBOT_USD_

となります。判読性の低さが半端ないですね。何だこの呪文は。

実際には満期を別のパラメータで渡すという他の銘柄指定方法もあるので、必ずしもこうしないといけない訳ではないです(筆者は為替も全て同じ式で作りたかったので、こんなカオスに)。因みにこの「ZF   SEP 18」のような「ローカルシンボル」で指定した場合、先の式で「req」となっているところを「req2」に変更する必要があります。面倒ですね。いやローカルシンボル使ったの失敗だわ。

 

設定が上手くいった場合

きちんと指定できた場合、TWSないしIB Gatewayを起動させておけば、セルの値が「0」になります。それ以外になった場合はエラーが発生していると考えて良いです。逆に、これだけでは何のデータも出てきませんのであしからず。

 

データの要求

今度は先程と別のセルにデータを要求する式を入れます。

=S[口座ID]|tik!’id[id]?[要求するデータ]

これまた[青字]は変数なので、適宜変更しましょう。

  • 口座ID:相変わらずそのまんまです。
  • id:ここで先程定義したidを入れます。これでこの式と銘柄が紐づきます。
  • 要求するデータ:「bid」や「last」等を指定します。

正しく指定出来た場合、データの更新があり次第反映されます。なので、過疎っている先物や、既に引けている市場のデータだと反映されるのに時間がかかって正しく入力出来たのかイマイチ分かり難いです。テストではUSDJPYのような超高頻度で更新されるものを使いましょう。

※式の例(USDJPYのbidを取る)

=Stes123456|tik!’id101?bid

 

次回はヒストリカルデータ取得編です。

Tagged on: ,

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です