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

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

Виды сигналов

Способов интерпретации индикаторов существует очень много. Даже стандартные индикаторы терминала MetaTrader 4 можно понимать по разному. О всевозможных пользовательских индикаторах я вообще молчу.

  • Пересечение двух линий индикатора (пример приведен выше - главная линия MACD и сигнальная линия);
  • Пересечение линией индикатора определенного уровня (главная линия MACD и нулевая линия, Stoсhastic и уровни 70 и 30, CCI и уровни -100 и 100);
  • Изменение направления движения (AC и AO, обычный MA);
  • Изменение расположения по отношению к цене (Parabolic SAR);
  • Появление стрелочки над или под ценой (Fractals).
Наверное, существуют ещё какие-то способы интерпретации, я просто о них забыл или не знал вообще, поэтому пока остановимся на этих пяти.

Способы оповещения

MetaTrader 4 и MQL 4 позволяют реализовать несколько способов как визуального, так и звукового оповещения:

  • Обычное сообщение на экран (функция Comment);
  • Текст в журнале (функция Print);
  • Окно с сообщением и звуковой сигнал (функция Alert);
  • Отдельный звуковой сигнал с выбором воспроизводимого файла (функция PlaySound).
Кроме того, есть функция отправки файла на FTP-сервер (функция SendFTP()), вывода диалогового окна с сообщением (MessageBox()) и отправки почтового сообщения (SendMail()). Функция SendFTP() вряд ли будет востребована обычным пользователем, MessageBox() не подходит для использования в индикаторе, так как останавливает его работу до закрытия окна сообщения, а SendMail(), хоть и удобна для отправки SMS-сообщений, достаточно "опасна" в использовании - оставив несколько индикаторов на графике, вы обеспечите себе нескончаемый и нерегулируемый поток сообщений. Функцию использовать можно, но лучше из советника, например, отправлять сообщение при появлении сигнала на нескольких индикаторах одновременно, уделив ей достаточно внимания.

Фильтр на частоту сигналов

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

  • Сигналы определять на основании сформировавшихся баров. Это наиболее правильное решение;
  • Чередовать сигналы - после покупки только продажа, и наоборот (тоже очень логичный ход, его можно использовать одновременно с другими);
  • Делать паузу между сигналами (не очень хорошая идея);
  • Давать один сигнал на бар (тоже достаточно искусственное ограничение).
Использовать ли сигнал с нулевого, несформировавшегося, бара для торговли - личное дело каждого. Я, например, считаю что это неправильно. Но есть индикаторы требующие моментальной реакции - для них один бар это слишком много. Поэтому дадим пользователю выбор. Несколько сигналов на покупку подряд вряд ли имеют смысл, поэтому все сигналы будем чередовать. А искусственные паузы вводить, пожалуй, не будем. Если они действительно понадобятся, об этом напишут в комментариях к статье.

Сигнал первый - пересечение двух индикаторных линий

Начнем с приводимого в примерах MACD.

И именно в таком порядке (от 0 до 7) значения линий индикатора отображаются в окне DataWindow. Имена, которые вы увидите там же, назначаются функцией SetIndexLabel - это третий способ идентификации.

Теперь, когда мы знаем, где хранятся необходимые данные, можем переходить к реализации сигнального блока. Для этого перемещаемся в самый конец функции start - выше последнего оператора return:

Ни в коем случае нельзя добавлять сигнальный блок в цикл расчета индикатора - это замедлит его работу и не принесет никакой пользы.

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

Дальше находится простая проверка, начался ли новый бар (работает только, если SIGNAL_BAR больше 0).

Обратите внимание на директиву #define - компилятор просто заменит во всем коде переменную SIGNAL_BAR указанным значением (1).

если значение главной линии MACD на баре №1 больше, чем значение сигнальной линии на баре №1

А в функции PlaySound можно указать, какой аудио файл проигрывать. Файл должен находиться в директории MetaTrader 4\sounds\ и иметь расширение wav. Например, сделать свой звук на сигнал бай и свой - на селл или разные звуки разным индикаторам.

Остальные сигналы

Теперь, когда мы освоились в коде индикатора, нам будет намного проще написать другие блоки оповещения. Меняться будет только "формула", остальной код будем просто копировать.

Как видите, при пересечении линией %K (MainBuffer) уровня 30 снизу вверх индикатор скажет "Buy", а при пересечении уровня 70 сверху вниз - "Sell".

Но все равно его можно встретить, например, в Parabolic-е. На его примере мы и напишем "формулу":

Заключение

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

  • Пересечение двух линий индикатора;
  • Пересечение линией индикатора определенного уровня;
  • Изменение направления движения;
  • Изменение расположения по отношению к цене;
  • Появление стрелочки над или под ценой.
Для оповещения были выбраны функции:

  • Comment() - для обычного сообщения на экран;
  • Print() - для отображения сообщения в журнале;
  • Alert() - для отображения сообщения в специальном окне и звукового сигнала;
  • и PlaySound() - для воспроизведения любого звукового файла.
Для уменьшения частоты сигналов:

  • При определении сигнала использовались сформировавшиеся бары;
  • Все сигналы чередовались - после покупки только продажа, и наоборот.
На примере пяти индикаторов, соответствующих пяти видам сигналов, были рассмотрены их сигнальные блоки. Полученные индикаторы можно скачать - ссылки в конце статьи.

Источники: http://www.mql5.com/ru/articles/1448