подскажите алгоритм явного контроля баров

 

Добрый день,

подскажите алгоритм явного контроля баров, что-бы при тестировании стратегии по этому методу  "Open prices only (quick method on completed bars only for expert advisors that explicitly control bar opening)" -  была нормальная точность.

Спасибо
 

if (iTime(Symbol,PEriod(),0)<=LastTime)

return

else

LastTime=iTime(Symbol,PEriod(),0)  и продолжение выполнения OnTick

 
freshwind:

Добрый день,

подскажите алгоритм явного контроля баров, что-бы при тестировании стратегии по этому методу  "Open prices only (quick method on completed bars only for expert advisors that explicitly control bar opening)" -  была нормальная точность.

Спасибо

а что значит "нормальная точность" при тестировании "Open prices only"?

 
Taras Slobodyanik:

а что значит "нормальная точность" при тестировании "Open prices only"?

я имел в виду как уменьшить неточности при указанном методе тестирования. В описании указано что нужен явный контроль открытия баров.

 
Aleksey Mavrin:

if (iTime(Symbol,PEriod(),0)<=LastTime)

return

else

LastTime=iTime(Symbol,PEriod(),0)  и продолжение выполнения OnTick

подскажите чем отличается ваш вариант от этого

if (iTime(0,0,0)==TimeCurrent())

 
freshwind:

подскажите чем отличается ваш вариант от этого

if (iTime(0,0,0)==TimeCurrent())

Вообще всем. Его вариант работает, и он единственно правильный. Ваш вариант сработает правильно если тик придет ровно в 00 секунд, такое происходит крайне редко. Т.е. ваш вариант вообще работать не будет.

Есть еще вариант такой:
if(Volume[0]==1)
Он тоже не работает. В тестере - да, в реальности нет. Потому что может случится так что советник еще не завершил OnTick по тику на последней свече, а уже пришел новый тик, который открыл новую свечу.
Этот тик обработан не будет, а вот следующий да, на нем Volume[0] уже будет равно 2.

https://book.mql4.com/ru/special/index



О сложных программах - Учебник по MQL4
О сложных программах - Учебник по MQL4
  • book.mql4.com
Какого-либо одного формального признака, отличающего обычную программу от сложной, не существует. В целом, сложные программы выгодно отличаются разнообразием предоставляемого сервиса и количеством обрабатываемой информации. Возможно обозначить лишь некоторые качественные характеристики, свойственные сложной программе. Порядок исполнения...
 
Aleksey Mavrin:

if (iTime(Symbol,PEriod(),0)<=LastTime)

return

else

LastTime=iTime(Symbol,PEriod(),0)  и продолжение выполнения OnTick

а какое значение переменной LastTime в начале? TimeCurrent()?

 
freshwind:

а какое значение переменной LastTime в начале? TimeCurrent()?

То, каким инициализируете. Обычно инициализируют нулем.

 
freshwind:

а какое значение переменной LastTime в начале? TimeCurrent()?

Если инициализировать нулем, то при запуске советника/скрипта/индикатора текущий бар будет считаться новым.

Если инициализировать текущим временем, то будет ждать до следующего бара.

 

MQL4:

static datetime last_bar = IsTesting() ? 0 : Time[0];
if(Time[0]>last_bar) {
   last_bar = Time[0];

}

MQL5:

static datetime last_bar = MQLInfoInteger(MQL_TESTER) ? 0 : iTime(NULL,0,0);
if(iTime(NULL,0,0)>last_bar) {
   last_bar = iTime(NULL,0,0);

}
 

статья есть, чтобы не гадать - поиском по статьям "новый бар"

ЗЫ: https://www.mql5.com/ru/articles/159

Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
Причина обращения: