Звуковые сигналы в индикаторах

Звуковые сигналы в индикаторах

Звуковые сигналы в индикаторах

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

Как и несколько лет назад, многие трейдеры для анализа пользуются Техническими индикаторами — одним или несколькими сразу. А некоторые стратегии учитывают значения индикаторов одновременно на нескольких периодах.

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

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

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

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

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

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

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

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

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

В этой статье мы рассмотрим только способы звукового и визуального оповещения терминала MetaTrader 4.

Самый простой и удобный из них — функция Alert, так как содержит и текст и звук. Кроме того, терминал хранит историю Alert-ов и всегда можно посмотреть, какой сигнал был час назад.

Но, как известно, на вкус и цвет товарищей нет. Поэтому я сделаю заготовку для всех упомянутых способов (кроме SendFTP, MessageBox и SendMail), а вы выберете удобный для себя.

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

  • Сигналы определять на основании сформировавшихся баров. Это наиболее правильное решение;
  • Чередовать сигналы — после покупки только продажа, и наоборот (тоже очень логичный ход, его можно использовать одновременно с другими);
  • Делать паузу между сигналами (не очень хорошая идея);
  • Давать один сигнал на бар (тоже достаточно искусственное ограничение).

Итак, приступим к реализации.

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

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

Главная наша задача — определить в каких массивах хранятся линии индикатора. Для этого посмотрим в код:

//---- indicator settings #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Silver #property indicator_color2 Red #property indicator_width1 2 //---- indicator parameters extern int FastEMA = 12; extern int SlowEMA = 26; extern int SignalSMA = 9; //---- indicator buffers double MacdBuffer[]; double SignalBuffer[];

Обратите внимание на комментарий «indicator buffers» — это именно то, что мы искали. Такие массивы чаще всего имеют интуитивно понятное имя (MacdBuffer — буфер значения главной линии MACD, SignalBuffer — буфер сигнальной линии) и всегда располагаются вне функций init, deinit и start.

Если массивов много и сложно понять какой из них необходим, посмотрите в функцию init — все массивы, отображенные на графике, «привязываются» к определенному номеру с помощью функции SetIndexBuffer:

int init() < //---- drawing settings SetIndexStyle(0, DRAW_HISTOGRAM); SetIndexStyle(1, DRAW_LINE); SetIndexDrawBegin(1, SignalSMA); IndicatorDigits(Digits + 1); //---- indicator buffers mapping SetIndexBuffer(0, MacdBuffer); SetIndexBuffer(1, SignalBuffer); //---- name for DataWindow and indicator subwindow label IndicatorShortName("sMACD(" + FastEMA + "," + SlowEMA + "," + SignalSMA + ")"); SetIndexLabel(0, "sMACD"); SetIndexLabel(1, "sSignal"); //---- initialization done return(0); >

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

Читать статью  Самое важное об автоматической торговле на новостях

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

for(i = 0; i < limit; i++) SignalBuffer[i] = iMAOnArray(MacdBuffer, Bars,S ignalSMA, 0, MODE_SMA, i); //---- done // а сюда мы добавим наш код return(0); > //+------------------------------------------------------------------+

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

Итак, начинаем сочинять:

//---- Статические переменные, в которых хранятся //---- время последнего бара и направление последнего сигнала static int PrevSignal = 0, PrevTime = 0; //---- Если баром для анализа выбран не 0-й, нам нет смысла проверять сигнал //---- несколько раз. Если не начался новый бар, выходим. if(SIGNAL_BAR > 0 && Time[0] return(0); //---- Отмечаем, что этот бар проверен PrevTime = Time[0];

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

Кстати, саму переменную SIGNAL_BAR мы объявили намного раньше, ещё до функции init:

double SignalBuffer[]; //---- Номер бара, по которому будет искаться сигнал #define SIGNAL_BAR 1 //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() 

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

Теперь, собственно, код сигнала:

//---- Если предыдущий сигнал был СЕЛЛ или это первый запуск (PrevSignal=0) if(PrevSignal 0) < //---- Проверяем, не пересеклись ли линии на прошлом баре: if(MacdBuffer[SIGNAL_BAR] - SignalBuffer[SIGNAL_BAR] > 0 && SignalBuffer[SIGNAL_BAR+1] - MacdBuffer[SIGNAL_BAR+1] >= 0) < //---- Если пересеклись, отмечаем что последний сигнал - бай PrevSignal = 1; //---- и выводим информацию: Alert("sMACD (", Symbol(), ", ", Period(), ") - BUY. "); // Print("sMACD (", Symbol(), ", ", Period(), ") - BUY. "); // Comment("sMACD (", Symbol(), ", ", Period(), ") - BUY. "); // PlaySound("Alert.wav"); > >

Тут тоже все просто. Если предыдущий сигнал был на продажу, проверяем пересечение линий:
если значение главной линии MACD на баре №1 больше, чем значение сигнальной линии на баре №1
И
значение сигнальной линии на баре №2 больше, чем значение линии MACD на баре №2
значит
линии пересеклись.

Дальше отмечаем, что последний сигнал был на покупку, и выводим сообщение. Обратите внимание на три закомментированные строки - это ещё три варианта оповещения. Вы можете разкомментировать или удалить любую из них или все сразу. По умолчанию я оставил только Alert, как самый удобный.
А в функции PlaySound можно указать, какой аудио файл проигрывать. Файл должен находиться в директории MetaTrader 4sounds и иметь расширение wav. Например, сделать свой звук на сигнал бай и свой - на селл или разные звуки разным индикаторам.

Сигнал на продажу полностью аналогичен:

//---- Полностью аналогично для сигнала СЕЛЛ if(PrevSignal >= 0) < if(SignalBuffer[SIGNAL_BAR] - MacdBuffer[SIGNAL_BAR] > 0 && MacdBuffer[SIGNAL_BAR+1] - SignalBuffer[SIGNAL_BAR+1] >= 0) < PrevSignal = -1; Alert("sMACD (", Symbol(), ", ", Period(), ") - SELL. "); // Print("sMACD (", Symbol(), ", ", Period(), ") - SELL. "); // Comment("sMACD (", Symbol(), ", ", Period(), ") - SELL. "); // PlaySound("Alert.wav"); > >

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

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

Сигнал на пересечение определенного уровня очень похож на пересечение линий. Я его добавил в Stochastic, но вы можете провести аналогию для любого другого индикатора:

if(PrevSignal 0) < if(MainBuffer[SIGNAL_BAR] - 30.0 > 0 && 30.0 - MainBuffer[SIGNAL_BAR+1] >= 0) < PrevSignal = 1; Alert("sStochastic (", Symbol(), ", ", Period(), ") - BUY. "); > > if(PrevSignal >= 0) < if(70.0 - MainBuffer[SIGNAL_BAR] > 0 && MainBuffer[SIGNAL_BAR+1] - 70.0 >= 0) < PrevSignal = -1; Alert("sStochastic (", Symbol(), ", ", Period(), ") - SELL. "); > >

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

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

//---- indicator buffers double ExtBuffer0[]; double ExtBuffer1[]; double ExtBuffer2[]; double ExtBuffer3[]; double ExtBuffer4[];

ExtBuffer3 и ExtBuffer4 используются для промежуточных расчетов, ExtBuffer0 всегда хранит знчение индикатора, а ExtBuffer2 и ExtBuffer3 "разукрашивают" столбики в 2 цвета. Поскольку нам необходимо только значение индикатора, будем использовать ExtBuffer0:

if(PrevSignal 0) < if(ExtBuffer0[SIGNAL_BAR] - ExtBuffer0[SIGNAL_BAR+1] > 0 && ExtBuffer0[SIGNAL_BAR+2] - ExtBuffer0[SIGNAL_BAR+1] > 0) < PrevSignal = 1; Alert("sAC (", Symbol(), ", ", Period(), ") - BUY. "); > > if(PrevSignal >= 0) < if(ExtBuffer0[SIGNAL_BAR+1] - ExtBuffer0[SIGNAL_BAR] > 0 && ExtBuffer0[SIGNAL_BAR+1] - ExtBuffer0[SIGNAL_BAR+2] > 0) < PrevSignal = -1; Alert("sAC (", Symbol(), ", ", Period(), ") - SELL. "); > >

