こちらはインタラクティブブローカーズのAPI情報、Dmitry's TWS API FAQを日本語に訳したものです。元のウェブページの量が多すぎて閲覧しにくい&元サイトを翻訳にかけるとPCが固まるため、備忘録用に章ごとに分けつつ、できる範囲で変な訳を修正して保存しています。
目次
よくあるエラーと修正方法
[Q] 文書化されたエラー コードのリストは?
[A] IB API による 🙂
必ず公式 TWS API ドキュメントでエラー コードの検索を開始してください。
https://interactivebrokers.github.io/tws-api/message_codes.html
[Q] Exchange を指定した reqSecDefOptParms() はデータを返しませんか?
空ではない交換パラメータを指定した reqSecDefOptParms() がデータを返さないことがわかりました。ただし、交換パラメータが空白の場合は、すべての交換のデータが返されます。
例えば:
reqSecDefOptParams(0,"MSFT", "STK", "CBOE", 272093)
何も与えませんが、:
reqSecDefOptParams(0,"MSFT", "STK", "", 272093)
AMEX、BOX、CBOE2、BATSなどのデータを返します。
何か間違ったことをしているのでしょうか、それとも単に壊れているのでしょうか?
リチャード
[A] by Joshオンラインで表示/返信 (#44803)
2020 年 6 月 27 日に追加
取引所フィールドは先物/先物オプション専用であり、「FutFopExchange」というラベルが付いている必要があります。株式の場合は空白のままにする必要があります。
ジョシュ (IBKR)
—- また後ほど: リチャードからの要約 —
reqSecDefOptParams() の futFopExchange パラメーターに関して依然として非常に非論理的な状況を要約すると、次のようになります。
"futFopExchange 返されたオプションが取引されている取引所。すべての取引所に対して空の文字列 "" に設定できます。 株式オプションではなく先物オプションにのみ適用されることについては言及されていません。パラメーターの名前がこれを暗示していると思いますが、それは良い文書ではありません。明示的に記載する必要があります。
それで、これに何らかのロジックがあることがわかる人はいますか?futFopExchange パラメーターは、問題を引き起こす以外、まったく何も実現しません。
何かが足りないと思わずにはいられませんが、何が足りないのかわかりません… |
[Q] 最新の履歴日付にギャップがあることがわかります (私の場合はオプション)。しかし、後で同じデータが良好に見えるようになります。なぜ?
[A] by Jeffオンラインで表示/返信 (#40888)
Jeff、残念ながら、最新の履歴オプション データをサーバー データベースに記録する際に遅延が発生するという問題が発生している可能性があります。ステータス更新の追跡については、カスタマー サービスにお問い合わせいただくのが最善です。最近のオプション データ (数分前) の現時点では、代わりに API リアルタイム データ機能を使用することをお勧めします。
[Q] エラーコード(110): 価格がこの契約の最低価格変動に準拠していません
[A1]このスレッド を読んでください (メッセージ数はわずか 43 件です;)
[A2] Nick 作成:オンラインで表示/返信 (#38922)
このメッセージは、指値価格が株式の最低価格増分の倍数ではないことを意味します。たとえば、株式が 1 セント単位で取引される場合、20.153 の指値は無効になります。これは通常、移動平均などの計算から得られる価格によるものです。
[Q] エラーコード(162): エラー メッセージ: マーケット データのアクセス許可がありません (一部のティッカーについては、適切なサブスクリプションがあっても!)
特定のティッカーの履歴データをダウンロードできません。
エラー 162、reqId 9: 過去の市場データ サービスのエラー メッセージ: AMEX、ARCA、BATS、BEX、BYX、DRCTEDGE、EDGEA、ISLAND、NYSENAT、PSX STK に対する市場データのアクセス許可がありません、契約: Stock(symbol='sfet'、exchange) ='SMART'、通貨='USD')
SFETは外国企業ですが、NASDAQに上場しています。昨日のIMRN(同じくNASDAQに上場)でも同じことが起こりました。以前はこのような問題はなかったと思います。
クラシック レベル 1 データを購読しています。NASDAQに上場されれば機能するはずです。
[A] by toth.david6@gmail.comオンラインで表示/返信 (#43036)
2019 年 10 月 4 日に追加
問題が解決しました。ティッカーが取引される直接取引所を選択するだけで、データ(少なくとも部分的)が表示されます。これらのティッカーはより多くの取引所で取引されており、SMART を選択し、取引されているすべての取引所に登録していない場合、API 経由でエラーが発生したり、TWS プラットフォームでデータが遅延したりすることになります。
これはもう少しスマートで、私が購読しているすべての取引所からデータを取得し、それに応じて集計してくれると思いましたが、1 つの取引所だけが欠けていると、すぐにエラーが表示されます。この場合、4.5 ドルのレベル 1 データ バンドルのカバーではすべてがカバーされるわけではありません。
[Q] エラーコード(162) 履歴市場データ サービスのエラー メッセージ:HMDS クエリはデータを返しませんでした: GCQ9@NYMEX Trades
[A] by Joshオンラインで表示/返信 (#43045)
2019 年 10 月 8 日に追加
このエラーは、商品が取引されていた日付範囲外でデータが要求された場合に最もよく発生します。たとえば 7/1/19 に試してみると、データは正常に返されます。
[Q] エラーコード(162) 「履歴市場データ サービスのエラー メッセージ:開始時間は終了時間より前に発生する必要があります」?
1 秒の履歴バーをダウンロードし、ほぼ 1 年分のデータ (1 つのリクエストあたり 2000 バー、リクエスト間の間隔は 10 秒) を取得しましたが、ある時点で上記のエラーが返され始めます。これは、リクエストに引数は「終了日」が 1 つだけで、「開始時刻」はまったくありません。
[A] ドミトリー著
2020 年 3 月 8 日に追加 ハッピーレディースデー! 🙂
これは「利用可能なデータがもうない」と考えてください。IB は、「HMDS クエリがデータを返しませんでした」というテキストとともに同じエラー番号 162 を返すこともありますが、これは同じ意味です。さらに何年もの履歴が必要な場合は、より大きなバーを求めることを検討してください (1 秒バーの代わりに 1 分、10 分などを試してください)。
[Q] エラーコード(162) 「履歴市場データ サービスのエラー メッセージ: スキャナ フィルターのmarketCapAbove が無効になっています」?
2021 年 1 月 27 日に追加
本当の答えではありませんが、スキャナー使用時に初めてエラーが発生しました。
[Q] エラーコード(200) リクエストに対するセキュリティ定義が見つかりませんでした。
enthalpyyan@gmail.com より
こんにちは、みんな、
次の引数を指定してオプションを注文すると、常に 200 エラーが発生しました。
Contract contract;
Order order;
contract.localSymbol = "MSFT131206P00034500";
contract.secType = "OPT";
contract.currency = "USD";
contract.exchange = "SMART";
order.action = "BUY";
order.totalQuantity = 1000;
order.orderType = "LMT";
order.lmtPrice = 20.00;
m_state = ST_PLACEORDER_ACK;
m_pClient->placeOrder(m_orderId, contract, order);
この問題はどうすれば解決できますか? ありがとう。
[A1] souqmate@yahoo.com より
reqContractDetails() の結果を必ず使用してください。
シンボル="MSFT" secType="OPT" 交換="SMART" 通貨="USD"
あなたの場合、localSymbol="MSFT 131206P00034500" を使用することをお勧めします。
symbol="MSFT" を指定することは良い習慣ですが、このコンテキストでは (少なくとも reqHistData では) 必要ないようです。
スークメイト
また
PrimaryExchange = "NASDAQ" は必要ありません。
ただし、 expiry = "20131213" (YYYYMMDD) が必要です。これは reqContractDetails の出力です。
遊んでください。
スークメイト
【オーナー様のお返事】
こんにちは、ありがとう。placeOrder() は次のように動作するようになりました。
contract1.secType = "OPT";
contract1.multiplier = "100";
contract1.exchange = "SMART";
contract1.currency = "USD";
contract1.includeExpired = 0;
contract1.localSymbol = "";
contract1.right = "Call";
contract1.symbol = "MSFT";
contract1.expiry = "20131206";
contract1.strike = 36.5;
order1.action = "BUY";
order1.totalQuantity = 1;
order1.orderType = "LMT";
order1.lmtPrice = 0.2;
しかし、また行き詰まってしまいます。オプションの組み合わせを注文したいのですが、C++ ではどうすればよいでしょうか? IB の API ドキュメントは本当に最悪で、役立つ情報が見つかりません。
- - 以降: - -
IB の API は本当に夢中になります。同じ設定で、MSFT では注文できますが、AAPL や GOOG などでは注文できません。これは、「リクエストのセキュリティ定義が見つかりませんでした」と同じエラーです。どうやって注文すればいいのか全く分かりません。
[A3] souqmate@yahoo.com より
注文を行う前に、reqMktData (市場が閉まっている場合は reqHistData) からの出力があることを確認してください。そのため、reqContractDetails の出力はコントラクトを指定するのに役立ちます。たとえば、symbol="MSFT" secType="OPT"exchange="SMART"currency="USD" の 628 件の契約を取得します。
ストライキ(英国株)などにはファクター100が潜んでいるかも知れません。
また、デモアカウントでは一部の機能が誤動作するので注意してください。
コンボが成功したら、ぜひお知らせください。
スークメイト。
[Q] エラーコード(201): 注文が拒否されました – 理由: 物理的な配送を伴うデリバティブに関する IB の注文処理ルールに準拠していません。
[A] by カート
したがって、API の質問ではない可能性があります。少なくとも、あなたが説明した問題がアカウント自体間の実際の違いに関連していることは明らかのようです。次のステップは、おそらく TWS で手動で作業を行い、必要に応じて IB にサポートを依頼し、アカウントの構成と区別を明確にして、何を扱っているかを把握できるようにすることをお勧めします。
-カート
[Q] エラーコード(300):tickerId:40000001のEIdが見つかりません。
2017 年 11 月 8 日に追加
[A] by Joshオンラインで表示/返信 (#38925)
ジョン、
「EId が見つかりません」というエラーは通常、既にキャンセルされたサブスクリプション 、または間違ったtickerIDを使用してサブスクリプションをキャンセルしようとしたときに発生します。私は Windows コンピューターの前にいませんが、ここで Java API を試してみると、問題なく動作しました。ひょっとしてedemoアカウントを使っていませんか?リアルタイム バーはそこでは機能しませんでした。これは、そのアカウントでのテストの問題の 1 つです。
ジョシュ
[Q] エラーコード(321): セキュリティ タイプ FUT の交換がありません
[A]参照: [Q] 交換を指定した reqSecDefOptParms() はデータを返しませんか?
2020 年 6 月 27 日に追加
[Q] エラーコード(321): リクエストの検証中にエラーが発生しました:-'rc' : 原因 – アカウントを指定する必要があります。
[A] by カート
FA ログインがある場合は、オーダーのアカウント (またはおそらく m_account と呼ばれる) フィールドを設定する必要があります。これは、個別のサブアカウントの 1 つに設定することも、メイン F アカウント番号に「A」を追加した「すべて」アカウントに設定することもできます。
また、最後に確認したとき、アカウント フィールドは、特定の注文の placeOrder への最初の呼び出しで設定する必要があります。改造では設定できません。
誰かが、グループと割り当ても機能するようにできると言っていたと思いますが、これは何らかの理由で必要な状況で機能しなかったと思うので、もう一度試したことはなく、これについて詳しくも最新の情報もありません。
-カート
[Q] ErrorCode: '321'、errorMsg: 'リクエスト検証エラー:-'bS' : 原因 – この契約の履歴データ クエリは、今から 199 年前 (18210405 00:18:14) より前のデータを要求しています。 GMT は拒否されます。クエリは 5240807 23:29:46 UTC から 5240807 23:33:06 UTC まで実行されるはずです。
[A]明らかに reqHistoricalData は endDateTime 引数値に満足していないので、慎重に確認してください。
[Q] errorCode: '321'、errorMsg: 'リクエスト検証エラー:-'bS' : 原因 – 終了日はライブ アップデートでサポートされていません'
[A]これは、reqHistoricalData() 呼び出しで keepUpToDate=true を使用した場合に発生する可能性があります。ここで解決策を見つけました。引用: IB チームに問い合わせたいメールがあります。彼は、endDateTime を空白のままにするように私に言いました。仕事だよ!!
[Q] errorCode: '322'、errorMsg: 'リクエストの処理中にエラーが発生しました。許可される同時 API 履歴データ リクエストは 50 個のみです。
[A] ドミトリー作。苦労して学びました。keep_up_to_date を true に設定した reqHistoricalData は、平均して数秒ごとにバー更新を生成しますが、同時に実行できるそのようなリクエストは 50 件までです。what_to_show=BID と what_to_show=ASK のサブスクライブは 2 つの異なるサブスクリプションであるため、リアルタイム BID、ASK、および TRADE をサブスクライブする場合は、50/3 = 最大 16 契約になります。
一方、reqRealTimeBars では 100 のサブスクリプションを同時に実行できますが、更新は厳密に 5 秒に 1 回しか提供されません。
ところで、買値/売値が必要な場合は、 what_to_show "BID_ASK" の使用を検討してください( 「履歴データ型」を参照) 。
[Q] errorCode: '456'、errorMsg: 'リアルタイムリクエストの最大数に達しました。
[A] errorCode: '322' (上記を参照) に似ています。同時に実行されている reqRealTimeBars リクエストや reqMktData リクエストが多すぎる (100 を超えている) ようです。
[Q] エラー 478 (文書化されていない):リクエストのパラメータが、コントラクト ID: リクエストされたストライク 1300.0、コントラクト 13.0 で受信したコントラクト パラメータと競合します。
[A] USD/GBP ではなくセント/ペンスで価格設定されるオプションおよび将来のオプション
[Q] エラー 481、注文サイズが減りました
私のFAアカウントでそれらの多くを取得します。 このエラーの意味と回避方法を考えた人はいますか? 面白いのは、サイズの縮小が見られないことです。注文サイズが同じままでもエラーが報告されます。 |
また: 今日、FAでも同じエラーが発生しました。私の場合、この注文ではまったく株式を取得できませんでした(他の注文はすべて正常に実行されました)。 また、その手段と回避方法は何なのかも気になります。 一つ気づいたことは、その時点ではかなりマージンに近かったということだ。IBは私が十分ではないと判断し、それに応じて注文を「減らそう」としたのだろうか? |
[A] by Alex btccplayer@gmail.comオンラインで表示/返信 (#45748)
2020 年 11 月 1 日に追加
IBから返事が来ました: 「「エラーコード: 481 エラーメッセージ: 注文サイズが減りました」というコールバックは、IB が何も持っていないことが原因であることを確認しました。 空売りのために顧客が借りるための株式ですが、注文が届かなかったことを心配する必要はありません あなたが意図したシェアを割り当てていたため、拒否されます。そうしないと、注文がサーバーによって拒否されます。」 だから多分何もすることはない |
[Q] (文書化されていない、2005 年 5 月に確認) エラー 505
[A] https://groups.io/g/twsapi/topic/4040516#4368
[Q] エラーコード(???) 注文がキャンセルされました – 理由:注文サイズがファットフィンガーチェックで許可されている量を超えています
[A] (2018 年 3 月 29 日) このエラーは、TWS/IB ゲートウェイの予防設定では上書きできません。オーダーサイズには注意事項の設定がございますが、別途となります。ユーザーが事前に IB に連絡すると、(ライブ) アカウントでファット フィンガー チェックを変更するようリクエストできます。
[A] rwk さんの不正解は、
これまでこのエラーが発生したことがなかったのには驚きました。TWS で次をクリックします。
[編集] > [グローバル構成] > [プリセット] > [将来] > [予防設定] > [サイズ制限] > [ゼロに設定 (デフォルトは 5)]
[A2] フランク・ベル著
今日、紙のアカウントで問題が発生しました。私は75000 TNAのショートポジションを持っていました。プリセットを変更したにもかかわらず、市場で30000を購入する注文がキャンセルされました。場合によっては、指定されたサイズで注文を受け付けても、後で拒否されることがあります。これは紙の会計の不安定さの一例にすぎないと思います。 |
[Q] (文書化されていない、2017 年 9 月と 2020 年 4 月に確認) エラー 10187
[A] https://groups.io/g/twsapi/topic/6076358#44164
[Q] エラーコード(10197): 競合するライブセッション中に市場データがありません
昨夜、TWS が自動的に更新されました。紙の口座からデータを収集するプログラムを開始したとき、外国為替リクエストに対して「競合するライブセッション中に市場データがありません」というエラーが発生しました。ただし、すべてが正常に機能していました。一晩中、すべてのリクエストに対して同じエラーが発生し、すべて機能しなくなりました。 api.log ファイルから 04:26:00:868 -> —:4-2-16- 10197-競合するライブセッション中に市場データなし– 今朝、同じコンピュータでライブアカウントにログインしましたが、すべて問題ないようです。 このエラーに遭遇した人はいますか? |
[A] by Josh、オンラインで表示/返信 (#41512)
2021 年 1 月 15 日に追加
このメッセージは、切断の原因というよりは、接続確立の遅延、または市場データ ファームからの切断を示すものと考えた方がよいでしょう。最終的にデータが返される時期は、中断の根本的な理由によって異なります。切断は、毎晩のサーバー再起動中 (米国東部標準時午前 0 時頃) に確実に発生しますが、必要なメンテナンスの量に応じて継続時間は変わる可能性があります。通常 (常にではありませんが) 再起動後、reqMktData サブスクリプションは最終的に再び自動的に継続されることが期待されます。さまざまな商品タイプの市場データは、リセット時間が異なる世界中のさまざまなサーバーでホストされています。したがって、特定の市場データ ファームへの接続が切断されたり、接続が遅れたりする理由を診断して、メッセージが受信されている理由を明らかにすることをお勧めします。 |
また、実際の答えではありませんが、そのエラーについてはここで言及されています (そして無視されていますか? うーん…):オンラインで表示/返信 (#45987)
メッセージには 8 つのステップの概要が含まれています。ステップ #5 には 5a という 2 つのアクティビティが含まれている必要があることを強調したいと思います。ティッカー ID: cancelMktData(1) の市場データ サブスクリプションをキャンセルします。 5b. ソケット接続の切断: eDisconnect() 接続を閉じる前に、サブスクライブしていたすべてのサブスクリプションを解除することは、IB のサーバーがユーザーの意図を理解し、使用されていたtickerID 値が解放されて再利用できるようにするために必要です。そうは言っても、「10197 競合するライブセッション中に市場データがありません」というエラーが発生することもあります。ただし、紙の取引口座は使用しません。代わりに、アクティブなアカウントが 1 つしかないにもかかわらず、ライブ取引アカウントでこれを受け取ります。今のところ、このエラー メッセージは自動取引に影響を与えていないので、無視しています。 |
ありがとう、J G。disconnect() を呼び出す前に cancelMktData(<ticker_id>) を呼び出すと、ライブ取引とペーパー取引の両方で問題が解決されました。 ライブ取引アカウントでエラー 10197 を監視し続け、あなたが言及したように、エラー 10197 がまだ時々返されるかどうかを確認します。 |
[Q] エラーコード(10225): バストイベントが発生しました。現在のサブスクリプションは非アクティブ化されています。リアルタイムバーをすぐに再登録してください
[A]ここhttps://groups.io/g/twsapi/topic/69943076 およびhttps://170.106.50.235/mementumにあります
TWS API v972 までは、IB realtimeBar サブスクリプションが取引セッション中に動作を停止する可能性があり、エラー通知がアプリケーションに送信されませんでした。これは、いわゆる「バスト」イベントが原因で発生します。
「TWS API ユーザー グループ」の質問の回答を引用します。
「バーストは、バーの途中でデータストリームが中断または変更され、バックエンドによってサブスクリプションがキャンセルされたときに発生します。バーストは比較的まれなはずですが、残念ながら完全に回避することはできません。」
TWS API v978 では、サブスクリプションを更新できるように、バスト イベントについてアプリケーションに通知する特別なエラー コードが追加されました。以下は、そのようなエラー メッセージの例です (TWS ゲートウェイ API ログから)。
15:24:00:896 -> 4-2-16777221-10225-バスト イベントが発生しました。現在のサブスクリプションは非アクティブ化されています。すぐにリアルタイム バーを再登録してください。-
更新: 1 週間のテスト後 – realtimeBars は問題なく動作しているようです。バスト イベント後の再サブスクライブには、アプリケーションによって遅延を追加する必要はありません。前述したように、 再サブスクライブする前に必ず以前のサブスクリプションをキャンセルしてください。 |
[Q] エラーコード(1101、1102): リクエストの検証中にエラーが発生しました:-'rc' : 原因 – アカウントを指定する必要があります。
[A] Ed Gonen ed.gonen@gmail.com (2015 年 7 月 30 日に追加)
私の経験によると、深夜の TWS 切断は深夜 0 時から最初の 30 分で発生します。20分にかなり近いと思います。あなたの「5:21 London」はまさにその状況に当てはまります。私のログには通常 14 分目、つまり 12:14 が表示されます。
この状況では TWS から切断する必要はないと思います。少なくとも、私はそうではありません。このコードは、TWS サーバーと IB サーバー間の切断を示しており、TWS は常に自動的にそれを処理します。これは約 1 分間続きます。そして1102コードを取得します。これは、IB での長年の経験に基づいています。
—————— API メッセージ コード も参照 —————————-
システムメッセージコード
コード | 説明 |
1100 | IB と TWS の間の接続が失われました。 |
1101 | IB と TWS の間の接続は復元されました - データは失われました。* リマインダー: 1101 を取得した場合は、すべての市場データ接続を再確立する必要があります |
1102 | IB と TWS の間の接続は復元され、データは維持されています。 |
1300 | TWS ソケット ポートがリセットされ、この接続は切断されています。 新しいポート - <port_num> に再接続してください。 |
*市場および口座データのサブスクリプション リクエストは再送信する必要があります。つまり、1101 を取得した場合は、すべての市場データ接続を再確立する必要があります。 |
[Q] エラー: 2109 注文イベント警告: 属性「通常取引時間外」は、注文タイプと宛先に基づいて無視されます。PlaceOrder は現在処理中です。
[A] by Joshオンラインで表示/返信 (#40645)
これは実際には、指定された注文タイプと取引所では、rth と「rth の外側」の間に区別がないことを知らせるための単なる警告です。注文が妨げられることはありません。株式の場合、通常の逆指値注文は通常の取引時間帯である 9:30 ~ 4:00 以外にはトリガーされないためです。取引時間の延長は非常に流動性が低くなり、通常のNBBOルールが適用されないため、これはトレーダーを保護するためです。ただし、rth の外側でアクティブになるストップ指値注文を発注することはできます (ただし、この組み合わせでは非常に悪い約定が発生する可能性が十分にあります)。
[Q]エラー 2137 クローズ注文数量が現在のポジションより大きいです
[A] by Scott Hodson shodson at gmail com
2018 年 8 月 2 日に追加
今後の参照用に、メッセージ コードをここに記載します。
https://interactivebrokers.github.io/tws-api/message_codes.html
2173 = クロスサイド警告: この警告メッセージは、TWS バージョン 955 以降で発生します。これは、注文によって口座のポジションがロングからショート、またはショートからロングに変更されるときに発生します。警告を回避するために、IB Gateway 956 (またはそれ以降) および TWS 957 (またはそれ以降) に新しい機能が追加され、[Global Configuration] > [Messages] に移動して「Cross Side Warning」を無効にできるようになりました。
[Q] 注文サイズが大きすぎます IB制限は35000です
坊や、いつか直面することを願っています… :))
[A] by Frank Bell (この スレッドから)
サイズ制限は、取引所、法的制限、および IB の内部制限によって異なります。あなたがいる場合
IB 制限に達した場合は、変更してもらえる可能性があります。IB に連絡してください。
[Q] IB GW API接続後の最初のオーダーで切断が発生し、オーダーが無視される
2015 年 4 月 27 日に追加
[A]このスレッド
[Q]履歴市場データ サービスのエラー メッセージ: XAUUSD/CMDTY@CMDTYBBO過去 60 件の履歴市場データがありません
2020 年 4 月 3 日に追加
コモディティには取引データ (エラー メッセージでは「Last」 )がないため、データ タイプとして買値、売値、または中間値を選択する必要があります。
TWS チャートをチェックインすると、別のデータ タイプが選択されており、「取引」がオプションの 1 つではないことがわかります。
[Q] 送信された注文を変更しようとすると、「この注文はまだ処理中のため変更できません。」というメッセージが表示されます。
2020 年 6 月 18 日に追加
こんにちは、
最初のエントリー後に注文の指値価格を立て続けに変更しようとすると、問題が発生しました。エラーは次のとおりです。
「この注文はまだ処理中のため変更できません。」
私は自分の側で提出された最新の指値を追跡していますが、TWS で最後に受け入れられた値がいくらであったかを直接確認する方法はありません。(エラー メッセージを受け取り、最後に記録した指値価格を削除する以外は。これは非常に複雑なアプローチのようで、エラーが発生する可能性が十分にあります。)
したがって、この問題に対処するには、次の 2 つの方法が考えられます (優先順)。
1. API から最新の既知の m_lmtPrice を取得します。openOrders() はこれを提供しますが、新しく送信された注文ごとに起動されません。orderStatus() は新しい注文のたびに起動しますが、m_lmtPrice を取得する方法は含まれていないようです。別の入手方法はありますか?
2. 指値を直接追跡することを忘れて、注文ステータスに基づいて変更を送信するのが「安全」になるまで待つことができます。しかし、どのようなステータスが指値変更が受け入れられることを示すのでしょうか? 事前提出済み? 提出されましたか?非活性?もう一度指値を変更したい場合はどうすればよいでしょうか...同じロジックは機能しますか?
上記についてご理解いただければ幸いです。私の心の一部は、私が頭が悪くて、私を正面から見つめている簡単な解決策を見逃しているのではないかと期待しています。
将来誰かが同じ問題に遭遇した場合に備えて、後世のために私が見つけたものをここに投稿します。基本的に、常に reqOpenOrders() を呼び出さずに注文の指値価格を確実に取得する方法は見つかりませんでした。これは私の設定方法にはあまりにも不適切だったので、上記の #2 を使用し、注文ステータスが「送信済み」になるのを待ってから変更を試みました。私の目的にはそれだけで十分だったので、「PreSubmitted」や「Inactive」についてはいじりませんでした。
- また - -
参考までに、ストップリミット注文を使用している場合、注文がトリガーされるまでステータスは PreSubmitted のままになるのが通常です (値「trigger」を持つ「whyHeld」属性が表示されます)。この状態では、指値を安全に変更することができます。参考までに。
0 件のコメント :
コメントを投稿