IB証券のAPIで自動取引をしよう(1):オプションテーブルの取得
証券会社のAPIを使うと、プログラムを使って自動取引ができます。ここでは、PythonからAPIをたたいて情報をゲットしたり取引を自動化する方法の例を紹介します。Pythonの知識がある程度あるのが前提です。今回の例では使用OSはWindows10です。バグレポートは歓迎しますが、サポートは期待しないでください。
まずIB証券のAPIを使うためのソフトのダウンロードは下からできます。
https://download2.interactivebrokers.com/portal/clientportal.gw.zip
ダウンロードしたらIBというフォルダをつくり、その下の"clientpotal"というフォルダにExtractしましょう。今回の例では下のようなフォルダ構造になっています。IBの下にもう1つdataというフォルダがありますが後で使うので作っておいてください。
Javaも必要です。こちらからダウンロードしてインストールしてみましょう。
clientpotalの1つ上のフォルダ(IBフォルダ)にいって下のような中身のText Fileを作って、run_portal.batという名前でセーブしておきます。
CD clientportal
"bin/run.bat" "root/conf.yaml"
次に、下のように書いて、Login.pyというファイルにセーブします。
import subprocess
import webbrowser
subprocess.Popen('run_portal.bat')
webbrowser.open('https://localhost:5000')
最終的にはIBフォルダの中は下のようになります。IB_data.pyというファイルがありますが、あとで中身を紹介します。(前のバージョンの記事ではIB_test.pyという名前にしていましたが、テストではなくデータ取得用ということで、今後も使うために変えました)
これでLogin.pyを走らせると、ウェブブラウザ―が開き、ログイン画面が表示されます。
>> python Login.py
ログイン画面に移行しない場合は、ブラウザーをRefreshしてください。もしかしたら下のような、セキュリティの問題について警告が出てくるかもしれません。その場合は”Advanced"をクリックして、”Proceed to localhost (unsafe)"をクリックするとログイン画面がでてきます。次からは出てこなくなります。
これで準備がととのいました。 コマンドウィンドウは閉じないでください。。24時間以上たつともう一回同じことをしないといけないようです。これでAPIを使ってIB証券とやりとりができるようになりました。
さて上で述べた、IB_data.pyの中身は下のようになっています。走らせると、オプションテーブルが作成され、1DTEオプションの今の価格やデルタ、ガンマ、シータなどの情報が、dataフォルダの中にエクセルファイルとして保存されます。一回目は情報テーブルを得るためにむっちゃ時間がかかりますが、2回目からは2-3秒で済むはずです。コピペして走らせてみてください。数秒おきにデータを取得して良いタイミングで買うことも可能になりそうです。
外部APIによるリアルタイムデータ取得の高速化(2024/3/17追記)
IB証券のAPIによるオプションデータの取得には非常に時間がかかるので、1つの解決方法として、次の会社のAPIを試しています:
コードの一番上近くの、use_MarketData_APIをTrueにすると、MarketDataのAPIを使うようになります。メール登録してTokenを得る必要があります。'xxxx'を取得したTokenに変えてください。
use_MarketData_API = True
token = 'XXXX'
コードは、一番安いプラン(月$9。IBのオプションのリアルタイムデータは$15くらい)でもいけるようにいろいろ工夫してあります(例えば売買価格をダウンロードするとかなりポイントが削られるので、最小限になっています)。使った感じでは、リアルタイムデータが取れている感じはしました。無料のトライアルができますが、無料期間中はリアルタイムではなく15分遅れのデータがダウンロードされるので注意してください。IB証券のAPIだとめっちゃ時間がかかるSPXオプションなども、わりとさくさくダウンロードできます。IBのリアルタイムデータより安いので、かなり良い感じがしました。
コードのアップデートをするときは、IB_trade.py, IB_bot.pyも一緒にアップデートしてください。
また下の無料記事にあるライブラリ必要になるので同じフォルダに”option_utils.py”というファイルを作って中身をコピペしてください。
(IB_data.pyのコードは下から)
(2024/9/15)**コードの一部、マーケットデータやヤフーからのデータ取得クラスは、下の無料記事部分に移しました。
ここから先は
¥ 3,000
この記事が気に入ったらサポートをしてみませんか?