老谚语说:实际上有四个值(三个用于挂起)要检查
Measure twice before cut once
OrderDelete()
正如您的定义所述处理{ OP_{BUY|SELL}STOP }
订单,需要检查以下三项:
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 在实时服务器上处于活动状态时,它不会打开订单,因为平台已经打开了其他工具的订单。”
{ GetLastError() | _LastError }
如果不提供确切的值,几乎不可能提供任何建议。
某些账户类型的某些经纪商确实会限制OrderSend()
接受政策,因此除了GetLastError()
价值之外,相应的经纪商条款和条件也适用。
不要犹豫,提出更多问题,并可能在域中享受其他问题/答案MQL4
。