見出し画像

IB証券TWSのAPIドミトリーFAQ:プログラミング言語別コードサンプル

こちらはIB証券(インタラクティブブローカーズ証券)のAPI情報で、公式以上に細かい点がカバーされているDmitry's TWS API FAQを日本語翻訳にかけつつ、わかりにくい部分をできる限り修正した上で魚拓保存しているものです。元のウェブページは量が多すぎて閲覧しにくく、元サイトを翻訳にかけるとPCが固まる上、最近アクセスが不安定になっているため、備忘録用に章ごとに分けて保存しています。

目次

  1. TWSアプリ関連

  2. プログラミング言語別コードサンプル(このページ)

  3. 実装メモ

  4. よくあるエラーと修正方法

  5. ContractDetails、Index、注文方法(共通)

  6. コンボ注文、ブラケット注文、株式・オプション・先物注文

  7. 約定照会、デモ口座とリアル口座、グラフ化

  8. データサブスクリプション

  9. スキャナ、基本仕様、過去データ制約、IBゲートウェイ

  10. FX関連、ポートフォリオ情報、その他

プログラミング言語別コードサンプル

[Q] まったくの初心者ですが、どこから始めればよいでしょうか?

[A] ExStock (#45602)
2020 年 10 月 10 日に追加

私もゼロから始めたので、初心者でもできるようになります。皆さんを落胆させるつもりはありませんが、やりたいことを安全に行うためには、おそらく学ばなければならないことがたくさんあります。実際に何かを試す前に、IB証券のペーパー取引口座での作業に多くの時間を費やしてください。

まず始めたいのは、IB から入手できる Python TWS API に関するビデオです。これらのビデオは消火ホースから水を飲むようなもので、多くの情報が非常に速く表示されますが、基本的な事項は多くカバーされており、何度も一時停止を押してひとつひとつ確認していけます。

これらのビデオを背景知識として理解した上で (各例に関連する実際の Python コードも示されています)、導入を簡単にしてくれる ib_insync Python フレームワークのインストールを検討することをお勧めします。

Jupyter Notebook または JupyterLab のいずれかをインストールすることもできます (両方は必要ありません): https://jupyter.org/。どちらも Python でのコーディングを簡素化し、ib_insync ノートブックに表示される内容を理解し、実験しやすくします。

上記はすべて無料で試すことができます。頑張ってください!

[Q] 私のような初心者の場合、何をすればいいのか、何を探すべきか、何をするべきでないかを知るためにお勧めできる本はありますか?

[A] (#45571)
2020 年 10 月 6 日に追加
Matthew Scarpino 著の「Algorithmic Trading with Interactive Brokers」には、初心者に役立ついくつかの基本的な Python スクリプトとパラメーターのリストが含まれています。

この本は良い本です。Rob Carver のブログ ( https://qoppac.blogspot.com/ )も参照することをお勧めします。IB API の使用方法に関するセクション (2017 年 3 月) があり、接続の基本的な内容が説明されています。価格を取得し、取引し、調整し、それに基づいて構築できます。

[Q] ActiveX を使用した C++ および C# のチュートリアル/サンプルはどこで見つけられますか?

[A] Rich Holowczak (別名「Prof. H.」) 著
皆さん
少し前に、私の金融 IT クラス用に Interactive Brokers API の一連のチュートリアルを書きました。現在、それらを Web サイトにまとめているところです。現在、Visual C++ と Windows Forms を使用していくつかの作業を進めています。今後数週間にわたって、C# を使用した WinForms も含めた投稿をさらに投稿する予定です。コメントや提案は大歓迎です:
http://holowczak.com/category/ib/

リッチ H.

[Q]正常に動作する posix C++のサンプルコードはどこで見つけることができますか?

TWSAPI Yahoo グループの「ファイル」セクションを確認してみてください。また:
[A]ジム・コヴィントン著
サンプルコードは、IB APIをインストールしたフォルダ内にあります。

[Q]より高度な動作する posix C++のサンプルはどこで見つけることができますか?

TWSAPI Yahoo グループの「ファイル」セクションを確認してみてください。また:

[A] Jan Boonen による優れた IB API ラッパー TwsApiC++ があります。

(引用)
C++ 実装では、基本的な 2 つの API クラスは EWrapper と EClient であり、ディレクトリ「Shared」に定義されている他のクラス/構造と組み合わせられます。Java と比較すると、これらのクラスは純粋なインターフェイスです。EClient の実装は EClientSocketBaseImpl で行われ、リンク時にすべてが接続されます。EWrapper の実装はあなた次第です。

ほとんどすべての C++ プログラマは、クラスの定義とその実装を 2 つの別個のファイルに記述することを選択しますが、C++ はこれを強制しません。私は Java の方法を好みますが、C++ はそれを同じ程度までサポートしていません。ある程度の注意が必要で、純粋なインターフェイスが必要な場合は、とにかく定義と実装を分離する必要があります。したがって、さまざまな C++ プロジェクトを研究すると、異なったアプローチが見つかるでしょう。賛成派と反対派をすべて議論することは、プログラミングテキストスタイルの議論と同様、終わりのない話です。

非posix バージョンの API はスタンドアロンとして使用できません。ソケットの読み取りと EWrapper メソッドの呼び出しについては、Windows 固有のソケット実装に依存します。したがって、「EReader」は Windows 固有の非同期ソケットスタックの奥深くにあります。

これにより、非posix バージョンは移植性がなく、非Windows プログラムでは使用できなくなります。これら 2 つの弱点を克服するために、無料のライブラリがいくつか存在します。私は 2008年に無料のTwsApiC++ライブラリを開始しました。現在のバージョンは IB の posix ライブラリに基づいています。

このTwsApiC++ ライブラリは何を提供しますか?

a) EClient と EWrapper は依然として基本的な 2 つの API クラス (より具体的には、その派生バージョンである EClientL0 と EWrapperL0) です。したがって、EClientSocketBase やその他の複雑な posix クラスなどのすべての内部クラスにアクセスする必要はありません。

b) EReader を実装しており、デフォルトで有効になっています。これは別のスレッドで実行され、ソケット上の受信データを待ち、遅延なく EWrapper メソッドを呼び出します。このリーダーは、EClient のインスタンス化時にパラメーターを渡すだけでオフにできます。

c) 定義されたすべての EWrapper メソッドに対して空のメソッドを実装します。したがって、興味のあるものだけを実装する必要があります

d) これは、 TwsApiC++ が ラッパーである IB ライブラリの内部動作を、ユーザーコードでスローされるがキャッチされない可能性のある例外から保護します。

e) EClientSocketBaseImpl を内部メンバーの同時使用から保護します。これにより、TWS に送信されたリクエストが失われる可能性があります。

f) EClientSocketBaseImpl のバッファーに滞留し、何らかの理由で TWS に送信できなかったデータができるだけ早く送信され、次の EClient 呼び出しが行われるまで待機したままにならないようにします。posix API では、プログラマがそれを処理する必要があります (!)

g) オプションで、実行時ではなくコンパイル時に多くのテキストまたは数値パラメーターの正しいスペルをチェックする方法を提供します。

ライブラリは軽くて早いです。いくつかのサンプル/テストプログラムが含まれており、Visual Studio用のプロジェクトファイルと Linux/UNIX 用のメイク ファイルも含まれています。Readme ファイルも含まれています。

(引用終わり)

ここで TwsApiC++ をインストールする方法のチュートリアルも参照してください: [Q] Linux 用の IB ゲートウェイと TWS API をインストールしますか? ( Rich Holowczak (別名「Prof. H.」) によるチュートリアル)

posix TWSAPI では、そのような作業は必要ありません。

-カート

メッセージ 、2010 年 10 月 20 日
私もこれに賛成です。新しく改良された API は車輪の再発明ではなく、現在の IB API を「より丸い車輪で回しやすく」するべきです (これが意味があることを願っています)。

