Баг тестера или со мной беда?

 

Есть функция, которая возвращает цену закрытия последнего ордера :

double LastPrH(int tip)
{int i=0;
 double res=0.0;
 for(i=OrdersHistoryTotal()-1;i>=0;i--)
 {if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
  {if(OrderSymbol()==Symbol()){if(OrderMagicNumber()==Magic){if(OrderType()==tip)res=OrderClosePrice();break;}}}
 }
 return(NormD(res));
}

Столкнулся с таким явлением : при прогоне советника в тестере функция иногда пропускает последний ордер и выдаёт значение предпоследнего. Пробовал дополнительные фильтры по времени закрытия и по тикету, не помогает. Может кто-нибудь помочь с данной проблемой или объяснить причину?  

 

Эта точно работает и там еще много чего ...

https://www.mql5.com/ru/forum/131859/page4#434238

 
valeryk!
А в Вашей функции попробуйте удалить -1 после OrdersHistoryTotal()!  Думаю, поможет!
 
BeerGod:

Эта точно работает и там еще много чего ...

https://www.mql5.com/ru/forum/131859/page4#434238

Спасибо, но проверка по времени закрытия не помогла .

 
borilunad:

К сожалению, не помогло. Но спасибо за совет!  

 
valeryk:

К сожалению, не помогло. Но спасибо за совет!  

Не за что! Значит, функция по другой причине не даёт желаемое. Что делать, наша рутина! :(
 
valeryk:

Есть функция, которая возвращает цену закрытия последнего ордера :

Столкнулся с таким явлением : при прогоне советника в тестере функция иногда пропускает последний ордер и выдаёт значение предпоследнего.

Может кто-нибудь помочь с данной проблемой или объяснить причину?  

сохраняйте тикет ордера в переменную и получайте цену закрытия из истории по этому тикету.

Проверено. 100% работает!

бага в тестере нет, таки беда не с ним.
 
sergeev:

сохраняйте тикет ордера в переменную и получайте цену закрытия из истории по этому тикету.

Проверено. 100% работает!

бага в тестере нет, таки беда не с ним.

double LastPrH(int tip)
{int i=0,tik=0;
 datetime tim=0;
 double res=0.0;
 for(i=OrdersHistoryTotal()-1;i>=0;i--)
 {if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
  {if(OrderSymbol()==Symbol())
   {if(OrderMagicNumber()==Magic)
    {if(OrderCloseTime()>tim){if(OrderType()==tip){tik=OrderTicket();tim=OrderCloseTime();}}}
   }
  }
 }
 if(OrderSelect(tik,SELECT_BY_TICKET))res=OrderClosePrice();
 return(NormD(res));
}

Не работает, к сожалению, беда не локализована) 

 

double LastPrH(int tip)
{int i=0,tik=0;
datetime tim=0;
double res=0.0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
{if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{if(OrderSymbol()==Symbol())
{if(OrderMagicNumber()==Magic)
{if(OrderCloseTime()>tim){if(OrderType()==tip)

 /* Сюда точно заходит? */ 

  {tik=OrderTicket(); 

  tim=OrderCloseTime();}

}

}
}
}
}
if(OrderSelect(tik,SELECT_BY_TICKET))res=OrderClosePrice();
return(NormD(res));
}

 
Bicus:

double LastPrH(int tip)
{int i=0,tik=0;
datetime tim=0;
double res=0.0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
{if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{if(OrderSymbol()==Symbol())
{if(OrderMagicNumber()==Magic)
{if(OrderCloseTime()>tim){if(OrderType()==tip)

 /* Сюда точно заходит? */ 

  {tik=OrderTicket(); 

  tim=OrderCloseTime();}

}

}
}
}
}
if(OrderSelect(tik,SELECT_BY_TICKET))res=OrderClosePrice();
return(NormD(res));
}

Да, иначе не возвращал-бы цену. В основном всё работает правильно, но ИНОГДА возвращает предпоследний уровень закрытия. Если-бы так было постоянно, тогда понятно, что моя ошибка, а так... Пока всё же основная версия - баг тестера.

 
valeryk:

Пока всё же основная версия - баг тестера.

не,

100%  версия - баг у вас в коде.

вы только не серчайте. но с такой подачей быдлокода со скобками -вы её будете выискивать еще недельку другую.

ни одного принта в журнал, ни комента на чарте, как вы контролируете неясно.

Причина обращения: