Эта точно работает и там еще много чего ...
А в Вашей функции попробуйте удалить -1 после OrdersHistoryTotal()! Думаю, поможет!
Эта точно работает и там еще много чего ...
Спасибо, но проверка по времени закрытия не помогла .
К сожалению, не помогло. Но спасибо за совет!
К сожалению, не помогло. Но спасибо за совет!
Есть функция, которая возвращает цену закрытия последнего ордера :
Столкнулся с таким явлением : при прогоне советника в тестере функция иногда пропускает последний ордер и выдаёт значение предпоследнего.
Может кто-нибудь помочь с данной проблемой или объяснить причину?
сохраняйте тикет ордера в переменную и получайте цену закрытия из истории по этому тикету.
Проверено. 100% работает!
сохраняйте тикет ордера в переменную и получайте цену закрытия из истории по этому тикету.
Проверено. 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));
}
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));
}
Да, иначе не возвращал-бы цену. В основном всё работает правильно, но ИНОГДА возвращает предпоследний уровень закрытия. Если-бы так было постоянно, тогда понятно, что моя ошибка, а так... Пока всё же основная версия - баг тестера.
Пока всё же основная версия - баг тестера.
не,
100% версия - баг у вас в коде.
вы только не серчайте. но с такой подачей быдлокода со скобками -вы её будете выискивать еще недельку другую.
ни одного принта в журнал, ни комента на чарте, как вы контролируете неясно.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть функция, которая возвращает цену закрытия последнего ордера :
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));
}
Столкнулся с таким явлением : при прогоне советника в тестере функция иногда пропускает последний ордер и выдаёт значение предпоследнего. Пробовал дополнительные фильтры по времени закрытия и по тикету, не помогает. Может кто-нибудь помочь с данной проблемой или объяснить причину?