MQL5:在历史中计算本EA的所做单的收益

MQL5:在历史中计算本EA的所做单的收益

上篇博客有提到历史交易中 出场对应的进场(DEAL_POSITION_ID和DEAL_TICKET的对应关系)

根据这两者的关系,在加上本EA设置的magic号,就可以在历史处理订单中找到本EA做的单子。

其中外层循环找到的是DEAL_POSITION_ID,然后内层循环做一个对比。

经过正确调试,代码如下:

double time_profit(datetime &start, datetime &end)
  {
    
    
   double ret=0.0;
   HistorySelect(start,end);
   int deals=HistoryDealsTotal();
   double profit;
   long ticket;
   int count=0;
   for(int i=HistoryDealsTotal()-1; i>=0; i--)//遍历历史订单
     {
    
    
      ticket = HistoryDealGetTicket(i);
      if(HistoryDealGetInteger(ticket,DEAL_ENTRY)==1)
        {
    
    
         ulong a=HistoryDealGetInteger(ticket,DEAL_POSITION_ID);
         //Print(HistoryDealGetInteger(ticket,DEAL_POSITION_ID)) ;//进场单的订单ID
         //Print(HistoryDealGetInteger(ticket,DEAL_TICKET)) ;     //出场单的成交ID
         long temp=HistoryDealGetInteger(ticket,DEAL_POSITION_ID);
         for(int i=0; i<deals; i++)
           {
    
    
            ulong deal_ticket=HistoryDealGetTicket(i);
            if(deal_ticket)
              {
    
    
               string symbol             =HistoryDealGetString(deal_ticket,DEAL_SYMBOL);
               datetime time             =HistoryDealGetInteger(deal_ticket,DEAL_TIME);
               ulong order               =HistoryDealGetInteger(deal_ticket,DEAL_ORDER);
               long order_magic          =HistoryDealGetInteger(deal_ticket,DEAL_MAGIC);
               long pos_ID               =HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);
               ENUM_DEAL_ENTRY entry_type=(ENUM_DEAL_ENTRY)HistoryDealGetInteger(deal_ticket,DEAL_ENTRY);
               //--- 根据指定的 DEAL_MAGIC 处理交易
               if(order_magic == 2020 && pos_ID == temp)//2020是我设置的EA订单的magic号
                 {
    
    
                  ret+=HistoryDealGetDouble(ticket,DEAL_PROFIT);
                 }
              }
           }
        }
     }
   return(NormalizeDouble(ret,2));
  }
  

猜你喜欢

转载自blog.csdn.net/liangzixx/article/details/106410017