古いことわざは次のように述べています。
Measure twice before cut once
OrderDelete()
注文を処理するように定義されて{ OP_{BUY|SELL}STOP }
いるように、チェックする項目は次の 3 つです。
Symbol()
一致 (他の EA または手動注文を削除することによって望ましくない副作用を引き起こさない)
OrderType()
一致 (注文の実際の状態{ PENDING | AT_MARKET }
と方向{ BUY | SELL }
を無視しない)
OrderMagicNumber()
UUID
一致 (個人ごとに設定できるセレクタ ユーティリティを無視しないOrderSend()
)
それでは、検出プロセスをスケッチしましょう。
int myEaContextAwareMagicNUMBER = ...;
for ( int ii = OrdersTotal();
ii >= 0;
ii--
)
if OrderSelect( ii, SELECT_BY_POS, MODE_TRADES )
{
if ( OrderSymbol() != _Symbol
&& OrderMagicNumber() != myEaContextAwareMagicNUMBER
&& OrderOpenTime() >= Time[1] // Prev. Bar
&& !( OrderType() == OP_BUYSTOP
|| OrderType() == OP_SELLSTOP
)
) continue; // __^ __^ __^ __^ __^ __^ loop for next test
// -------------------------------------------+
// FINALLY PROCESS THE MATCHING OrderDelete() |
// -------------------------------------------+
...
..
.
// -------------------------------------------+
}
else Print( "WARN: OrderSelect() failed at db.POOL.SELECT(), RECORD_NUMBER == ", ii );
トリガーされていない保留を削除する方法は完了です。
についてのコメントが続きます。
「... EA がライブ サーバー上でアクティブな場合、プラットフォームは既に他の商品の注文を開いているため、EA は注文を開きません。」
{ GetLastError() | _LastError }
正確な値を提供せずに提供されるアドバイスはほとんどありません。
一部の口座タイプの一部のブローカーは、実際にOrderSend()
受け入れポリシーを制限しているため、GetLastError()
値に加えて、それぞれのブローカー利用規約が適用されます。
さらに質問することを躊躇しないでください。ドメイン内の他の質問/回答をお楽しみくださいMQL4
。