Shane Cusson 氏が述べているように、IB の API を使用して単純な戦略を実装することは、「バズーカを使ってハエをたたくことのようなもの」です。したがって、この新しい API はその使用を簡素化する必要がありますが、複雑な戦略の実装を妨げるものでもありません。

C++ 実装の場合、ソケットの使用を隠すため、TwsApiC++のようなものが最初のステップとなります。ESocketClient ではなく、EClient/EWrapper がインターフェイスです。ATS のソケットを処理しなければならないのは根本的に間違っていますね。TwsApiC++ は、C++ API を dinosaurtechの C# 用 API のようなものとほぼ同じレベルにします。

それに加えて、2 つの追加レイヤーを実装/作成しているので、ここで共有するのは興味深いかもしれないと思いました。

EClient/EWrapper ( EClientL0/EWrapperL0 )の上の最初の層:

  1. EClient/EWrapperの機能は、Connection、MktData、HistoricalData、PlaceOrder、Account、Portfolio などの機能クラスに再グループ化されます。各クラスはリクエストを行うために必要なデータを保持し、リクエストに関連するすべての EWrapper イベントがルーティングされます。要求元のクラスに戻ります。つまり、実行される各 reqHistoricalData には、クラス HistoricalData の独自のインスタンスが必要です。このインスタンスはリクエストを処理し、そのリクエストのみのすべてのhistoryData() イベントを受け取ります。

  2. すべての ID (tickerId、orderId、reqId ) を非表示にします。ID の割り当ては自動化され、非表示になります。id==-1 のエラーは Connection クラスにルーティングされます。

  3. アカウントとポートフォリオのクラスは acctCode 上のイベントをフィルタリングするため、各アカウントはアカウントとポートフォリオの独自のインスタンスを持つことができます。acctCode を空白または空にすると、すべてのアカウントのデータを受信できるようになります。

  4. これらの各クラスには、Request()、Cancel()、Resend()、および Error() の共通インターフェイスがあります。req… のパラメータはクラスの割り当て中に設定されるため、Request() メソッドにはパラメータがありません。

最初の層は EWrapper インターフェイスに似ており、IB API の特別な動作には適応しないため、2 番目の層は次のようにプログラマーにとって使いやすいようにさらに一歩進んでいます。

  1. Account、Portfolio、HistoricalData などのクラスのデータを保存します (Mktdata や RealTimeData などのデータは保存しません)。

  2. 可能な場合は、より均一なインターフェイスを提供します: OnInit() (すべてのアカウントが利用可能であること、履歴データが完了していることを意味する…End() イベントの後に呼び出されます)、OnChange() (つまり、Init() が呼び出された後、新しく更新されました)アカウント データは受信します)、このデータにアクセスするための ForEach()、前方イテレータおよび後方イテレータなどを使用します。

  3. MktData を MktDataSTK、MktDataFUT などに分割します。Mike Smith の「ゼロ サイズ バグ」の回避策は、この層にうまく適合します。

  4. 接続の持続性と、リンクがエラー (1101)、1102、1300 で壊れた場合にリクエストを再送信します。

  5. Connection クラスの run メソッド: つまり、Run(Run::Until(15,30,00)); これは基本的にループして checkMessages() と Connection::RunActions() を呼び出します。したがって、私の ATS プログラムまたはテスト プログラムには、ATS の割り当てと Run メソッドの呼び出しという、非常にコンパクトな「メイン」ルーチンが含まれています。

このビューは C++ で実装されていますが、少しでも役立つことを願っています。実装はまだ完了していません。

ヤン・ボーネン

[Q] Python?

[A] Python 言語については、Ewald de Wit が ib_insync という素晴らしいフレームワークを作成しました。

