簡體   English   中英

如何通過排除最后一個訂單來修改多個目標利潤?

[英]How to modify the multiple target profit by excluding the last order?

我創建了這個 Modify Take Profit 函數,但這將計算所有的總訂單。 如何刪除最后一個訂單? 希望它計算沒有最后一個訂單的平均價格

void ModifyTakeProfit()
{
   double point=MarketInfo(OrderSymbol(),MODE_POINT);
   double tp1,tp2,bbep,bsize; tp1=0;tp2=0;bbep=0;bsize=0;
   for (int i=OrdersTotal()-1; i>=0; i--) 
   { 
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==OrderMagicNumber())
      {
         if(OrderType()==OP_BUY)
         {
            tp1=OrderTakeProfit();
            bbep += OrderOpenPrice()*OrderLots(); 
            bsize+= OrderLots();
         }
      }      
   }
   if (bbep>0) 
   { 
      bbep/=bsize; 
      tp1=bbep + TakeProfit*point;
      if(TakeProfit!=0)
         tp1=NormalizeDouble(tp1,(int)MarketInfo(OrderSymbol(),MODE_DIGITS));
      else 
         tp1=0;
   }
   for (int i=OrdersTotal()-1; i>=0; i--)
   { 
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==OrderMagicNumber())
      {
         if(OrderType()==OP_BUY)
         {
            tp2=OrderTakeProfit();
            if(tp1!=tp2)
            {   
               if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),tp1,0,Blue))
                  Print ("Error: ", GetLastError());
            }
         }
      }      
   }
}

在此處輸入圖片說明

您的最后一個訂單將位於第一個位置 (FIFO) - 因此只需調整您的 for 循環以循環到 1 而不是 0 的下限。

void ModifyTakeProfit()
{
   double point=MarketInfo(OrderSymbol(),MODE_POINT);
   double tp1,tp2,bbep,bsize; tp1=0;tp2=0;bbep=0;bsize=0;
   for (int i=OrdersTotal()-1; i>=1; i--) 
   { 
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==OrderMagicNumber())
      {
         if(OrderType()==OP_BUY)
         {
            tp1=OrderTakeProfit();
            bbep += OrderOpenPrice()*OrderLots(); 
            bsize+= OrderLots();
         }
      }      
   }
   if (bbep>0) 
   { 
      bbep/=bsize; 
      tp1=bbep + TakeProfit*point;
      if(TakeProfit!=0)
         tp1=NormalizeDouble(tp1,(int)MarketInfo(OrderSymbol(),MODE_DIGITS));
      else 
         tp1=0;
   }
   for (int i=OrdersTotal()-1; i>=1; i--)
   { 
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==OrderMagicNumber())
      {
         if(OrderType()==OP_BUY)
         {
            tp2=OrderTakeProfit();
            if(tp1!=tp2)
            {   
               if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),tp1,0,Blue))
                  Print ("Error: ", GetLastError());
            }
         }
      }      
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM