如何解决如何通过排除最后一个订单来修改多个目标利润?
我创建了这个 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,MODE_TradES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==OrderMagicNumber())
{
if(OrderType()==OP_BUY)
{
tp2=OrderTakeProfit();
if(tp1!=tp2)
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),tp1,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,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==OrderMagicNumber())
{
if(OrderType()==OP_BUY)
{
tp2=OrderTakeProfit();
if(tp1!=tp2)
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),tp1,Blue))
Print ("Error: ",GetLastError());
}
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。