これにより、すべての管理機能が処理され、ユーザーはクライアントコードとトレーディングに集中できるようになります。ご存じない場合は、 彼の GitHub リポジトリと広範なドキュメントをご覧ください。

ib_insync を使用すると、TWS API を自然な非同期リクエスト/レスポンスモードで操作できるようになりますが、より従来のシーケンシャルアプローチに便利なブロック バージョンも提供します。また、Pythonで同期を実現する方法に関する豊富な例のソースとしても使用できます。

これら 2 行のコードを例として取り上げます。ib_insync でクライアントを TWS API に接続するために必要なのはこれだけです

ib = IB()

ib.connect('127.0.0.1', 7497, clientId=1)

また、 「jupyter」という単語で groupse.io フォーラムを参照してください。
https://groups.io/g/twsapi/search?q=jupyter

tkinter や pygame などの GUI ライブラリを使用します。テストには jupyter を使用することもできます。ここのどこかにサンプルがあります。
https://groups.io/g/twsapi/message/37329
https://groups.io/g/twsapi/message/37341

[Q] Delphi?

TWSAPI Yahoo グループの「ファイル」セクションを確認してみてください。また:
[A] by josejp1
このリンクには、Delphi を使用した Trader Workstation API のプログラミングの良い例が示されています。
http://delphimagic.blogspot.com/2010/07/interactive-brokers-con-delphi-tws.html
例えば、TWSとの接続、市場データのリクエスト、価格ティックの取得、注文(mkt、lmt、stpなど)、履歴データのリクエスト、注文情報の取得、注文のキャンセル方法などです。

- また -
Delphi / BCB / Kylix TIABSocket コンポーネントと API
http://www.hhssoftware.com/iabsocketapi/index.html
最新の 9.76 API に更新されました (2020 年 1 月)
このコンポーネント セットは、Interactive Brokers TradeWorkStation API で動作するように構築されています。これにより、Delphi と BCB のプログラマーは、注文を TWS に直接送信するアプリを構築できるようになります。この TIABSocket コンポーネントは、ソケットに直接リンクして TWS と通信します。dll、ActiveX、.Net、または DDE ファイルは必要なく、すべてのソケット メッセージとデータが即座に処理されます。このソケットへの直接接続により、信頼性の高い高速な対話と応答時間が実現します。このコンポーネント セットは、TWS とのすべての対話も制御し、注文アクティビティ、ポートフォリオ、およびアカウントの詳細を管理するためのサブコンポーネントが含まれています。コードの見た目や操作性は他の Delphi コンポーネントと同じであり、構文は既存の標準コンポーネント コードと似ています。完全なソースと、デモアプリおよびヘルプファイルが含まれています。

[Q] Java?

TWSAPI Yahoo グループの「ファイル」セクションを確認してみてください。また:
[A] by Suminda
私は、可能な限り機敏な CEP (Complex Event Processing) ベースのトレーディングシステムを開始しました。これは概念化の段階にあり、最終的なアーキテクチャがどのようになるかについていくつかの実験を行っています。これを推進するためのチームの構築を支援するだけでなく、これを支援することは可能でしょうか。

スミンダ

http://code.google.com/p/cep-trader/

Java 補足: Hubert.tse@gmail.com より
私の Eclipse は Java コンパイラー -> 1.5 コンプライアンス レベルに設定されていました。
どうやら 1.5 は @override をサポートしていないため、実行されません。これを 1.6 以降に設定すると、すべてのエラーが解消され、完全に起動します。
たくさんのご協力ありがとうございました!

[A] by Rob Terpilowsky (スレッド)
私が使用した2つのライブラリは次のとおりです
ta4j: https://github.com/mdeverdelhan/ta4j
および TA-Lib :http://www.ta-lib.org/

TA-Lib よりも API がすっきりしているため、私は ta4j を好みます。

[Q] Ruby?

