
Разработка торговой системы на основе осциллятора Чайкина
Введение
Эта статья дополнит нашу серию, в которой мы учимся разрабатывать торговые системы на основе самых популярных технических индикаторов. Сегодня мы рассмотрим торговые системы на основе осциллятора Чайкина (Chaikin Oscillator).
Работу над индикатором снова разобьем на несколько подразделов:
- Определение осциллятора Чайкина
- Стратегия по осциллятору Чайкина
- Схема стратегий по осциллятору Чайкина
- Торговая система по осциллятору Чайкина
- Заключение
По этим темам мы шаг за шагом научимся проектировать и создавать торговую систему с помощью осциллятора Чайкина. Узнаем, что из себя представляет индикатор Chaikin Oscillator, что он измеряет и как его можно рассчитать вручную. Особенности расчета помогут лучше понять саму концепцию, лежащую в основе индикатора. Далее посмотрим, как использовать индикатор, с помощью простых стратегий, основанных на базовой концепции, лежащей в его основе. После этого создадим пошаговый план разработки для каждой стратегии, который поможет разработать торговую систему по каждой стратегии — в разделе "Схема стратегии по осциллятору Чайкина". Далее напишем торговые системы по каждой рассмотренной стратегии. Они будут автоматически генерировать сигналы от индикатора в платформе MetaTrader 5.
Код будем писать на встроенном в платформу языке программирования MQL5 (MetaQuotes Language), а для исполнения будем использовать торговую платформу MetaTrader 5. Если вы не знаете, как загрузить или использовать MetaEditor, почитайте "Как написать MQL5-код в редакторе MetaEditor" в моей более ранней статье.
Теперь приступим к изучению.
Определение осциллятора Чайкина
В этой части попробуем разобраться в концепции, лежащей в основе индикатора "Осциллятор Чайкина". Осциллятор Чайкина (Chaikin Oscillator) — это индикатор импульса, созданный Марком Чайкиным, и, очевидно, индикатор назван в честь своего создателя. Он измеряет импульс линии распределения и накопления, используя формулу схождения-расхождения скользящих средних (MACD). На основе данных об этом импульсе мы можем получить представление о направленных изменениях в линии распределения и накопления.
Чтобы рассчитать осциллятор Чайкина вручную, чтобы лучше понять его концепцию, нужно выполнить следующие шаги:
- Расчет множителя денежного потока = ((закрытие - минимум) - (максимум - закрытие))/(максимум - минимум)
- Расчет объема денежного потока = множитель денежного потока * объем за период
- Расчет линии распределения и накопления (ADL) = предыдущая ADL + текущий объем денежного потока
- Осциллятор Чайкина = (3-периодная EMA от ADL) - (10-периодная EMA от ADL)
На самом деле рассчитывать индикатор вручную, ведь есть готовый индикатор, который идет в стандартной поставке платформы MetaTrader 5. Все, что нужно сделать, это выбрать его из списка доступных индикаторов в платформе.
Для этого в окне терминала MetaTrader 5 выбираем меню "Вставка" --> Индикаторы --> Осциллятор --> Chaikin Oscillator. Это показано на скриншоте:
После этого откроется окно параметров индикатора. Выглядит оно так:
1 - тип объемов.
2 - период быстрой скользящей средней.
3 - период медленной скользящей средней.
4 - тип усреднения скользящей средней.
5 - цвет линии индикатора
6 - тип линии индикатора.
7 - толщина линии индикатора.
Выбираем подходящие параметры индикатора, нажимаем кнопку OK, и индикатор запустится на графике, как показано ниже:
Как видите, индикатор отобразился в дополнительном окне графика. Он рисует линию, которая колеблется выше и ниже уровня нуля.
Стратегия по осциллятору Чайкина
В этой части мы узнаем, как можно использовать осциллятор Чайкина в соответствии с его концепцией. Вся суть технического анализа в том, чтобы научиться правильно применять различные инструменты для принятия более информированных торговых решений. Но не забывайте, что очень важно тщательно тестировать любые инструменты, прежде чем применять на реальном счете. Ведь то, что подходит другим, не обязательно окажется подходящим для вас.
- Стратегия первая: Пересечение по осциллятору Чайкина
Согласно этой стратегии, мы будем получать сигналы на покупку или продажу на основе пересечения текущего значения индикатора и нулевого уровня. Когда индикатор пересекает уровень нуля снизу вверх, это сигнал на покупку. И наоборот, когда значение индикатора опускается ниже нуля, это сигнал на продажу.
Проще говоря:
Текущее значение индикатора > уровень 0 --> сигнал на покупку.
Текущее значение индикатора < уровень 0 --> сигнал на продажу.
- Стратегия вторая: Движение осциллятора Чайкина
По этой стратегии сигнал будем получать от движения кривой индикатора на основе двух последних значений. Когда текущее значение осциллятора больше предыдущего, это сигнал восходящего движения. И наоборот, если текущее значение осциллятора меньше предыдущего, это сигнал нисходящего движения.
Проще говоря:
Текущее значение осциллятора > предыдущего значения --> движение вверх.
Текущее значение осциллятора < предыдущего значения --> движение вниз.
- Стратегия третья: Осциллятор Чайкина — восходящий тренд
В рамках этой стратегии во время восходящего тренда будем определять, сформировалось ли на рынке сильное движение вверх или это медвежья дивергенция. Для этого измеряются значения текущего и предыдущего максимума и текущего и предыдущего показателя осциллятора. Если текущий максимум больше предыдущего максимума, а текущее значение осциллятора Чайкина больше его предыдущего значения, это признак сильного движения вверх во время восходящего тренда. Если же текущий максимум больше предыдущего максимума, а текущее значение осциллятора Чайкина меньше его предыдущего значения, это признак медвежьего расхождения (дивергенции).
Текущий максимум > предыдущего максимума и текущий показатель осциллятора > предыдущего показателя --> Сильное восходящее движение во время восходящего тренда.
Текущий максимум > предыдущего максимума и текущий показатель осциллятора < предыдущего показателя --> медвежье расхождение.
- Стратегия третья: Осциллятор Чайкина — нисходящий тренд
По этой стратегии во время нисходящего тренда будем определять, сформировалось ли на рынке сильное движение вниз или это бычья дивергенция. Для этого измеряются значения текущего и предыдущего минимума и текущего и предыдущего показателя осциллятора. Когда текущий минимум ниже предыдущего минимума, а текущее значение осциллятора ниже предыдущего показателя, это говорит о том, что нисходящее движение во время падающего тренда является сильным. Если же текущий минимум ниже предыдущего максимума, а текущее значение осциллятора Чайкина больше его предыдущего значения, это признак бычьего расхождения (дивергенции).
Текущий минимум < предыдущего минимума и текущий показатель Чайкин < предыдущего показателя --> Сильное движение вниз во время нисходящего тренда.
Текущий минимум < предыдущего минимума, а текущий показатель осциллятора > предыдущего показателя --> бычье расхождение.
Схема стратегий по осциллятору Чайкина
В этой части разработаем пошаговый план создания торговой системы на основе каждой из рассмотренных стратегий. Я считаю, что это очень важный шаг, позволяющий собрать воедино все наши мысли. Давайте приступим.
- Стратегия первая: Пересечение по осциллятору Чайкина
Торговая система, работающая по этой стратегии, должна возвращать определенный комментарий на графике при выполнении определенного условия. Торговая система должна на каждом тике проверять значение осциллятора Чайкина, и когда это значение станет выше нулевого уровня, торговая система будет отображать на графике комментарий с сигналом на покупку и текущим значением осциллятора (каждый комментарий отдельной строкой). В противном случае торговая система должна возвращать комментарий с сигналом на продажу и текущим значением осциллятора Чайкина, когда значение осциллятора Чайкина опустится ниже нулевого уровня.
Вся схема этой стратегии выглядит так:
- Стратегия вторая: Движение осциллятора Чайкина
По условиям этой стратегии торговая система должна на каждом тике проверять два значения и решать, какое из них больше. Эти два значения — текущий и предыдущий показатель осциллятора Чайкина. Если текущее значение больше предыдущего, торговая система должна вернуть комментарий о том, что осциллятор растет, а также текущее и предыдущее значение индикатора (каждое на отдельной линии). Если текущее значение меньше предыдущего, торговая система должна вернуть комментарий о том, что осциллятор снижается, а также текущее и предыдущее значение индикатора (каждое на отдельной линии).
На следующем рисунке показана схема этой стратегии:
- Стратегия третья: Осциллятор Чайкина — восходящий тренд
Торговая система на основе этой стратегии будет на каждом тике проверять четыре значения: текущий и предыдущий максимумы, а также текущее и предыдущее значение осциллятора Чайкина. Торговая система должна проверить эти значения и решить, какое из них значений максимумов и из показателей индикатора больше. Если текущий максимум больше предыдущего, а текущее значение Чайкина больше предыдущего значения индикатора, торговая система будет выводить на график комментарий о сильном движении вверх во время восходящего тренда. Также отдельными строками в комментарии на графике будут выводиться значения максимумов и значения индикатора. А если же текущий максимум больше предыдущего, а текущее значение Чайкина меньше предыдущего значения индикатора, торговая система будет выводить на график комментарий о сформировавшемся медвежьем расхождении. Опять же отдельными строками в комментарии на графике будут выводиться значения максимумов и значения индикатора.
Ниже показана схема этой стратегии:
- Стратегия третья: Осциллятор Чайкина — нисходящий тренд
На основе этой стратегии будет создавать торговую систему, которая будет постоянно на каждом тике проверять четыре значения: текущий и предыдущий минимумы и текущее и предыдущее значения осциллятора Чайкина. Нужно определить, какой из двух минимумов ниже и какой из показателей индикатора меньше. Если оба текущих значения меньше соответствующих предыдущих, система выведет на график комментарий о наличии сильного движения вниз во время нисходящего тренда, и дополнительно отдельными строками все четыре проверяемых значения. Также стратегия может выводить сигнал о бычьем расхождении, если сформировался более низкий минимум, а при этом показатель осциллятора Чайкина вырос. На график будет выведен соответствующий комментарий, о том что сформировалось бычье расхождение, а также четыре проверяемых значения.
Вся схема этой стратегии выглядит так:
Осциллятор Чайкина растет
Торговая система по осциллятору Чайкина
В этой части узнаем, как превратить рассмотренные стратегии в системы для автоматической работы. Для этого будем писать код на MQL5. Начнем с разработки простой программы, которая будет выводить на график комментарий с текущим значением линий осциллятора Чайкина. Она станет основой для всех следующих стратегий. Рассмотрим по шагам, что же включает в себя код.
- Создаем массив для значений осциллятор с помощью double-функции, которая представляет значения с плавающей точкой. Тип double — это один из дробных типов данных.
double chaiArray[];
- Сортируем созданный массив, начиная с текущих данных, для этого будем использовать функцию ArraySetAsSeries — она возвращает true в случае успеха или false в случае неудачи (bool). Параметры функции ArraySetAsSeries:
- Массив[]
- Флаг
ArraySetAsSeries(chaiArray,true);
- Создаем переменную типа integer chaiDef для индикатора с помощью функции iChaikin. Эта функция возвращает хэндл индикатора Chaikin Oscillator. Параметры этой функции:
- symbol — имя символа; если указать "_Symbol", то индикатор будет рассчитываться по символу текущего графика.
- period — таймфрейм для расчета; значение "_Period" означает, что индикатор будет рассчитываться на текущем таймфрейме.
- fast_ma_period — период быстрой скользящей средней, по умолчанию будем использовать 3.
- slow_ma_period — период медленной скользящей средней, будем использовать значение по умолчанию 10.
- ma_method — тип сглаживания скользящей средней; мы будем использовать простое (MODE_SMA).
- applied_volume — тип объемов, используемых для расчета индикатора. Будем использовать тиковые объемы (VOLUME_TICK).
int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);
- Копируем ценовые данные в массив chaiArray, используя функцию CopyBuffer. Она возвращает количество скопированных данных или -1 в случае ошибки. Параметры этой функции:
- indicator_handle — хэндл индикатора, у нас это "chaiDef".
- buffer_num — номер индикаторного буфера, установим 0.
- start_pos — установим позицию начала расчета, укажем 0.
- count — количество данных для копирования, укажем 3.
- buffer[] — целевой массив для копирования, chaiArray.
CopyBuffer(chaiDef,0,0,3,chaiArray);
- Получаем значение индикатора с помощью функции типа double NormalizeDouble. Для этого создаем переменную типа double chaiVal. Параметры функции NormalizeDouble:
- value — нормализуемо число, укажем тут "chaiArray[0]"; 0 означает, что возвращаем текущее значение.
- digits — количество знаков после запятой, установим 6.
int chaiVal = NormalizeDouble(chaiArray[0],6);
- С помощью функции Comment выводим на график комментарий со значением осциллятора Чайкина.
Comment("Chaikin Oscillator Value is ",chaiVal);
Ниже приведен полный код для создания такой стратегии:
//+------------------------------------------------------------------+ //| Simple Chaikin Oscillator.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { double chaiArray[]; ArraySetAsSeries(chaiArray,true); int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK); CopyBuffer(chaiDef,0,0,3,chaiArray); int chaiVal = NormalizeDouble(chaiArray[0],6); Comment("Chaikin Oscillator Value is ",chaiVal); } //+------------------------------------------------------------------+
После компиляции программа советника появится в окне Навигатора в MetaTrader 5 в папке "Experts":
Чтобы запустить советник в платформе, перетаскиваем программу из Навигатора на график, откроется вот такое окно:
Нажимаем OK, и программа (советник) запустится на графике, как показано на рисунке ниже:
Как видите, в правом верхнем углу графика появилась индикация, что на графике работает советник. Если советник запустился и работает, на график должна выводиться информация.
В верхнем левом углу графика появился комментарий с ткущим значением осциллятора Чайкина. Также можем проверить, что это то же самое значение, которое показывает встроенный индикатор в платформе MetaTrader 5. Для этого запустим на графике нашего созданного советника и стандартный индикатор. При этом обе программы будут показывать одинаковые значения, например, как показано на скриншоте ниже:
В правом углу графика индикация, что советник прикреплен к графику, а в левом углу значения, сгенерированные экспертом — эти значения совпадают с показателями самого индикатора в дополнительном окне.
- Стратегия первая: Пересечение по осциллятору Чайкина
Полный код торговой системы, работающей по этой стратегии, выглядит так.
//+------------------------------------------------------------------+ //| Chaikin Oscillator Crossover.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { double chaiArray[]; ArraySetAsSeries(chaiArray,true); int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK); CopyBuffer(chaiDef,0,0,3,chaiArray); int chaiVal = NormalizeDouble(chaiArray[0],6); if(chaiVal>0) { Comment("Buy signal","\n","Chaikin Oscillator Value is ",chaiVal); } if(chaiVal<0) { Comment("Sell signal","\n","Chaikin Oscillator Value is ",chaiVal); } } //+------------------------------------------------------------------+
Отличия в этом коде:
Условия пересечения индикатора Chaikin Oscillator:
Сигнал на покупку:
if(chaiVal>0) { Comment("Buy signal","\n","Chaikin Oscillator Value is ",chaiVal); }
Сигнал на продажу:
if(chaiVal<0) { Comment("Sell signal","\n","Chaikin Oscillator Value is ",chaiVal); }
После компиляции программа советника появится в окне Навигатора в MetaTrader 5:
Перетаскиваем нашу программу из Навигатора на график. При этом откроется вот такое окно:
Нажимаем OK, и программа (советник) запустится на графике, как показано на рисунке ниже:
Как видите, в правом верхнем углу графика появилась индикация, что на графике работает советник. Советник запущен и начал генерировать сигналы Ниже показан пример сигналов.
Сигнал на покупку:
В верхнем левом углу графика видно, что сигнал на покупку был сгенерирован, когда значение осциллятора Чайкина пересекло нулевой уровень снизу вверх.
Сигнал на продажу:
В верхнем левом углу графика видно, что сигнал на продажу был сформирован, когда значение индикатора опустилось ниже ноля.
- Стратегия вторая: Движение осциллятора Чайкина
Полный код торговой системы, работающей по этой стратегии, выглядит так:
//+------------------------------------------------------------------+ //| Chaikin Oscillator Movement.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { double chaiArray[]; ArraySetAsSeries(chaiArray,true); int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK); CopyBuffer(chaiDef,0,0,3,chaiArray); int chaiCurrentVal = NormalizeDouble(chaiArray[0],6); int chaiPrevVal = NormalizeDouble(chaiArray[1],6); if(chaiCurrentVal>chaiPrevVal) { Comment("Chaikin Oscillator is rising","\n", "Chaikin Oscillator Cuurent Value is ",chaiCurrentVal,"\n", "Chaikin Oscillator Previous Value is ",chaiPrevVal); } if(chaiCurrentVal<chaiPrevVal) { Comment("Chaikin Oscillator is declining","\n", "Chaikin Oscillator Cuurent Value is ",chaiCurrentVal,"\n", "Chaikin Oscillator Previous Value is ",chaiPrevVal); } } //+------------------------------------------------------------------+
Какие отличия появились в этом коде:
Анализируем текущее и предыдущее значение индикатора.
int chaiCurrentVal = NormalizeDouble(chaiArray[0],6); int chaiPrevVal = NormalizeDouble(chaiArray[1],6);
Условия стратегии.
При росте
if(chaiCurrentVal>chaiPrevVal) { Comment("Chaikin Oscillator is rising","\n", "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n", "Chaikin Oscillator Previous Value is ",chaiPrevVal); }
При падении
if(chaiCurrentVal<chaiPrevVal) { Comment("Chaikin Oscillator is declining","\n", "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n", "Chaikin Oscillator Previous Value is ",chaiPrevVal); }
После этого компилируем код советника, и он появляется в окне Навигатора в терминале:
Запускаем двойным кликом на файле или перетаскиваем на график. После этого снова появится окно советника.
Нажимаем OK, и программа (советник) запустится на графике, как показано на рисунке ниже:
Пример сигналов, сгенерированных при тестировании этой стратегии.
Если индикатор растет + текущие значения в окне данных:
Если индикатор растет + предыдущие значения в окне данных:
На скриншоте видно, что в левом верхнем углу графика отображается комментарий из трех строк:
- Chaikin Oscillator is rising (осциллятор растет)
- Текущее значение Chaikin Oscillator
- Предыдущее значение Chaikin Oscillator
Рассмотрим другой сценарий, когда индикатор снижается
Также падает, но в окне данных отображается предыдущее значение
Снова видно, что в левом верхнем углу графика отобразился комментарий:
Chaikin Oscillator is declining.
Chaikin Oscillator current value.
Chaikin Oscillator previous value.
- Стратегия третья: Осциллятор Чайкина — восходящий тренд
Полный код торговой системы, работающей по этой стратегии, выглядит так:
//+------------------------------------------------------------------+ //| Chaikin Oscillator - Uptrend.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { double chaiArray[]; MqlRates priceArray[]; ArraySetAsSeries(chaiArray,true); int Data=CopyRates(_Symbol,_Period,0,3,priceArray); int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK); CopyBuffer(chaiDef,0,0,3,chaiArray); int chaiCurrentVal = NormalizeDouble(chaiArray[0],6); int chaiPrevVal = NormalizeDouble(chaiArray[1],6); double currentHighVal=NormalizeDouble(priceArray[2].high,6); double prevHighVal=NormalizeDouble(priceArray[1].high,6); if(currentHighVal>prevHighVal&&chaiCurrentVal>chaiPrevVal) { Comment("Strong Up Move During The Uptrend","\n", "Current High Value is: ",currentHighVal,"\n", "Previous High Value is: ",prevHighVal,"\n", "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n", "Chaikin Oscillator Previous Value is ",chaiPrevVal); } if(currentHighVal>prevHighVal&&chaiCurrentVal<chaiPrevVal) { Comment("Bearish Divergence","\n", "Current High Value is: ",currentHighVal,"\n", "Previous High Value is: ",prevHighVal,"\n", "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n", "Chaikin Oscillator Previous Value is ",chaiPrevVal); } } //+------------------------------------------------------------------+
Какие отличия появились в этом коде:
Создаем два массива: для ChaiArray и массива цен с помощью функции MqlRates, которая хранит информацию о ценах, объемах и спреде.
ArraySetAsSeries(chaiArray,true); int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
Определяем значения текущего и предыдущего показателя осциллятора Чайкина.
int chaiCurrentVal = NormalizeDouble(chaiArray[0],6); int chaiPrevVal = NormalizeDouble(chaiArray[1],6);
Определение значений текущего и предыдущего максимумов.
double currentHighVal=NormalizeDouble(priceArray[2].high,6); double prevHighVal=NormalizeDouble(priceArray[1].high,6);
Условия данной стратегии:
В случае сильного движения во время восходящего тренда:
if(currentHighVal>prevHighVal&&chaiCurrentVal>chaiPrevVal) { Comment("Strong Up Move During The Uptrend","\n", "Current High Value is: ",currentHighVal,"\n", "Previous High Value is: ",prevHighVal,"\n", "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n", "Chaikin Oscillator Previous Value is ",chaiPrevVal); }
В случае медвежьей дивергенции:
if(currentHighVal>prevHighVal&&chaiCurrentVal<chaiPrevVal) { Comment("Bearish Divergence","\n", "Current High Value is: ",currentHighVal,"\n", "Previous High Value is: ",prevHighVal,"\n", "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n", "Chaikin Oscillator Previous Value is ",chaiPrevVal); }
После компиляции программа советника появится в окне Навигатора в MetaTrader 5:
Перетаскиваем нашу программу из Навигатора на график. При этом откроется вот такое окно:
Нажимаем OK, и программа (советник) запустится на графике, как показано на рисунке ниже:
Примеры сигналов, сгенерированных при тестировании этой стратегии.
В случае сильного движения + текущие данные:
В случае сильного движения + предыдущие данные:
Теперь видно, что комментарий на графике уже состоит из пяти строк:
- A strong up move during the uptrend (сильное движение вверх при растущем тренде)
- Текущий максимум
- Предыдущий максимум
- Текущее значение Chaikin
- Предыдущее значение Chaikin
Еще один вариант сигнала от такое стратегии — медвежья дивергенция. Вот примеры таких сигналов:
Медвежья дивергенция и предыдущие данные
Снова на графиках комментарии из пяти строк:
Bearish Divergence.
Текущий максимум
Предыдущий максимум
Текущее значение Chaikin
Текущее значение Chaikin
- Стратегия третья: Осциллятор Чайкина — нисходящий тренд
Полный код торговой системы, работающей по этой стратегии, выглядит так:
//+------------------------------------------------------------------+ //| Chaikin Oscillator - Downtrend.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { double chaiArray[]; MqlRates priceArray[]; ArraySetAsSeries(chaiArray,true); int Data=CopyRates(_Symbol,_Period,0,3,priceArray); int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK); CopyBuffer(chaiDef,0,0,3,chaiArray); int chaiCurrentVal = NormalizeDouble(chaiArray[0],6); int chaiPrevVal = NormalizeDouble(chaiArray[1],6); double currentLowVal=NormalizeDouble(priceArray[2].low,6); double prevLowVal=NormalizeDouble(priceArray[1].low,6); if(currentLowVal<prevLowVal&&chaiCurrentVal<chaiPrevVal) { Comment("Strong Down Move During The Downtrend","\n", "Current Low Value is: ",currentLowVal,"\n", "Previous Low Value is: ",prevLowVal,"\n", "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n", "Chaikin Oscillator Previous Value is ",chaiPrevVal); } if(currentLowVal<prevLowVal&&chaiCurrentVal>chaiPrevVal) { Comment("Bullish Divergence","\n", "Current Low Value is: ",currentLowVal,"\n", "Previous Low Value is: ",prevLowVal,"\n", "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n", "Chaikin Oscillator Previous Value is ",chaiPrevVal); } } //+------------------------------------------------------------------+
Этот код отличается условиями стратегии.
Если есть сильное движение вниз во время нисходящего тренда,
if(currentLowVal<prevLowVal&&chaiCurrentVal<chaiPrevVal) { Comment("Strong Down Move During The Downtrend","\n", "Current Low Value is: ",currentLowVal,"\n", "Previous Low Value is: ",prevLowVal,"\n", "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n", "Chaikin Oscillator Previous Value is ",chaiPrevVal); }
В случае бычьей дивергенции:
if(currentLowVal<prevLowVal&&chaiCurrentVal>chaiPrevVal) { Comment("Bullish Divergence","\n", "Current Low Value is: ",currentLowVal,"\n", "Previous Low Value is: ",prevLowVal,"\n", "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n", "Chaikin Oscillator Previous Value is ",chaiPrevVal); }
После компиляции программа советника появится в окне Навигатора в MetaTrader 5:
Запускаем двойным кликом на файле или перетаскиваем на график. После этого снова появится окно советника.
Нажимаем OK, и программа (советник) запустится на графике, как показано на рисунке ниже:
На скриншотах ниже показаны примеры сигналов, сгенерированных при тестировании на основе этой стратегии.
В случае сильного движения вниз во время нисходящего тренда + текущие данные,
Сильное движение вниз + предыдущие данные
Снова на графиках комментарии из пяти строк:
- Strong down move during the downtrend (сильное движение вниз)
- Текущий минимум
- Предыдущий минимум
- Текущее значение Chaikin
- Предыдущее значение Chaikin
Еще один вариант сигнала от такое стратегии — бычья дивергенция. Вот примеры таких сигналов:
Бычье расхождение и текущие данные
Бычье расхождение и предыдущие данные
Снова на графиках комментарии из пяти строк:
- Bullish divergence
- Текущий минимум
- Предыдущий минимум
- Текущее значение Chaikin
- Предыдущее значение Chaikin
Заключение
Итак, в этой статье мы в деталях изучали индикатор "Осциллятор Чайкина". Мы узнали, что он из себя представляет, что он измеряет и как можно рассчитать его вручную. Кроме того, мы посмотрели, как его использовать, с помощью простых стратегий, основанных на его базовой концепции. Мы изучили следующие стратегии:
- Пересечение по Chaikin Oscillator: сигналы на покупку и продажу генерируются при пересечении индикатором нулевого уровня.
- Движение по Chaikin Oscillator: анализ значений индикатора и вывод о его росте или снижении.
- Chaikin Oscillator - Тренд вверх: подтверждение сильного сигнала во время восходящего тренда или медвежье расхождение.
- Chaikin Oscillator - Тренд вверх: подтверждение сильного сигнала во время нисходящего тренда или бычье расхождение.
Мы разработали пошаговый план создания торговой системы на основе каждой из рассмотренных стратегий. Это очень важный шаг, позволяющий собрать воедино все наши мысли. После этого познакомились с разработкой торговых систем — создали советник на MQL5 по каждой стратегии, получили программу, которая может работать в торговой платформе MetaTrader 5, увидели примеры сгенерированных сигналов по этим стратегиям.
Еще раз повторюсь, что очень важно тщательно тестировать, прежде чем применять из на реальном счете. Не существует стратегий, которые подходят абсолютно всем. Пробуйте самостоятельно применять на практике полученные знания, пробуйте программировать, так как практика является важным фактором любого процесса обучения. Если вам понравилась эта статья, если вы считаете ее полезной, почитайте мои предыдущие статьи из этой же серии, чтобы узнать, как разработать торговую систему на основе популярных технических индикаторов.
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/11242





- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования