Я новичок в программировании на MQL4. Написал простого советника, но он дает сигнал о паттерне каждый тик, пока не закроется нулевой бар. А нужно, чтоб 1 раз. Я уже перебрал ОЧЕНЬ много вариантов обработчиков события "Новый Бар", но НИ ОДИН не решает эту проблему.
Есть один момент: я, когда перебирал разные варианты обработчиков события "новый бар", тестировал советник ТОЛЬКО в тестере стратегий. И журнал событий получается просто огромным из-за большого количества оповещений.
Может в тестере стратегий есть какие-то ограничения по событию "Новый Бар"?
А статью Обработчик события "новый бар" - смотрели? Определение нового бара с помощью статической переменной:
//+------------------------------------------------------------------+ //| Возвращает true, если появился новый бар для пары символ/период | //+------------------------------------------------------------------+ bool isNewBar() { //--- в статической переменной будем помнить время открытия последнего бара static datetime last_time=0; //--- текущее время datetime lastbar_time=SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE); //--- если это первый вызов функции if(last_time==0) { //--- установим время и выйдем last_time=lastbar_time; return(false); } //--- если время отличается if(last_time!=lastbar_time) { //--- запомним время и вернем true last_time=lastbar_time; return(true); } //--- дошли до этого места - значит бар не новый, вернем false return(false); }
А статью Обработчик события "новый бар" - смотрели? Определение нового бара с помощью статической переменной:
Да. Я его вставлял в код таким образом:
int start()
{
if(isNewBar()==false) return(0);
...
return(0);
}
Поправьте, если что-то не так.
Я уже даже специально создавал такие условия, чтоб советник не работал вообще. А функция return(): что есть, что нету ее. :) Советник выполняется каждый тик.
Да. Я его вставлял в код таким образом:
int start()
{
if(isNewBar()==false) return(0);
...
return(0);
}
Поправьте, если что-то не так.
Я уже даже специально создавал такие условия, чтоб советник не работал вообще. А функция return(): что есть, что нету ее. :) Советник выполняется каждый тик.
Начните с получение шаблона эксперта с помощью Мастера MQL. Также справка - раздел "Выполнение программ".
Событие Start – это специальное событие для активизации скрипта после его загрузки. Это событие обрабатывается функцией OnStart. Событие Start экспертам и пользовательским индикаторам не посылается.
Если я правильно понял, весь код надо выполнять внутри функции void OnTick(), а не int Start()?
Функция start() использовалась в старых версиях MQL (MT4 build до 600). Сейчас для этих целей OnTick().
условие можно и так написать: if (!IsNewBar()) return; но это дело вкуса.
Однако учтите, что Вам может понадобится производить некоторые операции когда бар формируется (отслеживание цены/профита, закрытие позиций, трейлинг).
Поэтому лучше делать примерно так:
void OnTick() { if (IsNewBar()) { // выполняем что необходимо при открытии бара } // выполняем общие проверки, не зависящие от открытия бара. ... }
Я бы еще делал подтверждение того, что по открытию бара операция прошла успешно. Т.к. если речь идет об открытии ордера на новом баре и по каким-либо причинам не удалось его открыть, то на следующем тике можно попытаться еще раз... если оно надо.
Да. В OnTick(). А Start() вообще не должно быть.
Зачем же так категорично? Start() в mql4 оставлен для совместимости и прекрасно работает
Столько ответов!!! :) Спасибо ВСЕМ за помощь! Буду разбираться.
Я только сейчас заметил, что написал на форуме MQL 5, а не MQL 4 :)
Может, в силу того, что я пытаюсь написать советник в MQL 4, есть смысл перенаправить на форум MQL 4?
Столько ответов!!! :) Спасибо ВСЕМ за помощь! Буду разбираться.
Я только сейчас заметил, что написал на форуме MQL 5, а не MQL 4 :)
Может, в силу того, что я пытаюсь написать советник в MQL 4, есть смысл перенаправить на форум MQL 4?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я новичок в программировании на MQL4. Написал простого советника, но он дает сигнал о паттерне каждый тик, пока не закроется нулевой бар. А нужно, чтоб 1 раз. Я уже перебрал ОЧЕНЬ много вариантов обработчиков события "Новый Бар", но НИ ОДИН не решает эту проблему.
Есть один момент: я, когда перебирал разные варианты обработчиков события "новый бар", тестировал советник ТОЛЬКО в тестере стратегий. И журнал событий получается просто огромным из-за большого количества оповещений.
Может в тестере стратегий есть какие-то ограничения по событию "Новый Бар"?