IB証券TWSのAPIドミトリーFAQ:TWSアプリ関連
こちらはIB証券(インタラクティブブローカーズ証券)のAPI情報で、公式以上に細かい点がカバーされているDmitry's TWS API FAQを日本語翻訳にかけつつ、わかりにくい部分をできる限り修正した上で魚拓保存しているものです。元のウェブページは量が多すぎて閲覧しにくく、元サイトを翻訳にかけるとPCが固まる上、最近アクセスが不安定になっているため、備忘録用に章ごとに分けて保存しています。
全体目次
TWSアプリ関連(このページ)
ContractDetails、Index、注文方法(共通)
コンボ注文、ブラケット注文、株式・オプション・先物注文
約定照会、デモ口座とリアル口座、グラフ化
データサブスクリプション
スキャナ、基本仕様、過去データ制約、IB Gateway
FX関連、ポートフォリオ情報、その他
このFAQについて
目的
TWS API を学び、より良く 、より使いやすく/理解しやすくしましょう。
このドキュメントはTWS API を学習するためのDmitry の個人的な試みであり、その内容の 99.9% は TWS API グループhttps://groups.io/g/twsapi からのものです。いくつかの質問と回答をトピックごとにグループ化した FAQ の形式で構造化してみました。
範囲
データフロー、TWS API の特定の機能の注意点、制限事項、回避策、その他の情報に関する一般的な Q/A をすべて収集しようとしました。プログラミング言語固有の問題では、主に C++ / Java 関連のトピックを集めましたが、Windows ソケット、ActiveX、C#、VB、または Excel 用の DDE などのトピックはあまり保存しませんでした。
2014 年 12 月に、私は 2010 年 2 月 5 日前後のメッセージから始まるすべての履歴を掘り下げ (読み通し) 始めました。この FAQ は、すべての重要なトピックを追跡するための継続的な試みです。
免責事項
この FAQ はTWS API グループの議論のほんの一部を表しており 、決してそれを置き換えることを意図したものではありません。オンライン グループ アーカイブでさらに多くの回答を検索してください (ここで見つかるものよりも多くの回答があります)。
最新の IB API ドキュメントへのリンク
[A] by ジョシュ
2017 年 5 月 3 日水曜日:
新しいドキュメントはhttp://interactivebrokers.github.io/tws-api/にあります。
ジョシュ
- - 転送メッセージ - -
日付: 2017 年 5 月 18 日(木) 17:29:38
送信者: jbeacomib
返信先: InteractiveBrokers/tws-api
宛先: InteractiveBrokers/tws-api
件名: gh tws-api] github コンテンツに関連する古い IB ドキュメント (#493)
最も頻繁に更新されるドキュメント
TWS のビルドと API バージョンに関する最新情報
Web サイト (API バージョン 9.72、9.73) にあるものは、
[Github]( http://interactivebrokers.github.io/tws-api/ )
古いドキュメントは、バージョン 9.71 用に作成されましたが、現在は更新されておらず、Github ドキュメント サイトに置き換えられました。
TWS または IB ゲートウェイの 1 つのインスタンスに接続できるようになりました。
TWSアプリ関連
[Q] TWSリアルアカウントログインのセキュリティコードをオフにするにはどうすればよいですか?
[A] (#768)
2020 年 7 月 9 日に追加
オンラインアカウント管理にこれに関する設定があります。これに従ってください:
オンラインアカウント→設定→ユーザー設定→セキュアログインシステム→セキュアログインデバイスのオプトアウト→「アカウント管理にログインするときのみセキュアログインデバイスを使用したい」のボックスにチェックを入れます。
次に「続行」を押します。いくつかの免責事項フォームが表示されますので同意してください。
後で気が変わった場合は、同じ手順を使用して二段階認証を再度有効にすることができます。
これがお役に立てば幸いです。
[Q] TWSでマーケットデータ回線は何回線契約していますか?
[A](#43856)
2020 年 5 月 23 日に追加
キーボードで Ctrl-Alt-= を同時に押すと、TWS は使用されている行数を示すポップアップ ウィンドウを表示します。
以下も参照してください。
https://ibkr.info/article/3292
[Q] ファイルからティッカーをインポートするにはどうすればよいですか?
上記のリンクが機能しなくなった場合に備えて、IB の Web サイトからコピー&ペーストした記事を以下に示します。
ファイルからティッカーをインポートする
カンマ区切りの .csv ファイルまたは .txt ファイルからインポートした市場データを取引ページに入力できます。テキスト編集ソフトを使用してリストを作成し、.txt ファイル拡張子を付けてファイルを保存するか、MS Excel で .csv ファイルとして保存します。
インポートするティッカーシンボルのファイルを作成するには
twsTickers.txt など、拡張子が .txt のファイルを作成するか、Excel で .csv ファイルを作成します。
テキスト ファイルでは、以下で説明する構文を使用して、必要な市場データの行ごとにカンマ区切りの 1 行を作成します。Excel で、フィールドごとに 1 つのセルを使用して 1 つの行を作成します。最初のフィールド指定は、DES、SYM、および CON の回線タイプであることに注意してください。
DES, UNDERLYING, SECTYPE, EXCHANGE, LASTTRADINGDAY, STRIKE, PUT/CALL, MULTIPLIER
SYM, SYMBOL, EXCHANGE
CON, CONID, EXCHANGE
DES 回線タイプには情報または情報のプレースホルダーが必要ですが、ストライク、プット/コール、および乗数フィールドは省略可能です。最終取引日の形式は YYYYMM または YYYYMMDD です。すべてのエントリは大文字で囲む必要があります。オプション契約 XYZ の例は次のようになります。
DES, XYZ, OPT, ISE, 201509, 75, CALL,
銘柄コードがXYZ の株式商品の例は次のようになります。
DES, XYZ, STK, SMART,,,,
ここで、カンマは株式に対して定義していないフィールドのプレースホルダーです。
株式に SYM 明細タイプを使用すると、次のようになります。
SYM, XYZ, SMART
CONタイプを使用すると、ConId (Contract ID)でコントラクトをすばやく入力できます。
CON, 12348765, SMART
ファイルをクラシック TWS にインポートするには
1.「ファイル」 メニューから「インポート/エクスポート」を選択し、 「契約のインポート」 を選択します。
2.インポートしたティッカーを既存のページまたは新しいページのいずれかに配置する場所を指定します。
3.「OK」をクリックします。
ファイルを Mosaic ウォッチリストにインポートするには
1. ウォッチリストを右クリックし、[インポート/エクスポート]、[契約のインポート] の順に選択します。
2. [参照] ボタンを使用して、インポートするファイルを見つけます。
3. 「OK」をクリックします。
既存のページに入力されたインポートされた契約は、アクティブな取引ページまたはウォッチリストの下部に表示されます。
[A] by ジョシュ
ローカルシンボルをウォッチリストの行に直接入力すると、そのオプションに固有のものであるため、そのシンボルがすぐに表示されます。
例: 'AAPL 200221C00322500' (正しい並びであることを確認してください)
Option Symbology Initiative (OSI) 標準: https://ibkr.info/article/972
[Q] 公式サーバーリセット時間へのリンクはありますか?
[A]
[Q]トレーダー ワークステーション (TWS) に影響を与える接続の問題を確認して解決する方法
[A]
(念のため、上記のリンクからの引用をここに保存しておきます)
背景:
トレーダー ワークステーション (TWS) ソフトウェアが適切に動作するには、当社(IB証券)のゲートウェイと市場データサーバーに接続する必要があります。ローカルネットワークまたはインターネットサービスプロバイダーネットワークに影響を及ぼす接続の問題は、TWS 機能に悪影響を与える可能性があります。この記事では、自動接続テスト Web ページを使用して接続をテストする方法を説明します。
[Q]「IB接続テスト」Webページを使用して接続テストをするにはどうすればよいですか?
1) このリンクをクリックします:
2) すべてのテストが完了し、結果が表示されるまでお待ちください。すべてのテストの結果として「成功」が表示された場合、現時点では IB サーバーへの接続は信頼できます。追加の接続のトラブルシューティングや構成は必要ありません。
3) 1 つ以上のテストの結果として「不合格」が表示された場合は、リンク「不合格」自体をクリックして「IB ネットワークトラブルシューティングガイド」を表示してください。このセクションは、手動テストを実施して失敗の原因を特定するのに役立ちます。
企業環境およびプロキシ サーバー ユーザー向けの注意: マシンがプロキシサーバー経由でインターネットにアクセスしている場合、自動化された「接続テスト」ページは誤解を招く結果を返す可能性があります。これは通常、企業ネットワークに接続している場合に発生します。このような場合は、ネットワーク管理者または IT チームに連絡し、IB 自動「接続テスト」Web ページ自体の上部にある表に示されている宛先サーバーへの手動接続テストを実行するよう依頼してください。 手動接続テストは、宛先 TCP ポート 4000 および 4001 を使用して実行する必要があります。サーバーリストを別の形式で取得したい場合、またはファイアウォール/IP 管理ルールを設定する必要がある場合は、このページを転送できます。
(引用終わり)
[Q] 異なるマシン上で 2 つの TWS を実行する (同じアカウントにアクセスする) にはどうすればよいですか?
この質問は github ib-controller プロジェクトに投稿されました。
こんにちは!
「誰かが別の場所からこのユーザー名でログインしている」というシナリオに対処する設定を追加できる可能性はありますか?
IB は 2 つの場所から同時にログインできないため、TWS API が注文を送信しないことがわかっているときに携帯電話からログインしてポートフォリオを確認できるようにしたいと考えています。
タイムアウト後にボタンをクリックすると思います。
どう考えているか教えてください!
ありがとう
ゲオルギオス
2016 年 8 月 16 日に追加
[A] ベン・アレックス著
実現可能な方法は、同じアカウントで 2番目のユーザー名(サブユーザー)を作ることです。詳細については、以下をご覧ください。
[Q] インストールされている API のバージョンを戻す(ダウングレードする)にはどうすればよいですか?
2015 年 5 月 29 日に追加
[A] リチャード L キング著 (ここにあります)
さて、 9.72 ベータ版をアンインストールした後、以前の ActiveX API バージョンを動作させることができなかった理由がわかりました。
TWS API をインストールすると、インストール プロセスによって TwsSocketClient.dll というライブラリが Windows システムフォルダーに配置されます。このライブラリのファイルバージョン番号は API バージョンと同じであり、ActiveX コントロール (Tws.ocx) は実際にはこのライブラリのラッパーであるため、ActiveX APIを実行するには、Tws.ocx と TwsSocketClient.dll が同じバージョンである必要があります。
この問題は、API をアンインストールしても TwsSocketClient.dll が削除されないために発生します。以前のバージョンの API をインストールしようとすると、既存の TwsSocketClient.dll は置き換えられません。これは、インストールされるバージョン番号がすでに存在するバージョン番号よりも低いためと考えられます。そのため、インストールされているバージョンが ActiveX コントロールが期待するものと一致しないため、まったく機能しません。
したがって、解決策は、以前の API バージョンをインストールする前に、TwsSocketClient.dll を手動で削除するだけです。
おそらくほとんどの人は以前の API バージョンに戻すことはありませんが、たとえば、ベータ版を試していて、サポートされている最新のバージョンに戻したい場合には、ダウングレードする必要がでるかもしれません。
[A2]
2015 年 5 月 30 日に追加
再インストールで対応します。
Windows での TWS API ソフトウェアのアンインストールと再インストール
[Q] TWS Java VM のパフォーマンスを最適化するにはどのようなJVM サーバー設定をすればよいですか?
2015 年 4 月 27 日に追加
[A] FutureScalper (ここで見つかります)
Richard L King の IBController を使用する必要があります。
パフォーマンスを改善するためにできる最も重要なことは、Java Server VM を使用することです。高いパフォーマンスを持っています。
リアルタイム分析を行うマルチスレッドの Swing ベースの GUI アプリケーション注文処理など、クライアントアプリケーションであってもサーバー VM を使用して実行されます。
また、サーバー VM を使用して TWS を実行します。これにより、幅広いチューニングオプションとグローバル最適化ができ、スループットが 2 倍または 3 倍になります。
JDK をインストールするだけでサーバー VM を取得できます。
jvm.dll を JRE 領域または使用できるものに移動します。
「java -server -version」コマンドを実行してインストールを確認します。
繰り返しますが、TWS 自体をサーバー VM で実行することも非常に重要です。
高いパフォーマンスのために重要です。
これはスタンドアロン TWS を実行するために使用するコマンドラインの例です。
Windows 上の Java Server VM の下。さまざまなオプションは技術的なものであり、変更の予定。
c:\WINDOWS\system32\java.exe -server -dsa -Xbatch -Xss192k -Xms200m -Xmx200m
-Xnoclassgc -XX:+ForceTimeHighResolution -XX:-TieredCompilation
-XX:+RelaxAccessControlCheck -XX:MaxInlineSize=64000
-XX:-DontCompileHugeMethods -XX:CompileThreshold=250
-XX:CICompilerCount=1 -XX:+UseConcMarkSoupGC -XX:MaxGCPauseMillis=150
-XX:+DisableExplicitGC -XX:ThreadStackSize=192 -XX:+AggressiveOpts
-cp jts.jar;pluginsupport.jar;jcommon-1.0.0.jar;jfreechart-1.0.0.jar;
jhall.jar;other.jar;riskfeed.jar;rss.jar jclient/LoginFrame \jts
サーバー VM は「巨大な」メソッドをコンパイルし、コードを「インライン化」します。標準のクライアント VM では不可能なグローバル最適化を実行します。
パフォーマンスとスケーラビリティは多くのアプリケーションにとって重要です。
[Q] TWS アプリケーションを 24 時間 365 日自動的に実行させるにはどうすればよいですか?
[A] Richard L King の IBController を使用する必要があります。
URL: https://github.com/ib-controller/ib-controller
最新バージョンは
https://github.com/ib-controller/ib-controller/releases/latestからダウンロードできます。
(引用-1)
1 つの可能性は、IBController を使用することです。これは、
TWS は、さまざまなウィンドウ イベントをインターセプトし、自動的に処理します。
IBController は、ログオンをオプトアウトした場合にのみログオンを処理できることに注意してください。
IBController は、このフォーラムの「ファイル」セクションの「自動」の下にあります。
リチャード
(引用終了-1)
(引用-2)
IBController は、Interactive Brokers Trader Workstation (TWS) を「ハンズフリー」モードで実行できるようにするために作成された Java アプリケーションです。これにより、無人自動取引システムの作成が可能になります。IBController は、ログイン ダイアログにログイン資格情報を入力することにより、TWS ログインを自動化します。また、プログラム取引活動中に TWS が表示するダイアログ ボックスも処理します。
(引用終了-2)
リンク: http://sourceforge.net/projects/ibcontroller/files/
IBController ユーザーからのいくつかのランダムなメモ:
—————————————————————————————————
マイク・スミスmikesmithv@gmail.com
MaxPerSize パラメータを 128M から 255M など、より大きな値に変更してみてください。この数が小さすぎると、さまざまな奇妙な症状が発生する可能性があります。新しいクラスをロードするのに十分なスペースがない場合、以前にロードされたクラスがアンロードされ、奇妙な現象が発生する可能性があります。プログラマーは、静的クラス変数が、アプリケーションが起動されている限り残る「グローバル変数」であると想定することがありますが、クラスがアンロードされる場合はそうではありません。
少し前まで、TWS はデフォルトの MaxPerSize を使用していましたが、IBController で起動する場合はそれだけでは不十分でした。IBController によって追加のクラスがロードされるため、IBController 起動コマンドに -XX:MaxPermSize=128M を追加する必要がありました。IB の Web サイトを見ると、TWS の起動コマンドには通常の TWS 起動のためだけに XX:MaxPermSize=128M が含まれています。そのため、TWS にさらに多くのクラスを追加したため、標準リリースに向けてその数を増やす必要があったようです。したがって、IBController で起動するには、より大きな数が必要になるのは当然です。
私はもう IBController を使用していないので、これはすべて IBController に関する私の過去の経験に基づいています。 現在、私は週に 1 回再起動するゲートウェイを使用し、1 回のログインで 1 週間ずっと実行させています。 つまり、これはすべて「理論上」であり、私の直接の経験ではありません。それが理にかなっているといいのですが。
ディスカッションも参照してください:
最適なメモリ設定
https://groups.io/g/twsapi/topic/4047139
———————————————————————————————
[Q] ヘッドレス Ubuntu 16.04 LTS で IBController (3.2.0) + TWS (ビルド 956) をセットアップして 2 つのアカウント (ペーパー + リアル) を実行するにはどうすればよいですか?
[A] https://dimon.ca/how-to-setup-ibcontroller-and-tws-on-headless-ubuntu-to-run-two-accounts/
2016 年 6 月 13 日に追加
注: まず、IBController は現在、事実上 IBC に取って代わられることに注意してください。この変更の理由については、こちらをご覧ください。おそらく IBC への切り替えを検討する必要があります。
[Q] DockerでIBCを設定する方法
[A] by dvasdekis
2020 年 7 月 19 日に追加
ここで、 IB Gateway v978.2c および IBC v3.8.2 を使用して更新された Docker コンテナーを保守しています。独立したソリューションを維持する代わりに、自由にリンクしてください。
[Q] TWS API の最新バージョンはどこで入手できますか?
[A] http://interactivebrokers.github.io/
[Q] TWS接続をリセットするにはどうすればよいですか?
[A]
Ctrl-Alt-R でアカウントサーバー接続をリセットします
Ctrl-Alt-F は市場データ接続をリセットします
[Q] TWS のどのバージョンを使用すればよいですか?
[A] by Ruediger Meier
すべての TWS バージョンをインストールして実際に試してみましたが、本番環境でも使用しているデフォルトは安定バージョンです。
現在の安定バージョンの TWS はバグ修正アップデートのみを提供しますが、新機能は提供されません。
[Q] ペーパーアカウント(デモアカウント)をリセットするにはどうすればよいですか?
[A1]
2021 年 1 月 25 日に追加
IB からのこれはうまくいきました:
ペーパーアカウントの資金額を、元の値とは異なる値に、実稼働アカウントの金額の 5 倍までリセットできます。リセットリクエストを翌営業日に有効にするには、アメリカ東部標準時16:00までに入力する必要があることに注意してください。
ペーパーアカウントの残高をリセットするには、以下の手順に従ってください。
ログイン画面のトグルをクリックして、ペーパー取引クライアントポータルにログインします。
[設定]、[アカウント設定]の順に選択します。
「Paper Trading Account Reset」の横にある「Configure」(歯車)アイコンをクリックします。
表示されるドロップダウンメニューからリセット金額を選択し、[続行] をクリックします。
[A2 (注文 – 「2017年以前」頃)] エリック・J・ホルトマン著
「取引アクセス」で「紙取引口座のリセット」を選択します。
- または -
ペーパーアカウント管理にログインします(通常のアカウントにはログインしないでください)
https://www.interactivebrokers.com/sso/Login
画面左側 - 「取引アクセス」 - その下 - 「ペーパー取引」 - 「アカウントのリセット」
翌営業日まで反映されません。
ジム・コヴィントン著
[Q] API バージョンは、ログに表示されるクライアント/サーバーのバージョンにどのようにマッピングされますか?
[A] IBサポート(電話)による回答
クライアント側:
API 9.67 —> クライアント バージョン 59 TwsApiC++.9.67_3.zip
API 9.70リリース日: 2013 年 10 月 —> クライアント バージョン62
API 9.71リリース日: 2014 年 8 月 6 日—> クライアント バージョン 63
サーバ側:
ビルド946 —マップ先—> TWS ソケット サーバー バージョン71
[Q] 接続が適切に閉じられなかった後、同じクライアント ID を使用して TWS に再接続できません。
[A] ドミトリー著
https://groups.io/g/twsapi/topic/4047690
同じトピックがここでも議論されました。
https://groups.io/g/twsapi/message/37644
基本的には、クライアントが TWS への接続を突然閉じると、クライアントは同じクライアント ID を使用して再接続できないことがよくあります。TWS を再起動するか、TWS アプリ側で自動的に解放されるまで待つ必要があります (最大約 1 時間)。
[Q] IBプライマリ HOST を変更するにはどうすればよいですか? (新しい地域への移動)
ニューヨーク 4 でボックスを受け取ったところですが、 ログインウィンドウで地域をアメリカとして選択したにもかかわらず、私の IB アカウントはまだアジア – hdc1.ibllc.comに接続しています…
IB を米国東部 ( ndc1.ibllc.com)に強制的に接続するために変更できる設定はありますか?
[A] エフゲニー・アンドレーエフ (#45559)
2020 年 10 月 3 日に追加
いいえ、登録時にアカウントに割り当てられた IB サーバーを新しい場所に移動することを(IB サポートに対して)明示的に要求する必要があります。これは週末に行われます。
[Q] TWSの接続時間で遅延が生じるのですが?
[A] JR (#46681)
2021 年 3 月 3 日に追加
同じように遅延が生じている人はいないので、IB が問題を抱えている可能性は低いと思われますが、ゼロではありません。そこで、API 接続の問題をトラブルシューティングする必要がある場合に確認する 3 つの事項について簡単に説明します。
[1] 古い API 接続:
私たちは以前、TWS に接続し、TWS が IB と通信するのに必要な単純な操作を実行し、その後切断するという単純な「TWS は生きていて、実際に IB に接続されていますか」というモニターを作成しました。モニターは自動的かつ頻繁にテストされましたが、何らかの理由で古い (完全に閉じられていない) API 接続が蓄積されました。「データ」をクリックして TWS の接続リストを取得すると、過去のスクリプト実行による古い API 接続が表示されますか? 私の場合、TWS のAPI 接続が接続最大数より十分に少なかった場合でも、これらにより接続リクエストの遅延が発生しました。
[2] DNS 逆引き:
サーバーのネットワークをチェックしたとのことですが、DNSもチェックしましたか?
サーバー上の通常のコマンドで (一時的であっても) 遅くなった経験はありますか? Linux システムだと仮定すると、「ls -l」などのコマンドでも遅延があればTWSの問題かどうかを切り分けることができます。
「netstat -a」または「lsof」は数秒間ハングしますが、「netstat -an」または「lsof -n」はハングしませんか?
いくつかのライブラリ関数は予期せず「逆 DNS ルックアップ」を実行し、失敗した DNS ルックアップが成功するかタイムアウトになるまで、呼び出し元 (この場合、TWS への受信 API リクエストを処理する JVM のスレッド) を長期間ブロックする可能性があります。インターネットサービスプロバイダーが DNS 逆引き参照で不安定性を抱えている場合、正常なサーバーの操作が 20 ~ 30 秒間ランダムにフリーズする可能性があります。
[3] あなたのエントロピーレベルはどうですか?
可能性は少ないですが、ある種の Linux システムを実行している場合に発生する症状に当てはまります。そして、ダラスのデータセンターにあるサーバーでそれを解決するのに数週間かかりました(ただし、これはダラスやテキサスに特有のものではありません)。
強力な SSL 暗号化が機能するために、Linux カーネルは「真にランダムなイベント」を収集し、Java JVM (および sshd、httpd などの他のプログラム) が /dev/urandom デバイス経由でアクセスするエントロピーのバッファーを構築します。また、毎回必要となるのはほんのわずかなバイトだけですが、バッファーが少ないか空のときに /dev/urandom を開いたり読み取ったりすると、十分なエントロピーが収集されるまで呼び出し元がブロックされます。また、Java JVM は、ネットワーク関連のさまざまな操作が行われるときに、/dev/urandom を頻繁に開きます。
これについては「man urandom」で確認でき、サーバーのエントロピーレベルは「cat /proc/sys/kernel/random/entropy_avail」で確認できます。
お役に立てれば。
この記事が気に入ったらサポートをしてみませんか?