移除EA時,同時刪除所有掛單

 

想詢問各位,我在選取右上角的EA選取移除EA時,如何同時把所有掛單移除,這串代碼怎麼寫呢





附加的文件:
gnd.png  42 kb
 
 void OnDeinit(const int reason){     
    DeleteAllOrders(EAMagicNumber);
   //...  ...

  }   

void DeleteAllOrders (ulong EAMagicNumber){

   int total=OrdersTotal();

   for(int i=total-1; i>=0; i--){  

      ulong  ordertickdt = OrderGetTicket(i);                                

      ulong  magic         = OrderGetInteger(ORDER_MAGIC);  

      if(magic == EAMagicNumber ) {

          DeleteOrderByTicket(ordertickdt);     

        }

     }

  return;

}

bool DeleteOrderByTicket (ulong  ordertickdt){   

   MqlTradeRequest request;

   MqlTradeResult  result; 

   if(OrderSelect(ordertickdt)){

      ZeroMemory(request);

      ZeroMemory(result);

      request.action=TRADE_ACTION_REMOVE;               

      request.order = ordertickdt;      

      if(!OrderSend(request,result))  {

            PrintFormat("OrderSend error %d",GetLastError());

            return false;

            }

    }

   return true;

}

 

在主程序 OnDeinit()里面写上删除代码就行

这个函数是在移除主程序最后自动运行的函数,和OnInit仅在开始运行一次是一个道理

 
xswzaq963852:

想詢問各位,我在選取右上角的EA選取移除EA時,如何同時把所有掛單移除,這串代碼怎麼寫呢





可以让EA按条件先删除所有挂单,再检测没有挂单之后再自动移除EA,逻辑搞错了有时候删除挂单不干净的哦