注解: 开价格和有效时间的改变只对挂单而言。 如果未改变的值作为函数参量通过,将会生成错误 1 (ERR_NO_RESULT)。 在一些服务器中挂单的有效时间会被隐藏。这种情况下,当一个非零值在 有效参量被指定时,将生成错误 147 (ERR_TRADE_EXPIRATION_DENIED)。 参量:
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderTakeProfit(),0,Blue); 你是已经修改了。修改成新的 新止损水平。 新赢利水平。 |
你加上 break;就可以了,更改后就停止就行了
细节请联系:QQ 1031130533
修改成功我是明白的 但是为什么修改后 原是订单的止损并未立刻改变? 需要重新选择订单后,止损值才会改变。
所以我想知道 MQL的订单队列 是怎样存放的?或者修改订单函数修改成功后,是否立即将止损值修改并且存入订单中,如果已经存入,为何直接调用OrderStopLoss()函数 却是0(依然是旧的止损)?
我想知道的是: 修改订单成功了 为何 OrderStoploss()函数却得不到订单的新的止损值?
angelstar 2010.11.04 05:53
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderTakeProfit(),0,Blue);
你是已经修改了。修改成新的 新止损水平。 新赢利水平。
--------------------------------------------------------------------------------------
我想应该应该没有看仔细我的问题 我也知道确定修改成功了 但是为什么:马上调用OrderStoploss()函数却得不到订单的新的止损值?
不好意思,你标题写的是没有变动,而回复内容里面写改变了。呵呵。
据我观察,订单队列 最后一个是最新的一个。也就是OrdersTotal-1 是最新的一个。
你可以捕获下最新错误。
bool b = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderTakeProfit(),0,Blue);
if(!b)
{
Print("Error closing order (", (OrderType()),": ",OrderTicket(),"; Error(", GetLastError(),")");
}
我认为你的代码不够严谨
加上~
///如果有订单 循环订单找到需要的订单
for(int i=0;i< OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
{
Print("OrderSend 失败错误没有找到订单 #",GetLastError());
break;
}
......
你订单修改了止损,当然你的止损值就会发生了改变,可联系QQ:1031130533解决问题
修改订单成功了 为何 OrderStoploss()函数却得不到订单的新的止损值?
因为设置是送到服务器设置的,然后返回更改是否成功,但是当前选择的订单是已经选定的,不会得到更新,print的还是原来的值,
for(int pos =0;pos<OrdersTotal; pos++)
{
OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderTakeProfit(),0,Blue);
Print(OrderStopLoss());
}
后来在 Print(OrderStopLoss());之前再次添加OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);后发现止损值改变了。
请问为什么呢? 还有MQL的订单队列是怎样一种存放模式?能否解释以上的问题?