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

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

どうも。私はインタラクティブ・ブローカーズ証券(以下、IB証券)をメイン口座にし、同社のAPIを使っているのですが、色々仕様を忘れ始めているので、備忘録も兼ねて解説を書いていこうと思います。因みに筆者はエンジニアでもないし、プログラミングをどこぞで習っていた等ということも一切無い文系デリバティブトレーダーなので、かなり基礎的な内容になります。そして多分に非効率なコードが含まれている可能性があります。そして、本投稿は投資判断の参考となる情報提供のみを目的として作成されたもので、個々の投資家の(ディスクレーマー以下略)

 

え?IB証券をご存知ない?

…いきなり煽ってますが、どう考えても失礼ながら国内でメジャーな証券会社とは言えないので、ご存知ない方も多いかと思います。

https://www.interactivebrokers.co.jp/jp/home.php

アメリカを中心に世界中に展開しているネット証券、と言ったところでしょうか。機関投資家向けのブローカーもやっており、昔仕事で存在を知りました。日本にも支社があるので、海外業者ではありますが、日本の金融庁の監督下にあります。

 

…ここでIB証券の魅力を語ると長くなるので、本題に移りましょう。

 

APIの概要

使用可能な言語

  • Java
  • C++
  • .NET(C#)
  • ActiveX
  • DDE(Excel)
  • Python

詳細はIB証券のサイトを見てくれ、という話になってしまうんですが。一応DDEを使えばExcel関数でデータ取得も出来るので、「プログラミングとか一切無理」という方でも始めることは可能です(イメージとしては楽天証券のマーケットスピードにあるRSS関数に近い)。

 

APIで主に可能なこと

  • リアルタイムマーケットデータの取得
  • ヒストリカルマーケットデータの取得
  • 発注関連
  • 口座情報の取得等
  • ニュースの取得?(よく分からん←おい)

大体何でも出来ます。怖いくらいに。発注は取引ツール側で制御出来るので、テスト環境だと思って実弾撃ってた、という悲劇は回避できるようになっています。

 

筆者の状況

昔はPythonが無かったんですが最近前述のように追加されました。ただ、私はPython版が公式から出る前に、有志が作った「IBPy」というJavaベース?でPythonを使ってAPIを叩けるプログラムを使って色々作ってしまったので、今もそのまま使っています。まあ基本はIB公式PythonもIBPyも同じはずなので、公式Pythonを使おうかな、と思っている方もご参考になれば。Excel版もちょこちょこ使っているので、気が向いたらそっちも別の記事にします。

 

IBPy・TWS APIの導入

いきなりの圧倒的ネタバレ

実は大半はこのサイトを見てしまえば解決してしまう。というか筆者は最初このサイトを見て学んだので…とは言えここには発注方法は書いてあるんですが、個人的には発注という根幹は流石に当分手動で良くて、それよりヒストリカルデータ取得を優先したかったものの、それについては記載がありませんでした。

https://pythonprogramming.net/ibpy-tutorial-using-interactive-brokers-api-python/

しかしながら、TWS(Trader Work Station。IB証券のメインの取引ツール)のダウンロードから云々までの説明は、もう上のリンク先見ていただいた方が丁寧な気がするので、この記事ではその先を重点的に書きます。

※IBPy自体はGitHub上で公開されています。

https://github.com/blampe/IbPy

 

 

TWSとIB Gateway

APIを使って諸々の事を行うには、TWSないしIB Gatewayというプログラムを起動している必要があります。まずは両者の違いを比較しましょう。

 

TWS

完全に普通の取引ツールなので、発注関連のテストを行うのに最適(約定結果が視覚的に分かり易い)。ただし、重い。

 

IB Gateway

一応UIは存在するものの、ほぼログと接続状態の表示のみ。しかも大半意味が分か(自主規制)。なので軽い。

 

筆者は最終的な発注は手動で行っているので、APIは完全にマーケットデータ取得用としています。日中はTWSを起動して、早朝にIB Gatewayで引け値をバッチで取得する、という感じです。

上図は簡単なイメージですが、普段はPCでTWSを起動、Windows Server上でIB Gatewayを起動しておいて、早朝にAPIでDBにデータを入れる、という流れです。なのでAPIは図中の赤矢印となります。

 

余談

IB証券ではユーザーが自ら取引所を選んで、そこのマーケットデータを購入する(月次のコストがかかる)という仕組みなので、普通に契約すると、2つのアプリで同時にリアルタイムデータを見ることは出来ません。なので、TWS起動中はIB Gateway側ではペーパートレーディング用のアカウントでログインしておき、IB Gateway側のバッチ処理が開始される時間帯にはTWSを落としておく、という運用をしています。面倒なようで、朝7:30くらいのほぼどこも動いていない時間帯にやれば良いので、それ程面倒では無いです。

TWS経由でデータを取ることも可能なので、ザラバで直近までのデータをDBに入れたい時は、PC側でAPIを叩けばOK。因みにTWSは放置しておくと一日一回は勝手に落とされるので、サーバー上で動かしておくのにはあまり向いていません。逆にIB Gatewayは一週間程度は放置しても強制ログアウトしないので、サーバー向きですね。

 

テスト環境の構築

TWSの「グローバルコンフィグ/API/設定」と進むと以下の画面が出るので、赤く囲った欄にチェックを入れましょう。

先程の英語の解説サイトでは発注がメインだったので、ここの設定は弄っていませんでしたが、マーケットデータ取得だけを行う場合、むしろ発注機能はこのように停止した方が安全です(まあペーパーなら何やっても良いけど)。

 

既に長くなってきたので、コードを書くのは次回以降にしましょう。

Tagged on: ,

2 thoughts on “インタラクティブ・ブローカーズ証券のAPIをPythonで操作する 準備編

  1. 池田

    記事拝見しました。
    デリバティブを中心としたサラリーマントレーダーです。
    普段IB証券の口座を使って取引していますが
    夜間の取引が続くと昼間の活動に支障きたしかねないので
    自動売買のツールを利用したいと考えています。
    良いツールあれば教えて頂けないでしょうか。
    なければ一から勉強して自作してでも作りたいと
    思いますが何分プログラミングや環境作った経験がなく
    (学生の時に情報科学専攻でカードゲームを作る等少しだけかじりました)

    1. plnjpy Post author

      コメントありがとうございます。返信を記事の下部に載せておりますが、お名前が表示されてしまう仕様のようでして、ご迷惑でしたらご連絡下さい。削除して別途メールにて返信させていただきます。

      IB証券を使っておられる方と接点が出来て嬉しく思います。ご質問いただいた自動売買ツールに該当するかは不明ですが、APIを利用したサードパーティー製のものが存在するようでしてIB証券のHPからもリンクで飛べるようです。すみませんが自分はいずれも使用したことがないので具体的にどれが最適か、といったところはお答え出来ませんが…
      https://gdcdyn.interactivebrokers.com/Universal/servlet/MarketPlace.MarketPlaceServlet

      上記のツールの詳細が不明というのもありますが、売買のロジックや取扱商品によっては自作した方が楽なケースもあるかと思います。実は私も本当は完全に自動化したいのですが、流動性の低い市場を使っているので発注絡みのロジックを整備するのが面倒で放置気味です…FXや主要株価指数先物であれば流動性の心配は不要なので、そこまで複雑な処理にはならないかなと(それでもバグやマーケットデータ受信失敗等の非常時に関する対応は色々必要ですが)。
      私も根っからの文系なのでプログラミングの勉強は苦労しましたが、学生時代に触れておられるようでしたら取っつき易いかと思います。

コメントを残す

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