Использование функции Alert() в коде советника

Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
Бонус за сообщение 0.5$
Ответственный Модератор - Haos

Использование функции Alert() в коде советника

Сообщение Haos » 25 апр 2016, 18:08

Функция Alert() отображает диалоговое окно, содержащее пользовательские данные. Поскольку диалоговое окно появляется непосредственно на экране монитора, оставляя позади себя торговый терминал с графиками и т.п. информацией наиболее очевидным применением функции Alert() является вывод сообщений о несоответствии вводимых значений требуемым критериям и остановки выполнения советника с тем чтобы пользователь исправил вводимую информацию в советник. Например, типичной ошибкой является задание размера торгового лота меньше минимально допустимого или больше максимально допустимого. Также отсутствие достаточного количества баров на графике для работы советника и т.п.
Напишем советник с использованием этой функции. Создадим заготовку советника и в функцию OnInit() вставим следующий код:
Код: выделить все
int OnInit()
{
   // проверка на наличие истории:
   if(Bars < 1000)
   {
      Alert("Недостаточное количество баров на графике!");
      return(-1);
   }
   
return(INIT_SUCCEEDED);
}

В коде проверяется количество баров в окне графика. Если их меньше 1000 (такое кол-во выбрали для проверки работы функции, для применения в советнике достаточно ставить 100), то должно появится диалоговое окно, вызванное функцией Alert() с сообщением: "Недостаточное количество баров на графике!". После этого работа советника прекратится. Скомпилируем советник и запустим его на выполнение на месячном графике какого-нибудь торгового инструмента:

01-Alert.png

Полный код эксперта можно скачать ниже.
Вложения
EA-Example_008-v.1.mq4
(1.46 KB) Скачиваний: 68
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Использование функции Alert() в коде советника

Сообщение ВЯЧЕСЛАВПЕТРОВ » 01 фев 2017, 16:03

А если не нужно чтобы советник останавливался,а нужно чтобы продолжал работу.
Втрое не нужно чтобы в алерте повторялось сообщение о проблеме каждый тик о которой ужу сообщено.
Аватар пользователя
ВЯЧЕСЛАВПЕТРОВ
 
Сообщений: 1522
Зарегистрирован: 06 сен 2016, 21:28
Средств на руках: 90.40 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 3574 раз.
Поблагодарили: 434 раз.
Автор Вячеслав Петров. Возьму капитал или счет в управление. В лс.
Мониторинг трех счетной системы. Первый.Второй. Третий.
Четвертый.

Re: Использование функции Alert() в коде советника

Сообщение Haos » 01 фев 2017, 18:01

ВЯЧЕСЛАВПЕТРОВ писал(а):А если не нужно чтобы советник останавливался,а нужно чтобы продолжал работу.
Втрое не нужно чтобы в алерте повторялось сообщение о проблеме каждый тик о которой ужу сообщено.

Странный вопрос - если не нужно, то не используете алерт, а используете другие функции. Алерт именно там, где нужно на экран вывести инфу и остановить выполнение. Не знаете когда нужно остановить выполнение? Ну так тогда, к примеру, когда пользователь неправильный ввод осуществляет.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Использование функции Alert() в коде советника

Сообщение ВЯЧЕСЛАВПЕТРОВ » 01 фев 2017, 18:55

Haos писал(а):
ВЯЧЕСЛАВПЕТРОВ писал(а):А если не нужно чтобы советник останавливался,а нужно чтобы продолжал работу.
Втрое не нужно чтобы в алерте повторялось сообщение о проблеме каждый тик о которой ужу сообщено.

Странный вопрос - если не нужно, то не используете алерт, а используете другие функции. Алерт именно там, где нужно на экран вывести инфу и остановить выполнение. Не знаете когда нужно остановить выполнение? Ну так тогда, к примеру, когда пользователь неправильный ввод осуществляет.

А какие еще функции выдают диалоговое окно для пользователя как Alert().
Когда это нужно.
Например советник тралит три ордера. Один из них закрыт. Выводится сообщение на экран ордер закрыт, но закрытие одного ордера не означает что советник должен перестать работать с остальными двумя.
Через журнал выходит очень много сообщений на каждый тик и не поймешь потом что советник делал за время отсутствия трейдера у терминала.
Другой момент советники спаренные. То есть два три советника в одном с разными настройками. Сбой одного компанента не должен вести к выключению остальных компонентов.
Аватар пользователя
ВЯЧЕСЛАВПЕТРОВ
 
Сообщений: 1522
Зарегистрирован: 06 сен 2016, 21:28
Средств на руках: 90.40 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 3574 раз.
Поблагодарили: 434 раз.
Автор Вячеслав Петров. Возьму капитал или счет в управление. В лс.
Мониторинг трех счетной системы. Первый.Второй. Третий.
Четвертый.

Re: Использование функции Alert() в коде советника

Сообщение Рэндом » 02 фев 2017, 06:08

Алерт не прекращает работу советника. Если надо чтобы алерты не повторялись, нужен хитрый код который будет учитывать что алерт сработал.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Re: Использование функции Alert() в коде советника

Сообщение Haos » 02 фев 2017, 08:21

ВЯЧЕСЛАВПЕТРОВ писал(а):А какие еще функции выдают диалоговое окно для пользователя как Alert().
Когда это нужно.
Например советник тралит три ордера. Один из них закрыт. Выводится сообщение на экран ордер закрыт, но закрытие одного ордера не означает что советник должен перестать работать с остальными двумя.

Да, советник не перестанет работать при выводе алерта. Просто окошко будет висеть на окне монитора. Это я писал в коде алерт с прекращением работы советника, когда пользователь ошибается при инициации параметров при вводе, т.е. когда советник еще не начал работу. :hi_hi_hi: Если же он работает уже, то алерт чисто для вывода на экран сообщений.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Использование функции Alert() в коде советника

Сообщение ВЯЧЕСЛАВПЕТРОВ » 02 фев 2017, 15:12

Рэндом писал(а):Алерт не прекращает работу советника. Если надо чтобы алерты не повторялись, нужен хитрый код который будет учитывать что алерт сработал.

А у вас есть шаблон этого хитрого кода. Мне например он нужен чтобы выводить ключевую информацию о работе советника. Это помогает когда советник много функционален. Когда например советник выполняется на выделенном сервере. Зашел на сервер и знаешь как все функционирует не перелистывая журнал.
Аватар пользователя
ВЯЧЕСЛАВПЕТРОВ
 
Сообщений: 1522
Зарегистрирован: 06 сен 2016, 21:28
Средств на руках: 90.40 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 3574 раз.
Поблагодарили: 434 раз.
Автор Вячеслав Петров. Возьму капитал или счет в управление. В лс.
Мониторинг трех счетной системы. Первый.Второй. Третий.
Четвертый.


Вернуться в MQL – теория и практика

Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 75

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron