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

こちらはインタラクティブブローカーズのAPI情報、Dmitry's TWS API FAQを日本語に訳したものです。元のウェブページの量が多すぎて閲覧しにくい&元サイトを翻訳にかけるとPCが固まるため、備忘録用に章ごとに分けて保存しています。

目次

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

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

[A] ExStock のオンライン表示/返信 (#45602) 

2020 年 10 月 10 日に追加

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

まず始めたいのは、IB から入手できる Python TWS API に関するビデオです: https://tradersacademy.online/category/trading-courses/ibkr-api  。これらのビデオは消火ホースから水を飲むようなもので、多くの情報が非常に速く表示されますが、基本的な事項は多くカバーされており、何度も一時停止を押すだけで済みます。  

これらのビデオを背景知識として理解した上で (各例に関連する実際の Python コードも示しています)、プロセスを簡素化する ib_insync Python フレームワークのインストールを検討することをお勧めします: https://ib-insync.readthedocs.io/index。 html  。「ノートブック」リンクをクリックすると、さらにコード例が表示されます。

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

最後に、ib_insync を使用する場合は、 そのためのgroups.io ( https://groups.io/g/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.」) 著 ( src )

皆さん

少し前に、私の金融 IT クラス用に Interactive Brokers API の一連のチュートリアルを書きました。現在、それらを Web サイトにまとめているところです。現在、Visual C++ と Windows Forms を使用していくつかの作業を進めています。今後数週間にわたって、C# を使用した WinForms も含めた投稿をさらに投稿する予定です。コメントや提案は大歓迎です:

http://holowczak.com/category/ib/

乾杯、

リッチ H.

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

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

[A1]ジム・コヴィントン著

サンプル コードは、マシン上の IB API インストール フォルダー内にあります。

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

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

[A] Jan Boonen による優れた IB API ラッパー TwsApiC++ があります( GitHub を参照)

(引用)

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 ファイルが含まれています。

GitHub でご覧ください:

https://github.com/JanBoonen/TwsApiCpp

またはグループメンバーの場合:

「ファイル」 > 「C++ コード」 > 「TwsApiC++ ディレクトリ」を参照してください。

他の実装もあります。このグループの他のメンバーがこれらについて詳しく知っています。

楽しんでください。

1月

(引用終わり)

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

カートからのメモ:

TwsApiC++ を * 使用していたときは、その事実を * 元に戻す * ために追加の作業を行う必要がありました

(Java のように) TwsApiC++ は、

ソケットにアクセスすると、コールバック メッセージがその「リーダー スレッド」に届きます。だから私には必要だった

コールバックをメインに受信するための別のバッファリング層

これには、複雑な関数オーバーロードのセットが必要でした。

次の理由により、TwsApiC++ 実装クラスの変更が非常に必要になります。

物事は因数分解されました(因数分解されませんでした)。

posix TWSAPI では、そのような作業は必要ありません。どちらかが存在する

別個のリーダー スレッドではない場合、またはバッファリングがすでに処理されている場合。(私

どれか思い出せません。)

-カート

Jan からの別のメモはここから来ました

1月B

メッセージ 16/28 、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++ で実装されていますが、少しでも役立つことを願っています。実装はまだ完了していません。

ヤン・ボーネン

【質問】Python?

[A] IB API + Python の素晴らしさについては、以下をご覧ください。

無料のudemyコース: 「Interactive BrokersのTrader Workstation APIを使用したPythonプログラミング

https://www.udemy.com/course/python-api-for-trading/

また:

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)

これを、ボイラー プレートと接続関連のアクティビティに約 75% を費やす必要があったコードと比較してください。

ib_insyncパッケージ : https://github.com/erdewit/ib_insync

および関連するディスカッション グループ:

https://groups.io/g/insync

また、 「jupyter」という単語で groupse.io フォーラムを参照してください。

https://groups.io/g/twsapi/search?q=jupyter

そしてまた:

https://groups.io/g/twsapi/message/37515

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

Ej. 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 を好みます。

私が使用した2つのライブラリは次のとおりです

ta4j: https://github.com/mdeverdelhan/ta4j

および TA-Lib :http://www.ta-lib.org/

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

【質問】Ruby?

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

[A]ハルトムット・ビショフ博士

まあ、i- rubyもあります

次のような純粋なRuby スクリプトを使用できます。

 「ib」が必要です

        ib = IB::Connection.new :ポート => 7496

        ib.subscribe(:Alert, :AccountValue) { |msg| put msg.to_human }

        ib.send_message :RequestAccountData

        ib.wait_for :アカウントダウンロード終了

        ib.subscribe(:OpenOrder) { |msg| 「配置済み: #{msg.order}!」}

        ib.subscribe(:ExecutionData) { |msg| 「埋められました: #{msg.execution}!」}

        契約 = IB::Contract.new :symbol => 'WFC', :exchange => 'NYSE',

                                :currency => 'USD'、:sec_type => :stock

        buy_order = IB::Order.new :total_quantity => 100, :limit_price => 21.00,

                                :action => :buy、:order_type => :limit

        ib.place_order buy_order、契約

        ib.wait_for :実行データ

https://github.com/ib-ruby /ib ruby

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

シュトゥットガルト

2018 年 6 月 6 日更新: ハルトムット ビショフ博士:

オンラインで表示/返信 (#39948) 

(引用)

リバース SSH トンネル経由でのみアクセスできる遠隔地にトレーディング ロボットがあるか、安価なクラウド サーバー上で TWS が実行されていると想像してください。

Simple-Monitor ( https://github.com/ib-ruby/simple-monitor  ) は、Web インターフェースを介して Friends&Family-Account のステータスを表示するように設計されています。

これには、camping マイクロフレームワークと ib-ruby を使用したわずか 435 行のコードが含まれています。

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

これは、ib-ruby ( https://github.com/ib-ruby/ib-ruby )が 既存のフレームワークにどのように統合されているかを示しています。

(引用終わり)

[A2]ピーター・ガム著

IBCシャープ、トレードコマンダー、オープンクアント、

トレードリンク など。RigEdge < http://www.rightedgesystems.com/ > は次のとおりです

VB.NET のサポートを含め、あらゆる点で包括的です

「jTWScharts」でグーグル検索

【質問】C#は?

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

【A1】

参照: Interactive Brokers C# API ( Karl Schulze著)

ib-csharp

https://github.com/krs43/ib-csharp

および/または:

http://www.dinosaurtech.com/utilities/

[A2] Rich Holowczak (別名「Prof. H.」)

IB の C# API (コンソールのみのアプリケーション) を使用するために、さらにいくつかを作成しました。同じ場所:

http://holowczak.com/category/ib/

乾杯

リッチ H.

他に公開されている実用的なコード例をご存知の場合は、 この FAQ にリンクを追加できるようにお知らせください。

[Q]R

[A]  by ce (この スレッドから)

PDFファイル

http://cran.r-project.org/web/packages/IBrokers/index.html

良いです。

 

また、非常に優れたシステム例があります。

http://censix.com/download/

[A2] by censixtws (この スレッドから)

こんにちは、私は qsiblive と呼ぶこの R スクリプトのコレクション (私の Web サイト http://censix.com からダウンロード可能) を開発し、現在紙のアカウントでテストしています。EOD ベースで 1 つのシンボルを取引します。その強みは、「プラグイン」R 分析パッケージ/メソッド (いくつかの古典的なインジケーター、いくつかの ARMA、GARCH モデリングなど) に関して提供される非常に高い柔軟性にあると思います。あなたのトレーディング戦略に多くの分析力を提供するパッケージ。

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

乾杯

ソーレン

見る:

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

https://www.youtube.com/watch?v=Zzd7tx452Ao&index=2&list=LLYax4ZgrNYHP5fLotKBc9Lg

GitHub 上の censix: https://github.com/censix/INTRADAY-PartAB

【R関連リソース】

R を使用した現代のポートフォリオ最適化モデリング

https://www.youtube.com/watch?v=hKDalfhDawA

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

2017 年 5 月 16 日に追加

チャートパターン用のオープンソースライブラリはありますか? それとも少なくともアルゴリズムを自分でプログラムできるようにするためのものでしょうか?

主にフラッグ、トライアングル、ダブルトップ/ボトムを探しています。

[A] by Johnny Red (オンラインで表示/返信 (#37504) )

私は TA-Lib を使用しています。これはオープンソースで非常に優れています。C++ で書かれており、Java/C# などで利用できます。Python 用のバージョンもあると思います。

いい物。

http://ta-lib.org/hdr_dw.html

[A2] ピーターカウスロン著

TA-Lib の Python ラッパーはhttps://github.com/mrjbq7/ta-libにあります。

よろしくお願いします。

ピーター

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

[A]

問題は解決したとおっしゃっていましたが、ご参考までに。

「other.jar」の内容を覗くには:

http://java.decompiler.free.fr/

GUI バージョンを取得し、[ファイル]、[開く] の順にクリックし、[other.jar] を選択して、

ソース。機能は基本的に .Net Reflector と同じです。

–s

ps。あなたの国でリバースエンジニアリングが違法なら、あなたはこれを聞いていません

私から。(私はカナダ人ですが、ここでは物事がかなり緩いです。)

- - また - -

あるいは、そのコピーを作成し、名前を「other.zip」に変更して次のように開きます。

Windows または Mac では通常どおりです。


0 件のコメント :

コメントを投稿