订单关闭功能错误'无效票证的原因是什么?在mql4?

时间:2018-03-03 09:15:37

标签: mql4 metatrader4

在我的mql4 EA交易中,我已经写了这个函数来立即关闭所有买入交易。当我通过策略测试程序进行测试时,会关闭一些买入交易,但对于其他一些买入交易,它会返回:OrderClose error 4051:invalid ticket for OrderClose function错误。

void Close_All_Buy_Trdes(){
   for (int i=0;i<=OrdersTotal();i++){
      OrderSelect(i,SELECT_BY_POS);
      if(OrderType()==OP_BUY {
           OrderClose(OrderTicket(),OrderLots(),Bid,3);
      }
   }
}

发生这种情况的原因是什么?

1 个答案:

答案 0 :(得分:1)

一旦你关闭其中一个订单,其余的订单的位置编号将会有所不同......所以循环正在尝试在那个位置不再可用的关闭订单。

您可以选择机票编号(这些不要更改)而不是位置,但这意味着存储了机票编号。

如果您更喜欢使用位置,这是一种方法:

void close_all()
{
    int get_out=0,hstTotal=OrdersHistoryTotal();
    if (hstTotal<1) get_out=1;
    while (get_out==0)
    {
        if(!OrderSelect(0,SELECT_BY_POS,MODE_TRADES)) get_out=1;
        else
        {
            //you can add here any specific if condition 
            OrderClose(OrderTicket(),OrderLots(),Bid,3);
        }
        hstTotal=OrdersHistoryTotal();
        if (hstTotal<1) get_out=1;
    }
}

代码总是根据需要多次关闭第一个订单(position = 0),而未结订单的数量是&gt; = 1(while的退出条件是:hstTotal&lt; 1)