1

我这辈子都不知道如何判断已发送且您已获得有效票证的挂单是否已在 MQL4 中填写

http://book.mql4.com/trading/index

是否有回调,或者脚本是否必须以某种方式连续轮询?

4

2 回答 2

4

如果您有订单票,那么您可以定期查看OrderType()。它将从BUY_STOP ( OP_BUYSTOP) 变为BUY ( OP_BUY) 等,然后您就知道您的订单已成交。

int myTicket;

void OnTick()
{
  // check for order filled
  OrderSelect(myTicket, SELECT_BY_TICKET);
  int type = OrderType();
  if((type == OP_BUY) || (type == OP_SELL))
  {
    // order is filled, do something here.
  }
  else
  {
    // order is not filled yet. keep waiting.
  }
}
于 2015-10-20T20:10:28.687 回答
3

不。

一旦达到市场价格并转换为交易,经纪人/终端生态系统和语言MQL4不会提供回调。Pending Order

是的。

可以选择以一种相当愚蠢的方式轮询MT4 dbPool/终端中的记录,例如循环

int trades_total = OrdersTotal();

for ( int i = 0; i < trades_total; i++ ) {
      OrderSelect( i, SELECT_BY_POS, MODE_TRADES );
      if (       OrderSymbol() == Symbol()
         && OrderMagicNumber() == Magic
         && (      OrderType() == OP_BUYSTOP
            ||     OrderType() == OP_BUY
            )
         ) { ...

或者可以创建/存储/维护自己的DMA类似包(数组)的记录号(用作有点像指针)和相关的订单属性,它可以调解直接访问/修改(没有先验dbPool OrderSelect())。

使用如此庞大的记录袋进行实时维护测试对于具有数十万个活动订单的低强度 HFT 是可行的(必须通过dbPool OrderSelect()/Order*()仪器处理是不切实际的(在Strategy Tester多标准优化模式下较少) .

于 2015-08-23T19:00:21.807 回答