Советники: New_Bar (условие, определяющее появление нового бара, реализованно в виде микросоветника) - страница 2

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

 
По поводу доказательств ошибочности:
В примечании третий абзац
 
Aliaksandr Hryshyn #:
Проверьте ещё при возможных тяжёлых расчетах в советнике или используемых индикаторах при большом количестве событий OnTick.

Здравствуйте, Александр! Поставил советник на мониторинг. О результатах сообщу.

С уважением, Владимир.

 
MrBrooklin #:

Здравствуйте, Александр! Поставил советник на мониторинг. О результатах сообщу.

С уважением, Владимир.

Пропуск первого тика возможен при долгой отработке советника и частых тиках. И если отработка будет дольше межтикового времени, то первый объем будет больше 1.
 
Aliaksandr Hryshyn #:
По поводу доказательств ошибочности:
В примечании третий абзац

Честно говоря, не совсем понял при чём тут обработка событий NewTick, когда условие определения нового бара построено на iOpen() и  iVolume().

С уважением, Владимир.


 
Valeriy Yastremskiy #:
Пропуск первого тика возможен при долгой отработке советника и частых тиках. И если отработка будет дольше межтикового времени, то первый объем будет больше 1.

Доброе утро, Валерий! Было бы очень здорово, если Вы примером программного кода показали при каких условиях первый объём будет больше единицы.

С уважением, Владимир.

 
MrBrooklin #:

Честно говоря, не совсем понял при чём тут обработка событий NewTick, когда условие определения нового бара построено на iOpen() и  iVolume().

С уважением, Владимир.


NewTick у вас в коде обрабатывается внутри OnTick
 
MrBrooklin #:

Доброе утро, Валерий! Было бы очень здорово, если Вы примером программного кода показали при каких условиях первый объём будет больше единицы.

С уважением, Владимир.

Поставьте в onTick вызов Sleep(100), т.е. сымитируйте работу торгового алгоритма, и пропуски тиков будут.
 
MrBrooklin #:

... Было бы очень здорово, если Вы примером программного кода показали при каких условиях первый объём будет больше единицы.

С этим можно легко столкнуться в мультивалютном советнике, который работает на графике одной валютной пары. Советник в OnTick() запускает цикл по нескольким парам. Допустим, по первой паре наступил новый бар и советник решил открыть по ней позицию или несколько отложенных ордеров. На это с учетом возможных задержек может уйти несколько секунд. За эти секунды по второй паре уже пришло два тика, и когда советник доберется в цикле до обработки второй пары, то ваше условие нового бара уже не будет выполнено. Новый бар для второй пары будет пропущен.

Поэтому я для себя реализовывал более сложный код для определения нового бара, в основе которого примерно та же идея, как и в этом ответе, только вместо iTime используется iVolume.

New Bar Event
New Bar Event
  • www.mql5.com
Позволяет определить наступление события нового бара в мультивалютном советнике. В вызове OnTick() можно многократно проверять, наступило ли на этом тике событие для нужного инструмента (symbol) и периода графика (timeframe).
 
MrBrooklin #:

Специально написал проверочный код

и запустил в OnTick().

После обнуления счётчика на всех новых барах отсчёт начинается с единицы. Если есть желание, сами можете в этом убедиться. Кстати, хотелось бы узнать в целях саморазвития, при каких таких многих причинах счетчик тиковых объёмов вдруг сам для себя решит сброситься не до нуля, а например, до единицы или до двойки?

С уважением, Владимир.

Владимир, функция iOpen() возвращает не bool значение

double  iOpen( 
   const string        symbol,          // символ 
   ENUM_TIMEFRAMES     timeframe,       // период 
   int                 shift            // сдвиг 
   );

поэтому проверка 

if(iOpen(_Symbol,PERIOD_CURRENT,0))

не имеет никакого смысла.

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