English 中文 Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
preview
Разработка торговой системы на основе осциллятора Чайкина

Разработка торговой системы на основе осциллятора Чайкина

MetaTrader 5Трейдинг | 29 августа 2022, 08:28
2 027 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Введение

Эта статья дополнит нашу серию, в которой мы учимся разрабатывать торговые системы на основе самых популярных технических индикаторов. Сегодня мы рассмотрим торговые системы на основе осциллятора Чайкина (Chaikin Oscillator).

Работу над индикатором снова разобьем на несколько подразделов:

  1. Определение осциллятора Чайкина
  2. Стратегия по осциллятору Чайкина
  3. Схема стратегий по осциллятору Чайкина
  4. Торговая система по осциллятору Чайкина
  5. Заключение

По этим темам мы шаг за шагом научимся проектировать и создавать торговую систему с помощью осциллятора Чайкина. Узнаем, что из себя представляет индикатор Chaikin Oscillator, что он измеряет и как его можно рассчитать вручную. Особенности расчета помогут лучше понять саму концепцию, лежащую в основе индикатора. Далее посмотрим, как использовать индикатор, с помощью простых стратегий, основанных на базовой концепции, лежащей в его основе. После этого создадим пошаговый план разработки для каждой стратегии, который поможет разработать торговую систему по каждой стратегии — в разделе "Схема стратегии по осциллятору Чайкина". Далее напишем торговые системы по каждой рассмотренной стратегии. Они будут автоматически генерировать сигналы от индикатора в платформе MetaTrader 5.

Код будем писать на встроенном в платформу языке программирования MQL5 (MetaQuotes Language), а для исполнения будем использовать торговую платформу MetaTrader 5. Если вы не знаете, как загрузить или использовать MetaEditor, почитайте "Как написать MQL5-код в редакторе MetaEditor" в моей более ранней статье.

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

Теперь приступим к изучению.


Определение осциллятора Чайкина

В этой части попробуем разобраться в концепции, лежащей в основе индикатора "Осциллятор Чайкина". Осциллятор Чайкина (Chaikin Oscillator) — это индикатор импульса, созданный Марком Чайкиным, и, очевидно, индикатор назван в честь своего создателя. Он измеряет импульс линии распределения и накопления, используя формулу схождения-расхождения скользящих средних (MACD). На основе данных об этом импульсе мы можем получить представление о направленных изменениях в линии распределения и накопления.

Чтобы рассчитать осциллятор Чайкина вручную, чтобы лучше понять его концепцию, нужно выполнить следующие шаги:

  1. Расчет множителя денежного потока = ((закрытие - минимум) - (максимум - закрытие))/(максимум - минимум)
  2. Расчет объема денежного потока = множитель денежного потока * объем за период
  3. Расчет линии распределения и накопления (ADL) = предыдущая ADL + текущий объем денежного потока
  4. Осциллятор Чайкина = (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:

Chaikin в Навигаторе 1

Перетаскиваем нашу программу из Навигатора на график. При этом откроется вот такое окно:

Окно стратегии по пересечению Chaikin Oscillator

Нажимаем OK, и программа (советник) запустится на графике, как показано на рисунке ниже:

Советник по пересечению Chaikin Oscillator на графике

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

Сигнал на покупку:

Стратегия по пересечению Chaikin Oscillator - сигнал на покупку

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

Сигнал на продажу:

Стратегия по пересечению Chaikin Oscillator - сигнал на продажу

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

  • Стратегия вторая: Движение осциллятора Чайкина

Полный код торговой системы, работающей по этой стратегии, выглядит так:

//+------------------------------------------------------------------+
//|                                  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);
     }

После этого компилируем код советника, и он появляется в окне Навигатора в терминале:

 Chaikin Oscillator в Навигаторе 2

Запускаем двойным кликом на файле или перетаскиваем на график. После этого снова появится окно советника.

Окно стратегии Chaikin Oscillator Movement

Нажимаем OK, и программа (советник) запустится на графике, как показано на рисунке ниже:

Стратегия Chaikin Oscillator Movement на графике

Пример сигналов, сгенерированных при тестировании этой стратегии.

Если индикатор растет + текущие значения в окне данных:

Chaikin Oscillator Movement - сигнал о растущих показателях индикатора - тек значение

Если индикатор растет + предыдущие значения в окне данных:

Chaikin Oscillator Movement - сигнал о растущих показателях индикатора - пред значение

На скриншоте видно, что в левом верхнем углу графика отображается комментарий из трех строк:

  • Chaikin Oscillator is rising (осциллятор растет)
  • Текущее значение Chaikin Oscillator
  • Предыдущее значение Chaikin Oscillator

Рассмотрим другой сценарий, когда индикатор снижается

Chaikin Oscillator Movement - сигнал о падающих показателях индикатора - тек значение

Также падает, но в окне данных отображается предыдущее значение

Chaikin Oscillator Movement - сигнал о падающих показателях индикатора - пред значение

Снова видно, что в левом верхнем углу графика отобразился комментарий:

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:

 Chaikin Oscillator в Навигаторе 3

Перетаскиваем нашу программу из Навигатора на график. При этом откроется вот такое окно:

Окно стратегии по Chaikin Oscillator - тренд вверх

Нажимаем OK, и программа (советник) запустится на графике, как показано на рисунке ниже:

Система по Chaikin Oscillator - тренд вверх - на графике

Примеры сигналов, сгенерированных при тестировании этой стратегии.

В случае сильного движения + текущие данные:

Chaikin Oscillator - тренд вверх - сильный - текущие данные

В случае сильного движения + предыдущие данные:

Chaikin Oscillator - тренд вверх - сильный - предыдущие данные

Теперь видно, что комментарий на графике уже состоит из пяти строк:

  •  A strong up move during the uptrend (сильное движение вверх при растущем тренде)
  • Текущий максимум
  • Предыдущий максимум
  • Текущее значение Chaikin
  • Предыдущее значение Chaikin

Еще один вариант сигнала от такое стратегии — медвежья дивергенция. Вот примеры таких сигналов:

Chaikin Oscillator - тренд вверх - дивергенция - текущие данные

Медвежья дивергенция и предыдущие данные

Chaikin Oscillator - тренд вверх - дивергенция - предыдущие данные

Снова на графиках комментарии из пяти строк:

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:

 Chaikin Oscillator в Навигаторе 4

Запускаем двойным кликом на файле или перетаскиваем на график. После этого снова появится окно советника.

Стратегия по осциллятору Чайкина в нисходящем тренде - окно

Нажимаем OK, и программа (советник) запустится на графике, как показано на рисунке ниже:

Стратегия по осциллятору Чайкина в нисходящем тренде на графике

На скриншотах ниже показаны примеры сигналов, сгенерированных при тестировании на основе этой стратегии.

В случае сильного движения вниз во время нисходящего тренда + текущие данные,

Chaikin Oscillator - тренд вниз - сильный сигнал - текущие данные

Сильное движение вниз + предыдущие данные

Chaikin Oscillator - тренд вниз - сильный - предыдущие данные

Снова на графиках комментарии из пяти строк:

  • Strong down move during the downtrend (сильное движение вниз)
  • Текущий минимум
  • Предыдущий минимум
  • Текущее значение Chaikin
  • Предыдущее значение Chaikin

Еще один вариант сигнала от такое стратегии — бычья дивергенция. Вот примеры таких сигналов:

Бычье расхождение и текущие данные

Chaikin Oscillator - тренд вниз - дивергенция - текущие данные

Бычье расхождение и предыдущие данные

Chaikin Oscillator - тренд вниз - расхождение - предыдущие данные

 

Снова на графиках комментарии из пяти строк:

  • Bullish divergence
  • Текущий минимум
  • Предыдущий минимум
  • Текущее значение Chaikin
  • Предыдущее значение Chaikin


Заключение

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

  • Пересечение по Chaikin Oscillator: сигналы на покупку и продажу генерируются при пересечении индикатором нулевого уровня.
  • Движение по Chaikin Oscillator: анализ значений индикатора и вывод о его росте или снижении.
  • Chaikin Oscillator - Тренд вверх: подтверждение сильного сигнала во время восходящего тренда или медвежье расхождение.
  • Chaikin Oscillator - Тренд вверх: подтверждение сильного сигнала во время нисходящего тренда или бычье расхождение.

Мы разработали пошаговый план создания торговой системы на основе каждой из рассмотренных стратегий. Это очень важный шаг, позволяющий собрать воедино все наши мысли. После этого познакомились с разработкой торговых систем — создали советник на MQL5 по каждой стратегии, получили программу, которая может работать в торговой платформе MetaTrader 5, увидели примеры сгенерированных сигналов по этим стратегиям.

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

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/11242

Нейросети — это просто (Часть 27): Глубокое Q-обучение (DQN) Нейросети — это просто (Часть 27): Глубокое Q-обучение (DQN)
Продолжаем изучение обучения с подкреплением. И в этой статье мы познакомимся с методом глубокого Q-обучения. Использование данного метода позволило команде DeepMind создать модель, способную превзойти человека при игре в компьютерные игры Atari. Думаю, будет полезно оценить возможности подобной технологии для решения задач трейдинга.
Машинное обучение и Data Science (Часть 06): Градиентный спуск Машинное обучение и Data Science (Часть 06): Градиентный спуск
Градиентный спуск играет важную роль в обучении нейронных сетей и различных алгоритмов машинного обучения — это быстрый и умный алгоритм. Однако несмотря на его впечатляющую работу, многие специалисты по данным все еще неправильно его понимают. Давайте в этой статье посмотрим, о чем идет речь.
Разработка торговой системы на основе индикатора Force Index Разработка торговой системы на основе индикатора Force Index
Это новая статья из серии, в которой мы учимся создавать торговые системы на основе популярных технических индикаторов. На этот раз будем изучать индикатор Индекса силы (Force Index) и будем учиться создавать на его основе торговые системы.
DoEasy. Элементы управления (Часть 16): WinForms-объект TabControl — несколько рядов заголовков вкладок, режим растягивания заголовков под размеры контейнера DoEasy. Элементы управления (Часть 16): WinForms-объект TabControl — несколько рядов заголовков вкладок, режим растягивания заголовков под размеры контейнера
В статье продолжим разработку элемента управления TabControl, и реализуем расположение заголовков вкладок со всех четырёх сторон элемента для всех режимов задания размера заголовков: "Normal", "Fixed" и "Fill To Right".