TWSAPI Yahoo グループの「ファイル」セクションを確認してみてください。また:
[A]ハルトムット・ビショフ博士著
まあ、i- rubyもあります。
次のような純粋なRuby スクリプトを使用できます。

    require 'ib-ruby'
    ib = IB::Connection.new( port: 7497 ) do | gw |
      gw.subscribe(:Alert, :AccountValue) { |msg| puts msg.to_human }
      gw.subscribe(:OpenOrder) { |msg| puts "Placed: #{msg.order}!" }
      gw.subscribe(:ExecutionData) { |msg| puts "Filled: #{msg.execution}!" }
    end

    ib.send_message :RequestAccountData, account_code: 'U123456'
    ib.wait_for :AccountDownloadEnd

    contract = IB::Stock.new symbol: 'WFC'
    buy_order = IB::Limit.order size: 100, price: 21.00, action: :buy,
                                tif: :good_till_cancelled, account_code: 'U123456'

    ib.place_order buy_order, contract
    ib.wait_for :ExecutionData


ハルトムット・ビショフ博士
シュトゥットガルト

2018 年 6 月 6 日更新: ハルトムット ビショフ博士: (#39948)
(引用)
リバース SSHトンネル経由でのみアクセスできる遠隔地にトレーディング ロボットがあるか、安価なクラウド サーバー上で TWS が実行されていると想像してください。

Simple-Monitorは、Web インターフェースを介して Friends&Family-Account のステータスを表示するように設計されています。
これには、camping マイクロフレームワークと ib-ruby を使用したわずか 435 行のコードが含まれています。

これは、リソースが少ないハードウェアでも実行することを目的としており、tmux セッションで適切に実行される elinkを提供し、TWS-Gatewayを優先してTWS-GUIの実行を回避します。

これは、ib-rubyが 既存のフレームワークにどのように統合されているかを示しています。
(引用終わり)

[A2]ピーター・ガム著
IBCシャープ、トレードコマンダー、オープンクアント、
トレードリンク など。RigEdgeは次のとおりで、VB.NET のサポートを含め、あらゆる点で包括的です。
「jTWScharts」でグーグル検索

[Q] C#は?

TWSAPI Yahoo グループの「ファイル」セクションを確認してみてください。また:
[A1]
参照: Interactive Brokers C# API ( Karl Schulze著)
ib-csharp

[A2] Rich Holowczak (別名「Prof. H.」)
IB の C# API (コンソールのみのアプリケーション) を使用するために、さらにいくつかを作成しました。

リッチ H.

[Q] R言語は?

[A] by ce (この スレッドから)
PDFファイル
http://cran.r-project.org/web/packages/IBrokers/index.html

ここの経験豊富なトレーダー/開発者のコ​​ミュニティからフィードバックを得るために、これを利用できるようにしています。

ソーレン

censix – 純粋な R 日中取引フレームワーク – screencast01

GitHub 上の censix:

【R関連リソース】
R を使用した現代のポートフォリオ最適化モデリング

[Q] パターン認識ライブラリ?

2017 年 5 月 16 日に追加
チャートパターン用のオープンソースライブラリはありますか? それとも少なくともアルゴリズムを自分でプログラムできるようにするためのものでしょうか?
主にフラッグ、トライアングル、ダブルトップ/ボトムを探しています。

[A] by Johnny Red (オンラインで表示/返信 (#37504) )
私は TA-Lib を使用しています。これはオープンソースで非常に優れています。C++ で書かれており、Java/C# などで利用できます。Python 用のバージョンもあると思います。
いい物。

[A2] ピーター・カウスロン著
TA-Lib の Python ラッパーはGitHubにあります。
よろしくお願いします。
ピーター

[Q] Javaのリバースエンジニアリングって?

[A] 
「other.jar」の内容を覗くには、名前を「other.zip」に変更すれば、Windows または Mac では通常のZIPと同じように中身を開けます。

いいなと思ったら応援しよう!