SELECT_BY_TICKET是指按定单号选取,可能你的测试时间段一样,最大值定单号也就5 ,所以只能返回5
不是最大5长,7是出错时候的订单号,是实际存在的。昨天测试,1000账单子,9,25,74等很多都是这个问题。不能正确的选择到需要的订单。
我的思路是,现价下单,不设置止赢止损(因为考虑下单时候的滑点使得止赢止损的点数不固定)。然后立即修改这个订单的止赢止损为固定的点数(欧元止赢止损均大于30个点)。
这就需要获取刚发送成功订单的开仓价(Print调试确认已经下单成功),然后就遇到上面的问题。因为要修改的是7号订单,而取得的是5号已经平仓订单的开仓价,从而修改不成功,或者修改错误。
并且这个错误不是连续的。有些能正常选择订单,有些不能,大约5%左右的订单不能正常Select订单。
OrderSelect(TempTicket,SELECT_BY_TICKET,MODE_TRADES); Print("TempTicket=",TempTicket," OrderTicket()=",OrderTicket());
输出结果
TempTicket=7 OrderTicket=5
试试检查,
要从OrderTotal()向0变化编号,不要从0向OrderTotal()变。
int orders=OrderTotal(); Print("Ord=",orders);
int i;
for(i=orders-1;i>=0;i--)
{
OrderSelect(i,.............
你说的问题我知道。我的订单查找程序是从OrderTotal()向0变化的
int SearchOrder (int MAGIC,int ORDERTYPE) { //---- int i=0; for ( int z = OrdersTotal() - 1; z >= 0; z -- ) { if ( !OrderSelect( z, SELECT_BY_POS ) ) { Print("OrderSelect(", z, ",SELECT_BY_POS) - Error #",GetLastError() ); continue; } if (OrderSymbol()!=Symbol())continue; if (OrderMagicNumber() != MAGIC )continue; if ( OrderType()==ORDERTYPE ) i=OrderTicket(); } //---- return(i); }今天挂了模拟实盘现在还没发现问题。感觉可能是MT4复盘测试的BUG
程序写好,复盘测试的时候发现一个问题,一直解决不了。不知道有没有其他朋友遇到。
上诉代码输出结果为: OrderTicket()=5。
测试了下当 index 参数为7、8、9的时候都得到上面的Print结果。
不知道其他朋友遇到过没有。