首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过排除最后一张订单来修改多目标利润?

如何通过排除最后一张订单来修改多目标利润?
EN

Stack Overflow用户
提问于 2021-07-10 16:43:20
回答 1查看 86关注 0票数 0

我创建了这个Modify Take利润函数,但它将计算所有的总订单。如何删除最后一个订单?我想让它计算没有最后一个订单的平均价格

代码语言:javascript
复制
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());
            }
         }
      }      
   }
}

EN

回答 1

Stack Overflow用户

发布于 2021-07-16 13:45:23

您的最后一个顺序将在第一个位置(FIFO) -因此只需将您的for循环调整为循环下限1而不是0。

代码语言:javascript
复制
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());
            }
         }
      }      
   }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68326163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档