Если значение индикатора уменьшалось, а потом начало увеличиваться, даем сигнал на покупку, если наоборот - увеличивалось и начало уменьшаться - на продажу.

Четвертый вид сигнала - изменение расположения по отношению к цене - достаточно редкий.
Но все равно его можно встретить, например, в Parabolic-е. На его примере мы и напишем "формулу":

if(PrevSignal 0) < if(Close[SIGNAL_BAR] - SarBuffer[SIGNAL_BAR] > 0) < PrevSignal = 1; Alert("sParabolic Sub (", Symbol(), ", ", Period(), ") - BUY. "); > > if(PrevSignal >= 0) < if(SarBuffer[SIGNAL_BAR] - Close[SIGNAL_BAR] > 0) < PrevSignal = -1; Alert("sParabolic Sub(", Symbol(), ", ", Period(), ") - SELL. "); > >

Тут вообще все просто - сравниваем значение индикатора с ценой закрытия бара. Заметьте, если установить SIGNAL_BAR равным 0, каждое "прикосновение" цены к параболику будет сопровождаться сигналом.

И последний сигнал - появление стрелочки на графике. В стандартных индикаторах он встречается достаточно редко, зато очень распространен в пользовательских "определителях разворотов". Я рассмотрю этот вид сигналов на примере индикатора Fractals (исходный код на MQL 4 находится в Code Base: Fractals).

Общим для всех подобных индикаторов является то, что в тех местах, где они рисуются на графиках, они не равны 0 (или EMPTY_VALUE). На всех остальных барах их буферы пустые. То есть для определения сигнала достаточно сравнить значение буфера с 0:

if(PrevSignal 0 ) < if(ExtDownFractalsBuffer[SIGNAL_BAR] > 0) < PrevSignal = 1; Alert("sFractals (", Symbol(), ", ", Period(), ") - BUY. "); > > if(PrevSignal >= 0) < if(ExtUpFractalsBuffer[SIGNAL_BAR] > 0) < PrevSignal = -1; Alert("sFractals (", Symbol(), ", ", Period(), ") - SELL. "); > >

Но если вы присоедините индикатор с таким кодом на график, вы никогда не дождетесь сигнала. У фракталов есть одна особенность - они используют 2 будущих бара для анализа, поэтому стрелочки появляются только на втором по номеру (или третьем по счету - 0-й, 1-й, 2-й) баре. Поэтому для того, чтоб сигналы заработали, надо установить SIGNAL_BAR равным 2:

//---- Номер бара, по которому будет искаться сигнал #define SIGNAL_BAR 2

Всё, теперь сигналы будут работать!

Заключение

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

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

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

Звуковой индикатор форекс – комфортная торговля

Форекс индикатор звуковой

Многие трейдеры, особенно среди начинающих, не знают о таком типе инструментов, как звуковые индикаторы. Что они собой представляют, чем отличаются от привычных нам классических инструментов и есть ли смысл встраивать их в стою торговую систему? Ответим на эти вопросы сегодня!

Нужна ли звуковая индикация на Форекс сегодня?

Всё большую популярность среди трейдеров Форекс в последнее время завоёвывают звуковые индикаторы, хотя это наверняка далеко не заключительная стадия повышения комфорта в области торговли на бирже через онлайн-терминалы. Стоит сразу отметить, что аудиооповещения не являются инновационным алгоритмом, позволяющим делать высокоточные прогнозы движения цены. Это вспомогательный элемент, созданный именно для удобства участников рынка. Начинающий инвестор, придя на Forex и впервые столкнувшись с таким названием, как «звуковой индикатор», может неверно его понять. Потому необходимо больше информации в свободном доступе, чтобы в дальнейшем люди, начиная играть на бирже, могли чётко понять что представляет собой этот элемент терминала и есть ли смысл использовать его в своей торговой системе.

