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

Разработка торговой системы на основе Accelerator Oscillator

MetaTrader 5Трейдинг | 2 декабря 2022, 13:23
1 644 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Введение

Представляю вашему вниманию новую статью из серии, в которой мы учимся создавать торговые системы на основе популярных технических индикаторов. В этой статье познакомимся с еще одним техническим инструментом, который при правильном использовании может улучшить наши торговые результаты. Мы будем работать с индикатором Accelerator Oscillator (AC) — изучим в деталях, что он из себя представляет, что он измеряет и как его рассчитать. На примере простых стратегий посмотрим, как его использовать. Также создадим собственные торговые система на основе рассмотренных стратегий.

Следующие темы помогут тщательно изучить этот индикатор:

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

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

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


Определение индикатора Accelerator Oscillator

Accelerator Oscillator (AC) — индикатор импульса, разработанный Биллом Вильямсом. Он измеряет изменение импульса на рынке. Уменьшение импульса восходящего тренда может означать уменьшение интереса к покупке финансового инструмента. За этим может следовать изменение направления движущей силы на противоположное, после чего направление самого движения сменяется на продажу. Соответственно, если импульс уменьшается на нисходящем тренде, это может означать снижение интереса к продаже финансового инструмента, за чем может последовать рост силы покупателей. Это опережающий индикатор, поскольку его изменения происходят раньше, чем изменяется цена.

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

Далее посмотрим на формулу расчета индикатора — она позволит вычислить значение вручную:

AC = AO - SMA (AO, 5)

где:

AC — Accelerator Oscillator.

AO — индикатор Awesome Oscillator, о котором мы говорили в предыдущей статье.

SMA — простая скользящая средняя.

5 — период SMA.

Индикатор AO из этой формулы рассчитывается так:

MEDIAN PRICE = (HIGH + LOW) / 2 

AO = SMA (MEDIAN PRICE, 5) - SMA (MEDIAN PRICE, 34)

К счастью, сейчас не нужно рассчитывать индикатор вручную, поскольку уже есть готовый к использованию индикатор в торговом терминале MetaTrader 5. Все, что нужно сделать, это выбрать его из списка индикаторов. Откройте терминал, выберите меню "Вставка" --> Индикаторы --> Bill Williams --> Accelerator Oscillator

 Запуск встроенного индикатора AC

После этого откроется окно параметров индикатора, в котором можно выставить желаемые настройки. Выглядит окно так:

 Параметры индикатора AC

1 — цвет для показателей вверх

2 — толщина гистограммы индикатора

3 — цвет для показателей вниз

Выбираем подходящие параметры индикатора, нажимаем кнопку OK, и индикатор запустится на графике, как показано ниже:

 Индикатор AC на графике

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

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


Стратегии по индикатору Accelerator Oscillator

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

    Стратегия первая: пересечение AC и нулевого уровня

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

      Если схематично:

      AC > Уровень нуля --> Бычий сигнал

      AC < Уровень нуля --> Медвежий сигнал

        Стратегия вторая: Сила АC

          Согласно этой стратегии, мы будем получать сигнал о силе движения индикатора Accelerator Oscillator на основе сравнения текущего значения АC с максимальным и минимальным значением за предыдущие десять показателей. Сигнал генерируется на основе положения этих значений относительно друг друга. Если текущее значение AC больше максимального значения, это будет сигналом силы. В противоположном случае, если текущее значение AC ниже минимального из 10 последних показателей, это сигнал слабого движения.

          Если схематично:

          AC > Максимум AC --> показатель AC сильный

          AC < Минимум AC --> показатель AC слабый

            Стратегия третья: AC и MA

              В этой стратегии мы будем получать сигнал на покупку или продажу на основе анализа пяти значений: цена закрытия, 50-периодная экспоненциальная скользящая средняя, текущее значение индикатора АC, максимальное и минимальное значения за предыдущие десять показателей. Сигнал генерируется на основе положения этих значений относительно друг друга. Если текущее значение АC выше максимального значения, а цена закрытия выше 50-периодной EMA, это будет сигналом на покупку. В противоположном сценарии, если текущее значение АC ниже минимального значения, а цена закрытия ниже 50-периодной EMA, это будет сигналом на покупку.

              Если изобразить схематично:

              AC > Максимум AC и Цена закрытия > 50-периодная EMA --> Покупка

              AC < Минимум AC и Цена закрытия < 50-периодная EMA --> Продажа 

              Схемы стратегий по Accelerator Oscillator

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

                Стратегия первая: пересечение AC и нулевого уровня

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

                  • Бычий
                  • Значение AC

                  Если же значение индикатора AC ниже нулевого уровня, торговая система будет выводить на график комментарий с медвежьим сигналом и значением индикатора:

                  • Медвежий
                  • Значение AC

                  Пошаговая схема для разработки торговой системы по этой стратегии:

                   Схема разработки системы по стратегии AC Zero Crossover

                    Стратегия вторая: Сила АC

                      В рамках этой стратегии создадим торговую систему, которая сможет генерировать сигналы о силе движения AC, постоянно сравнивая три значения: текущий показатель АC, максимальный и минимальный показатель индикатора среди предыдущих десяти значений. Будем сравнивать эти значения и определять их положение относительно друг друга. Если текущее значение AC больше максимального из десяти показателей, комментарий на графике будет содержать сигнал о сильном движении и дополнительные значения:

                      • Показатель AC сильный
                      • Значение AC
                      • Максимум AC
                      • Минимум AC

                      Если же значение индикатора AC ниже минимального значения, торговая система будет выводить на график комментарий с сигналом о слабом движении и значениями индикатора:

                      • Показатель AC слабый
                      • Значение AC
                      • Максимум AC
                      • Минимум AC

                      Пошаговая схема для разработки торговой системы по этой стратегии:

                       Схема стратегии силы AC

                        Стратегия третья: AC и MA

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

                          • Покупка
                          • Цена закрытия
                          • Значение AC
                          • Максимум AC
                          • Минимум AC
                          • Значение MA

                          Если же текущее значение AC ниже минимума индикатора, а цена закрытия ниже скользящей средней, торговая система должна генерировать сигнал и выводить его на график в виде комментария со следующими значениями:

                          • Продажа
                          • Цена закрытия
                          • Значение AC
                          • Максимум AC
                          • Минимум AC
                          • Значение MA

                          Пошаговая схема для разработки торговой системы по этой стратегии:

                           AC _ MA Strategy blueprint

                          Торговые системы на основе Accelerator Oscillator

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

                          Создаем массив acArray с помощью функции "double":

                          double acArray[];

                          Далее идет функция ArraySetAsSeries — она возвращает true в случае успеха или false в случае неудачи (bool). Параметры функции:

                          • array[] — массив, у нас это acArray.
                          • flag — для указания направления индексации в массиве установим флаг "true".
                          ArraySetAsSeries(acArray,true);

                          Определяем индикатор AC с помощью функции iAC, которая возвращает хэндл индикатора. Параметры функции:

                          • symbol — символ, на котором рассчитывается индикатор, мы используем текущий (_Symbol).
                          • period — период расчета индикатора; используем текущий период (_period).
                          int acDef = iAC(_Symbol,_Period);

                          Получаем данные из буфера индикатора AC с помощью функции CopyBuffer. Параметры функции: 

                          • indicator_handle — стандартный хэндл индикатора acDef
                          • buffer_num — номер индикаторного буфера, установим 0
                          • start_pos — установим позицию начала расчета, укажем 0
                          • count — количество данных для копирования, укажем 3
                          • buffer[] — определяем ценовой массив для копирования, у нас это acArray
                          CopyBuffer(acDef,0,0,3,acArray);

                          Определяем значение AC — для него создаем double-переменную acVal, нормализуем с помощью функции NormalizeDouble. Параметры функции Normalizedouble:

                          • value — нормализуемое число Используем acArray[0].
                          • digits — количество знаков после запятой. В нашем примере это будет 7.
                          double acVal = NormalizeDouble(acArray[0],7);

                          С помощью функции Comment генерируем комментарий к графику с текущим значением AC:

                          Comment("AC Value is ",acVal);

                          Ниже приведен полный код для создания такой стратегии:

                          //+------------------------------------------------------------------+
                          //|                                                    Simple AC.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 acArray[];
                             ArraySetAsSeries(acArray,true);
                             int acDef = iAC(_Symbol,_Period);
                             CopyBuffer(acDef,0,0,3,acArray);
                             double acVal = NormalizeDouble(acArray[0],7);
                             Comment("AC Value is ",acVal);
                            }
                          //+------------------------------------------------------------------+
                          

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

                           Советник Simple AC в Навигаторе в терминале

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

                           Окно советника Simple AC

                           Советник Simple AC на графике

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

                           Сигнал советника Simple AC

                          Как видите, в верхнем левом углу графика у нас есть комментарий с текущим значением AC.

                            Стратегия первая: пересечение AC и нулевого уровня

                              Давайте сразу посмотрим на полный код для создания такой стратегии:

                              //+------------------------------------------------------------------+
                              //|                                            AC Zero 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 acArray[];
                                 ArraySetAsSeries(acArray,true);
                                 int acDef = iAC(_Symbol,_Period);
                                 CopyBuffer(acDef,0,0,3,acArray);
                                 double acVal = NormalizeDouble(acArray[0],7);
                                 if(acVal > 0)
                                   {
                                    Comment("Bullish","\n"
                                            "AC Value is ",acVal);
                                   }
                                 if(acVal < 0)
                                   {
                                    Comment("Bearish","\n"
                                            "AC Value is ",acVal);
                                   }
                                }
                              //+------------------------------------------------------------------+
                              

                              Отличия в этом коде:

                              Условия стратегии.

                              Пример бычьего сигнала:

                                 if(acVal > 0)
                                   {
                                    Comment("Bullish","\n"
                                            "AC Value is ",acVal);
                                   }
                              

                              Пример медвежьего:

                                 if(acVal < 0)
                                   {
                                    Comment("Bearish","\n"
                                            "AC Value is ",acVal);
                                   }
                              

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

                               Советник AC Zero Crossover на графике

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

                              В случае бычьего сигнала:

                               Советник AC Zero Crossover - бычий сигнал

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

                              • Бычий
                              • Значение AC

                              В случае медвежьего сигнала:

                               Советник AC Zero Crossover - медвежий сигнал

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

                              • Медвежий
                              • Значение AC
                                Стратегия вторая: Сила АC

                                  Давайте сразу посмотрим на полный код для создания такой стратегии:

                                  //+------------------------------------------------------------------+
                                  //|                                                  AC Strength.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 acArray[];
                                     ArraySetAsSeries(acArray,true);
                                     int acDef = iAC(_Symbol,_Period);
                                     CopyBuffer(acDef,0,0,11,acArray);
                                     double acCurrVal = NormalizeDouble(acArray[0],7);
                                     int acMaxArray = ArrayMaximum(acArray,1,WHOLE_ARRAY);
                                     int acMinArray = ArrayMinimum(acArray,1,WHOLE_ARRAY);
                                     double acMaxVal = NormalizeDouble(acArray[acMaxArray],7);
                                     double acMinVal = NormalizeDouble(acArray[acMinArray],7);
                                     if(acCurrVal>acMaxVal)
                                       {
                                        Comment("AC is strong ","\n",
                                                "AC Value is ",acCurrVal,"\n",
                                                "AC Max is ",acMaxVal,"\n",
                                                "AC Min is ",acMinVal);
                                       }
                                     if(acCurrVal<acMinVal)
                                       {
                                        Comment("AC is weak ","\n",
                                                "AC Value is ",acCurrVal,"\n",
                                                "AC Max is ",acMaxVal,"\n",
                                                "AC Min is ",acMinVal);
                                       }
                                    }
                                  //+------------------------------------------------------------------+
                                  

                                  Отличия в этом коде.

                                  Определяем текущее значение AC:

                                  double acCurrVal = NormalizeDouble(acArray[0],7);

                                  Определяем максимальное значение среди всех элементов массива AC с помощью функции ArrayMaximum, которая и возвращает найденное максимальное значение. Параметры функции:

                                  • array[] — массив, у нас это acArray.
                                  • start — точка начала поиска. Установим этот параметр равным 1.
                                  • count — общее количество элементов из массива для проверки. Для этого параметра установим значение WHOLE_ARRAY, чтобы искать во всем массиве.
                                  int acMaxArray = ArrayMaximum(acArray,1,WHOLE_ARRAY);

                                  Определяем минимальное значение среди всех элементов массива AC с помощью функции ArrayMinimum, которая возвращает найденный минимум. Параметры функции:

                                  • array[] — массив, у нас это acArray.
                                  • start — точка начала поиска. Установим этот параметр равным 1.
                                  • count — общее количество элементов из массива для проверки. Для этого параметра установим значение WHOLE_ARRAY, чтобы искать во всем массиве.
                                  int acMinArray = ArrayMinimum(acArray,1,WHOLE_ARRAY);

                                  Нормализуем значения максимума и минимума с помощью функции NormalizeDouble.

                                     double acMaxVal = NormalizeDouble(acArray[acMaxArray],7);
                                     double acMinVal = NormalizeDouble(acArray[acMinArray],7);
                                  

                                  Условия стратегии.

                                  В случае сильного сигнала:

                                     if(acCurrVal>acMaxVal)
                                       {
                                        Comment("AC is strong ","\n",
                                                "AC Value is ",acCurrVal,"\n",
                                                "AC Max is ",acMaxVal,"\n",
                                                "AC Min is ",acMinVal);
                                       }
                                  

                                  В случае слабого сигнала:

                                     if(acCurrVal<acMinVal)
                                       {
                                        Comment("AC is weak ","\n",
                                                "AC Value is ",acCurrVal,"\n",
                                                "AC Max is ",acMaxVal,"\n",
                                                "AC Min is ",acMinVal);
                                       }
                                  

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

                                  Советник AC Strength на графике

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

                                  Пример сигнала о сильном AC:

                                  Советник AC Strength - сильный сигнал

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

                                  • Показатель AC сильный
                                  • Значение AC
                                  • Максимум AC
                                  • Минимум AC

                                  Пример сигнала о слабом AC:

                                  Советник AC Strength - слабый сигнал

                                  Как видим, у нас есть сигнал и следующие значения:

                                  • Показатель AC слабый
                                  • Значение AC
                                  • Максимум AC
                                  • Минимум AC
                                    Стратегия третья: AC и MA

                                      Посмотрим на полный код для создания такой стратегии:

                                      //+------------------------------------------------------------------+
                                      //|                                             AC & MA Strategy.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()
                                        {
                                         MqlRates pArray[];
                                         double acArray[];
                                         double maArray[];
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                         ArraySetAsSeries(acArray,true);
                                         ArraySetAsSeries(maArray,true);
                                         int acDef = iAC(_Symbol,_Period);
                                         int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
                                         CopyBuffer(acDef,0,0,3,acArray);
                                         CopyBuffer(maDef,0,0,3,maArray);
                                         int acMaxArray = ArrayMaximum(acArray,1,WHOLE_ARRAY);
                                         int acMinArray = ArrayMinimum(acArray,1,WHOLE_ARRAY);
                                         double closingPrice = pArray[0].close;
                                         double acVal = NormalizeDouble(acArray[0],7);
                                         double acMaxVal = NormalizeDouble(acArray[acMaxArray],7);
                                         double acMinVal = NormalizeDouble(acArray[acMinArray],7);
                                         double maVal = NormalizeDouble(maArray[0],7);
                                         if(acVal > acMaxVal && closingPrice > maVal)
                                           {
                                            Comment("Buy","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "Ac Value is ",acVal,"\n",
                                                    "AC Max is ",acMaxVal,"\n",
                                                    "AC Min is ",acMinVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                         if(acVal < acMinVal && closingPrice < maVal)
                                           {
                                            Comment("Sell","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "Ac Value is ",acVal,"\n",
                                                    "AC Max is ",acMaxVal,"\n",
                                                    "AC Min is ",acMinVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                        }
                                      //+------------------------------------------------------------------+
                                      

                                      Отличия в этом коде:

                                      Создаем массивы pArray, acArray и maArray. Будем использовать функцию double для acArray и maArray, и функцию MqlRates для pArray для хранения информации о цене, объеме и спреде.

                                         MqlRates pArray[];
                                         double acArray[];
                                         double maArray[];
                                      

                                      Устанавливаем флаг AS_SERIES массивам acArray и maArray, также определяем Data через функцию CopyRates, которая позволяет получить исторические данные структуры MqlRates. Параметры функции:

                                      • symbol_name — название символа; укажем _Symbol, чтобы использовать текущий
                                      • timeframe — период расчета; используем текущий период (_period)
                                      • start_pos — установим позицию начала расчета, укажем 0 
                                      • count — количество данных для копирования, укажем 1
                                      • rates_array[] — массив, в который копируем данные
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                         ArraySetAsSeries(acArray,true);
                                         ArraySetAsSeries(maArray,true);
                                      

                                      Определяем индикаторы AC, MA:

                                      Для AC используем как и раньше функцию iCA. Для скользящей средней MA это будет функция iMA с такими параметрами:

                                      • symbol — имя символа, _Symbol
                                      • period — период, _period
                                      • ma_period — период расчета среднего, у нас это будет 50 
                                      • ma_shift — горизонтальный сдвиг, установим в значение 0 
                                      • ma_method — тип сглаживания скользящей средней; мы будем использовать экспоненциальное. 
                                      • applied_price — определяет тип цены, используемой для расчета; используем цену закрытия
                                         int acDef = iAC(_Symbol,_Period);
                                         int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
                                      

                                      Получаем данных из буфера индикаторов AC и MA с помощью функции CopyBuffer.

                                         CopyBuffer(acDef,0,0,3,acArray);
                                         CopyBuffer(maDef,0,0,3,maArray);
                                      

                                      Находим максимальное и минимальное значение в массиве acArray.

                                         int acMaxArray = ArrayMaximum(acArray,1,WHOLE_ARRAY);
                                         int acMinArray = ArrayMinimum(acArray,1,WHOLE_ARRAY);
                                      

                                      Определяем значения AC, максимума AC, минимума AC и экспоненциального скользящего среднего.

                                         double acVal = NormalizeDouble(acArray[0],7);
                                         double acMaxVal = NormalizeDouble(acArray[acMaxArray],7);
                                         double acMinVal = NormalizeDouble(acArray[acMinArray],7);
                                         double maVal = NormalizeDouble(maArray[0],7);
                                      

                                      Условия стратегии.

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

                                         if(acVal > acMaxVal && closingPrice > maVal)
                                           {
                                            Comment("Buy","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "Ac Value is ",acVal,"\n",
                                                    "AC Max is ",acMaxVal,"\n",
                                                    "AC Min is ",acMinVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                      

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

                                         if(acVal < acMinVal && closingPrice < maVal)
                                           {
                                            Comment("Sell","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "Ac Value is ",acVal,"\n",
                                                    "AC Max is ",acMaxVal,"\n",
                                                    "AC Min is ",acMinVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                      

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

                                      Советник по стратегии AC _ MA на графике

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

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

                                      Советник по стратегии AC & MA - сигнал на покупку

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

                                      • Покупка
                                      • Цена закрытия
                                      • Значение AC
                                      • Максимум AC
                                      • Минимум AC
                                      • Значение MA

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

                                      Советник по стратегии AC & MA - сигнал на продажу

                                      У нас есть сигнал со следующими значениями:

                                      • Продажа
                                      • Цена закрытия
                                      • Значение AC
                                      • Максимум AC
                                      • Минимум AC
                                      • Значение MA

                                      Заключение

                                      Итак, мы с вами подробно рассмотрели индикатор Accelerator Oscillator. Узнали, что он из себя представляет, что измеряет, как его рассчитать и как интерпретировать показатели. Также мы рассмотрели несколько простых стратегий как пример использования индикатора. Это стратегии:

                                      • AC Zero Crossover — генерация бычьих и медвежьих сигналов на основе пересечения гистограммы AC и нулевого уровня индикатора.
                                      • AC Strength — генерация сигналов о силе движения AC на основе сравнения текущего значения показателя и максимума или минимума за последний десять значений индикатора.
                                      • AC & MA Strategy — сигналы на покупку и продажу на основе анализа положения цены закрытия, 50-периодной экспоненциальной средней, текущего значения индикатора AC, а также его максимального и минимального значения за период.

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

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

                                      Я надеюсь, что статья окажется полезно и поможет вам добиться лучших результатов торговли. Если вам понравилась эта статья, если вы считаете ее полезной, почитайте мои предыдущие статьи из этой же серии, посвященные, например, индикаторам RSI, MACD, MA, Stochastic, Bollinger Bands и другим.

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

                                      Прикрепленные файлы |
                                      Simple_AC.mq5 (0.86 KB)
                                      AC_Strength.mq5 (1.46 KB)
                                      DoEasy. Элементы управления (Часть 28): Стили полосы в элементе управления "ProgressBar" DoEasy. Элементы управления (Часть 28): Стили полосы в элементе управления "ProgressBar"
                                      В статье будут разработаны стили отображения и текст описания полосы прогресса элемента управления ProgressBar
                                      Разработка торгового советника с нуля (Часть 30): CHART TRADE теперь как индикатор?! Разработка торгового советника с нуля (Часть 30): CHART TRADE теперь как индикатор?!
                                      Сегодня мы снова будем использовать Chart Trade... но теперь как индикатор, который может присутствовать или не присутствовать на графике.
                                      Популяционные алгоритмы оптимизации: Оптимизация Стаей Серых Волков (Grey Wolf Optimizer - GWO) Популяционные алгоритмы оптимизации: Оптимизация Стаей Серых Волков (Grey Wolf Optimizer - GWO)
                                      Рассмотрим один из новейших современных алгоритмов оптимизации "Стаи серых волков". Оригинальное поведение на тестовых функциях делает этот алгоритм одним из самых интересных среди рассмотренных ранее. Один из лидеров для применения в обучении нейронных сетей, гладких функций с многими переменными.
                                      Нейросети — это просто (Часть 34): Полностью параметризированная квантильная функция Нейросети — это просто (Часть 34): Полностью параметризированная квантильная функция
                                      Продолжаем изучение алгоритмов распределенного Q-обучения. В предыдущих статьях мы рассмотрели алгоритмы распределенного и квантильного Q-обучения. В первом мы учили вероятности заданных диапазонов значений. Во втором учили диапазоны с заданной вероятностью. И в первом, и во втором алгоритме мы использовали априорные знания одного распределения и учили другое. В данной статье мы рассмотрим алгоритм, позволяющей модели учить оба распределения.