请教orderselect嵌套问题怎么解决?
在第一层for之前,先调用 lan_buypos 和 lan_sellpos
double buys = lan_buypos(); double sells = lan_sellpos(); for(int cnt=0; cnt<total; cnt++) { if(!OrderSelect(cnt, SELECT_BY_POS,MODE_TRADES))continue; Print("186---未区分多空时------cnt=",cnt); Print("187---未区分多空时-----OrderType()=",OrderType()); Print("1188--未区分多空时----OrderTicket()=",OrderTicket()); if(MA1>MA2 && buys<sells) { //... } if(buys>sells) { //... } }
老师的解决方法非常不错。其实,第一个FOR不妨直接用--,就不存在你说的问题了。因为,序号遍历的订单,如果这个订单因某种原因被平仓,这个订单就会被系统自动移动到历史订单列表里了, 当前持仓订单列表系统会自动剔除, 因此,排序序号当然会变了。
Print("196-------------多头时--未区分多空时------cnt=",cnt);
------------------------------
double lan_buypos()
{
double a=0;
int t=OrdersTotal();
for(int i=t-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==Symbol() && OrderType()==OP_BUY)// && OrderMagicNumber()==magic)
{
a=a+OrderLots();
}
}
}
return(a);
}
问题:for函数用了orderselect选中订单,在for嵌套了if条件为调用buypos函数,而buypos函数又用了一次orderselect,,,但是这个buypos用完选择后,此时系统选中的订单已不再是for当时选中的订单,怎么解决呢?