Есть ли различия?

Форекс индикатор звуковой

По сути, звуковые индикаторы решительно ничем не отличаются от привычных всем нам инструментов и программ-ассистентов для торговли на бирже Forex. Единственное — это наличие звукового извещения, которое в принципе возможно интегрировать практически в любой классический элемент технического анализа. Это означает, что если мы встраиваем звуковые функции в любую индикационную систему, анализатор и т.д, то любой сигнал, поступающий от выбранного инструмента, будет сопровождаться заданным аудиоизвещением. И это касается не только сигналов о наличии точки входа либо выхода из позиции, можно настроить срабатывание того или иного звукового сигнала на каждое теоретически возможное событие — разворот цены, вход в зону избытка, достижение курсом определённого уровня и т.д. Всё это будет зависеть уже напрямую от настраиваемого инструмента.

А как на практике

Разберём несколько небольших примеров для наглядности.

Допустим, мы работаем с индикатором RSI, который зарегистрировал потенциальные зоны перепроданности и перекупленности. Немногие будут гореть желанием проводить часы перед экраном терминала в ожидании подтверждения либо опровержения сделанного прогноза, а потому нам и нужна звуковая индикация, которая была встроена в используемую версию RSI заранее. Теперь при преодолении графиком котировки 70 либо 30 пунктов в заданном направлении мы получим аудиоизвещение, сигнализирующее о том, что вероятность реверса на рынке достаточно высока, а значит возрос и шанс открыть прибыльную позицию.

Но есть и другие варианты. К примеру, можно настроить оповещения так, чтобы сигнал возникал при формировании нового фрактала на графике. Таким образом необходимость в постоянном нахождении возле монитора также отпадает, и если мы возьмём интервал, скажем, в 15 минут, то вместо двух или трёх часов постоянного слежения за рынком необходимо будет просто несколько раз открывать терминал по звуковому сигналу и проверять график на соответствие условиям входа в позицию.

Рассмотрим ещё для примера один из наиболее популярных на сегодняшний день индикаторов — MACD. В данном случае даже не обязательно самостоятельно вписывать аудиосигналы в код инструмента, поскольку можно найти уже готовую, «звуковую» модификацию помощника в свободном доступе в интернете. По умолчанию оповещение возникает в момент уверенного преодоления гистограммы мувингом, но благодаря открытым исходникам можно доработать MACD самостоятельно. Чтобы, к примеру, формирование последующей гистограммы пониженного уровня также провоцировало возникновение сигнала.

Форекс индикатор звуковой

В таком случае первый алерт свидетельствует о начале разворотной тенденции, а второй — о том, что формируется новый тренд и пора принимать некоторые торговые решения. В целом это выглядит достаточно удобно, особенно если Вы параллельно Forex занимаетесь чем-то ещё на своём компьютере либо не слишком далеко от него. Главное, чтобы хватило выдержки не просматривать графики до возникновения сигнала.

Звуковая индикация в торговых стратегиях

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

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

Форекс индикатор звуковой

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

Главное правило

  • Если Ваша торговая система включает несколько сигнализирующих инструментов, то не стоит интегрировать звуковые оповещения более, чем в один из них. Подумайте и определите базовый, наиболее значимый инструмент, и включите аудиооповещения на нём. Обычно этого бывает более, чем достаточно.

При таком подходе терминал потребует от нас внимания только в случае формирования действительно важного события на графиках, которое потенциально способно принести прибыль. Либо напротив — понизить Ваш депозит. А значит стоит просмотреть графики и проанализировать текущую ситуацию. Если же всё спокойно, но сигнал поступает от второстепенного ассистента — важно помнить, что он является лишь вспомогательным. И значит требует подтверждения от основного.

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

Написать ответ Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

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

Источник https://news-hunter.pro/fxindicators/zvukovoj-indikator-foreks-komfortnaya-torgovlya-na-foreks.pro

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *