Обсуждение статьи "Обработчик события "новый бар"" - страница 2

 

Prival:

Редко, но бывают ситуации, когда котировки по одному инструменту замирают и надолго (видел такое в йеной). И если советник висит на этой паре то ты попал, если не перевел весь код в OnTime().

Если работать на ООП, или использовать определенные алгоритмы то и перевода кода непонадобится. Но согласитесь что удобней получать тики в реальном времени по всем парам находящимся в обзоре (причем не придумывать что-то свое при этом)...

Lizar:

Такое событие можно получить при помощи TimeCuurent(), а вот что с ним дальше делать, как синронизировать - вопрос.

А причем тут TimeCuurent()?
 
Interesting:
 А причем тут TimeCuurent()?

Справка гласит:

В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это – время прихода последней котировки по любому символу, доступного в окне "Обзор рынка", то самое время, которое показано в заголовке этого окна.

 

 
Lizar:

Справка гласит:

В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это – время прихода последней котировки по любому символу, доступного в окне "Обзор рынка", то самое время, которое показано в заголовке этого окна.

Да это понятно. только если поместить ее в OnTime мы сможем обновлять время не чаще раза в минуту, а если в текущую OnTick() то рискуем пропустить тики по какой-то из пар (в мультах).

А что делать в блоке обработки это понятно (для мультов) - Получаем новое значение, сравниваем с имеющимся и делаем выводы был новый тик или нет.

Но вот скажите мне, нафига это делать в эксперте?

 
Lizar:

Справка гласит:

 

ошибка. вот что гласит справка https://www.mql5.com/ru/docs/basis/function/events

Событие NewTick генерируется только для экспертов при поступлении нового тика по символу, к графику которого прикреплен эксперт.

Еще раз. Мы говорим про советник который висит на каком-то символе. Он запускается по событию

void OnTick() {}

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

 

 

 

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Interesting:

Да это понятно. только если поместить ее в OnTime мы сможем обновлять время не чаще раза в минуту, а если в текущую OnTick() то рискуем пропустить тики по какой-то из пар (в мультах).

В этом то и дело, что событие мы получить можем, а использовать толком нет.
 
Prival:

ошибка. вот что гласит справка https://www.mql5.com/ru/docs/basis/function/events

Еще раз. Мы говорим про советник который висит на каком-то символе. Он запускается по событию

void OnTick() {}

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

Да, если действовать в рамках этого https://www.mql5.com/ru/docs/basis/function/events, то согласен, что наилучший вариант, как сейчас видится, это OnTime. Но это нас только спасет от зависимости поступления тиков. И не спасет от однопоточности: пока обрабатываем сигнал по одному инструменту, рискуем пропустить или запаздать с обработкой других. Особенно это актуально становится при условии "время обработки торговых заявок от 2 до 7 секунд" + реквоты.

А про TimeCuurent() вспомнил, потому что  Interesting заговорил про тики в реальном времени по всем парам находящимся в обзоре рынка.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Хорошая статья, спасибо.
 
Не Time надо использовать, а Bars
 
В статье столько вариаций кода, но в итоге все равно не понятно, какую функцию корректнее использовать на МТ4 чтобы хоть чуть-чуть, что бы повысить соответствие того что рисует тестер с торговлей. Подскажите!
 
Pavel Komarovsky:
В статье столько вариаций кода, но в итоге все равно не понятно, какую функцию корректнее использовать на МТ4 чтобы хоть чуть-чуть, что бы повысить соответствие того что рисует тестер с торговлей. Подскажите!
datetime counted_bar = 0;

int OnInit()
{
   counted_bar = 0; // если нужно, чтоб при перезапуске последний бар был проанализирован
   ...

void OnTick()
{
   // Если появился новый бар
   if ( iTime( _Symbol, _Period, 0 ) > counted_bar )
   {
      counted_bar = iTime( _Symbol, _Period, 0 );

      // Анализируем индикаторы
      ...
   }
Причина обращения: