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

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

MetaTrader 5Трейдинг | 11 июля 2022, 08:33
2 150 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Введение

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

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

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

      В части "Определение Стохастика" мы подробно познакомимся с индикатором Stochastic Oscillator, узнаем, что он из себя представляет и что он измеряет. В части "Стратегия по Стохастику" мы изучим простую стратегию с использованием индикатора. После этого мы разработаем схему этих простых стратегий, которую будем использовать как основу для программирования стратегий на MQL5 — в таком виде их можно будет использовать в терминале MetaTrader 5. Все это будет в разделе "Схема торговой системы по Стохастику". И, наконец, изучим код торговой системы, построенной на основе этих простых стратегий — это будет в разделе "Торговая система по Стохастику".

      В этой статье мы будем использовать торговую платформу MetaTrader 5 и язык программирования MQL5 (MetaQuotes Language), встроенный в платформу. Терминал можно скачать по этой ссылке: https://www.metatrader5.com/ru/download

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

      Теперь давайте приступим к изучению этой темы, еще одного блока знаний в нашем путешествии.


      Определение Стохастика

      В этой части мы более подробно узнаем об одном из самых популярных технических индикаторов — Стохастическом осцилляторе (Stochastic Oscillator). Он был разработан Джорджем Лейном, о чем упоминается в книге «Новые торговые системы и методы» Перри Дж. Кауфмана. Однако есть и другие мнения на этот счет. Одно из них заключается в том, что не совсем понятно, кто создал Стохастик — об этом написано в книге Чарльза Д. Киркпатрика и Джули Р. Далквист «Технический анализ: полный ресурс для технических специалистов по финансовым рынкам». Также есть другое мнение, что Джордж Лейн только популяризировал индикатора — об этом говорится в книге «Технический анализ финансовых рынков» Джона Дж. Мерфи.

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

      Стохастик состоит из двух линий, и эти две линии колеблются между нулевым уровнем и уровнем 100:

      • Линия %K — быстрая.
      • Лилия %D — медленная, сглаженная.

      Вообще существует несколько разновидностей индикатора. Наиболее популярными являются следующие две версии:

      • Быстрый Стохастик.
      • Медленный Стохастик.

      Разница заключается в том, как эти индикаторы рассчитываются.

      Стохастик рассчитывается в несколько шагов:

      1. Определяем период, за который будем рассчитывать индикатор.
      2. Определяем наибольший максимум за выбранный период.
      3. Определяем самый низкий минимум за выбранный период.
      4. Находим линию %K быстрого Стохастика = 100*((текущее закрытие-низший минимум)/(высший максимум-низший минимум))
      5. Находим линию %D быстрого Стохастика = 3-периодная скользящая средняя линии %K быстрого Стохастика
      6. Получаем линию %K медленного Стохастика = %D быстрого Стохастика
      7. Получаем линию %D медленного Стохастика = 3-периодная скользящая средняя от (%K медленного Стохастика, которая равна %D быстрого) 

      Теперь давайте посмотрим пример такого расчета на конкретных данных. Допустим, у нас есть такие данные:

      День Закрытие Максимум Минимум
      1 100 110 90
      2 130 140 120
      3 140 160 120
      4 130 150 110
      5 120 140 100
      6 140 150 130
      7 160 170 150
      8 170 180 160
      9 155 170 150
      10 140 170 130
      11 160 180 155
      12 180 190 175
      13 190 220 190
      14 200 230 200
      15 210 215 205
      16 200 200 190
      17 190 195 180
      18 185 105 180
      19 195 210 185
      20 200 220 190

      Рассчитаем Стохастик по шагам, рассмотренным ранее. Итак что мы делаем:

      • Определяем период расчета, это будет 14. То есть нам нужны 14 периодов для начала расчета индикатора.
      • Определим самый высокий максимум за последние 14 периодов, это значение 230. В таблице ниже показано, с какого дня мы можем считать, также это значение проставлено для последующих дней:

      14 Самый высокий максимум

      • Определим самый низкий минимум за последние 14 периодов, это значение 90. Оно проставлено в таблице ниже для первого дня расчета и последующих:

      14 самый низкий минимум

      • Рассчитываем линию %K быстрого Стохастика = 100*((текущее закрытие-низший минимум)/(высший максимум-низший минимум)) 
      • Определяем линию %D быстрого Стохастика = 3-периодная скользящая средняя линии %K быстрого Стохастика
      • На рисунке ниже показаны результаты расчета по нашим данным из примера:

      Быстрый - K-D

      • Находим %K медленного Стохастика = %D быстрого Стохастика
      • Определяем линию %D медленного Стохастика = 3-периодная скользящая средняя линии %K медленного Стохастика
      • На рисунке ниже показаны результаты расчета по нашим данным из примера:

      Медленный - K-D

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

      Запуск Стохастика

      После выбора "Stochastic Oscillator" откроется окно для настройки параметров индикатора:

       Окно вставки Стохастика

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

      1. Период расчета
      2. Период скользящей средней для быстрой %D
      3. Период скользящей средней для медленной %D
      4. Тип цены, используемый для расчетов
      5. Тип скользящей средней, используемой для расчета Стохастика
      6. Цвет, стиль и толщина линии %K
      7. Цвет, стиль и толщина линии %D

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

      Стохастик на графике

      Итак, после запуска индикатора у нас появилось дополнительное окно, в котором запустился индикатор. Там появились две линии (%K, %D), отрисовывающиеся между уровнями 0 и 100. Также указаны показатели индикатора:

      • Stoch(14, 3,3) — имя индикатора и выбранные параметры: период 14, период скользящей средней 3 для линии %D быстрого Стохастика, период средней 3 для расчета линии %D медленного Стохастика.
      • 36.85 — значение %k
      • 38.28 — значение %D

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

      Во время восходящего тренда:

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

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

      Стохастик во время восходящего тренда

      Во время нисходящего тренда:

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

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

      Стохастик во время нисходящего тренда

      Во время бокового движения:

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

      Во время такого бокового рынка нет четкого движения вверх или вниз, цены имеют тенденцию закрываться вблизи середины диапазона цен для этого периода. То есть большую часть времени Стохастик движется около уровней 20 и 80, пример такого поведения показан на рисунке ниже:

      Стохастик во время бокового движения

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


      Стратегия по Стохастику

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

      • Стратегия первая — восходящий тренд

      В соответствии с этой стратегией будем проверять положение линий %K и %D — они должны быть ниже уровня 50. Тогда будем формировать сигнал на покупку, как только линия %K пересечет линию %D снизу вверх. Для фиксирования прибыли можно использовать другой эффективный инструмент, такой как ценовое действие, например, можно искать более низкий минимум.

      %K, %D < 50 --> %K > %D = Сигнал на покупку
        • Стратегия вторая — нисходящий тренд

        В соответствии с этой стратегией будем проверять положение линий %K и %D — они должны быть ниже уровня 50. Тогда будем формировать сигнал на продажу, как только линия %K пересечет линию %D сверху вниз. Для фиксирования прибыли можно использовать другой эффективный инструмент, такой как ценовое действие, например, можно искать более высокий максимум.

        %K, %D > 50 --> %K < %D = Сигнал на продажу
          • Стратегия третья — боковой тренд
            • Сигнал на покупку:

          При боковом тренде будем проверять положение линий %K и %D — они должны быть ниже уровня 20. Тогда будем формировать сигнал на покупку, как только линия %K пересечет линию %D снизу вверх. Когда линии %K и %D окажутся выше 80 и линия %K пересечет линию %D сверху вниз, будем генерировать сигнал тейк-профита.

          %K, %D < 20 --> %K > %D = Сигнал на покупку
          %K, %D > 80 --> %K < %D = Тейк-профит

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

                При боковом тренде будем проверять положение линий %K и %D — они должны быть выше уровня 80. Тогда будем формировать сигнал на покупку, как только линия %K пересечет линию %D сверху вниз. Когда линии %K и %D окажутся выше 20 и линия %K пересечет линию %D снизу вверх, будем генерировать сигнал тейк-профита.

                %K, %D > 80 --> %K < %D = Сигнал на продажу
                %K, %D < 20 --> %K > %D = Тейк-профит

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


                  Схема торговой системы по Стохастику

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

                  • Стратегия первая — восходящий тренд

                  %K, %D < 50 --> %K > %D = Сигнал на покупку

                  Для начала программа должна будет проверять положение линий %K и %D и определить, находятся ли они ниже уровня 50. Если ниже уровня 50, тогда надо ждать, и как только линия %K пересечет линию %D снизу вверх, формировать сигнал на покупку. Если линии %K и %D выше или на уровне 50, программа не будет ничего делать.

                  На следующем рисунке показана схема этой стратегии:

                  SSS - Схема стратегии восходящего тренда

                  • Стратегия вторая — нисходящий тренд

                  %K, %D > 50 --> %K < %D = Сигнал на продажу

                  Программа должна будет проверять положение линий %K и %D и определить, находятся ли они выше уровня 50. Если выше уровня 50, тогда надо ждать, и как только линия %K пересечет линию %D сверху вниз, формировать сигнал на покупку. Если линии %K и %D ниже или на уровне 50, программа не будет ничего делать.

                  На следующем рисунке показана схема этой стратегии:

                  SSS - Схема стратегии нисходящего тренда

                  • Стратегия третья — боковой тренд

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

                  %K, %D < 20 --> %K > %D = Сигнал на покупку

                  %K, %D > 80 --> %K < %D = Тейк-профит

                  Программа будет определять положение линий %K и %D относительно уровня 20. Если они ниже уровня 20, тогда надо ждать, и как только линия %K пересечет линию %D снизу вверх, формировать сигнал на покупку. Если линии %K и %D выше или на уровне 20, программа не будет ничего делать. Затем будет проверять линии %K и %D и определять их положение относительно уровня 80. Если они выше уровня 80, тогда надо ждать, и как только линия %K пересечет линию %D сверху вниз, формировать сигнал тейк-профита. Если линии %K и %D ниже или на уровне 80, программа не будет ничего делать.

                  На следующем рисунке показана схема этой стратегии:

                  SSS - схема боковой стратегии на покупку

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

                  %K, %D > 80 --> %K < %D = Сигнал на продажу

                  %K, %D < 20 --> %K > %D = Тейк-профит

                  Программа должна будет проверять положение линий %K и %D и определить, находятся ли они выше уровня 80. Если выше уровня 80, тогда надо ждать, и как только линия %K пересечет линию %D сверху вниз, формировать сигнал на покупку. Если линии %K и %D ниже или на уровне 80, программа не будет ничего делать. Затем будет проверять линии %K и %D и определять их положение относительно уровня 20. Если они ниже уровня 20, тогда надо ждать, и как только линия %K пересечет линию %D снизу вверх, формировать сигнал тейк-профит. Если линии %K и %D выше или на уровне 20, программа не будет ничего делать.

                  На следующем рисунке показана схема стратегии для получения сигналов на продажу:

                  SSS - схема боковой стратегии на продажу

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


                  Торговая система по Стохастику

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

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

                  Сначала нужно создать массивы для линий %K и %D. Для этого будем использовать значения double, т.е. значения с дробной частью:

                  double Karray[];
                  double Darray[];
                  
                  

                  Затем нужно отсортировать созданные массивы из текущих данных, для этого будем использовать функцию ArraySetAsSeries:

                  ArraySetAsSeries(Karray, true);
                  ArraySetAsSeries(Darray, true);
                  

                  Далее идет определение индикатора Stochastic. Мы будем использовать функцию iStochastic после создания переменной с StochDef, которая будет равна определению Stochastic:

                  int StochDef = iStochastic(_Symbol,_Period,14,3,3,MODE_SMA,STO_LOWHIGH);

                  Далее заполняем массив ценовыми данными — это делается в функции CopyBuffer:

                  CopyBuffer(StochDef,0,0,3,Karray);
                  CopyBuffer(StochDef,1,0,3,Darray);
                  
                  

                  Далее рассчитаем значения линий %K и %D по текущим данным. Будем использовать float для уменьшения размера дробей и аппроксимации:

                  float KValue = Karray[0];
                  float DValue = Darray[0];
                  
                  

                  Последняя строка кода позволит программе отобразить значения линий %K и %D на графике в две строки. Это делается в функции Comment:

                  Comment("%K value is ", KValue,"\n""%D Value is ",DValue);

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

                  //+------------------------------------------------------------------+
                  //|                       Simple Stochastic System - Lines Value.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()
                    {
                  //создание массивов для линии %K и линии %D   
                     double Karray[];
                     double Darray[];
                     
                  //сортировка массивов по текущим данным   
                     ArraySetAsSeries(Karray, true);
                     ArraySetAsSeries(Darray, true);
                  
                  //определение стохастического индикатора   
                     int StochDef = iStochastic(_Symbol,_Period,14,3,3,MODE_SMA,STO_LOWHIGH);
                  
                  //заполнение массивов ценовыми данными   
                     CopyBuffer(StochDef,0,0,3,Karray);
                     CopyBuffer(StochDef,1,0,3,Darray);
                  
                  //вычисление значения линий %K и %D по текущим данным  
                     float KValue = Karray[0];
                     float DValue = Darray[0];
                     
                  //вывод рассчитанных значений в виде комментария на графике   
                     Comment("%K value is ",KValue,"\n"
                     "%D Value is ",DValue);
                        
                    }
                  //+------------------------------------------------------------------+
                  

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

                  Навигатор 1

                  Перетаскиваем нашу программу Simple Stochastic System - Lines Value из Навигатора на график. При этом откроется вот такое окно:

                  Окно значений SSS-линий


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

                  Программа SSS-линий, запущенная на графике

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

                  Значения линий SSS на графике

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

                  • Стратегия первая — восходящий тренд

                  %K, %D < 50 --> %K > %D = Сигнал на покупку

                  Итак, вот такой код представляет ту самую систему, которая будет анализировать показатели индикатора и выводить сигналы на график по первой стратегии:

                  //+------------------------------------------------------------------+
                  //|                  Simple Stochastic System - Uptrend 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()
                    {
                     string signal="";
                     
                     double Karray[];
                     double Darray[];
                     
                     ArraySetAsSeries(Karray, true);
                     ArraySetAsSeries(Darray, true);
                     
                     int StochDef = iStochastic(_Symbol,_Period,14,3,3,MODE_SMA,STO_LOWHIGH);
                     
                     CopyBuffer(StochDef,0,0,3,Karray);
                     CopyBuffer(StochDef,1,0,3,Darray);
                     
                     double KValue0 = Karray[0];
                     double DValue0 = Darray[0];
                     
                     double KValue1 = Karray[1];
                     double DValue1 = Darray[1];
                     
                     if (KValue0<50&&DValue0<50)
                        if ((KValue0>DValue0) && (KValue1<DValue1))
                        {
                           signal = "BUY";
                        }      
                        
                     Comment("SSS - Uptrend Strategy - Signal is ",signal);
                        
                    }
                  //+------------------------------------------------------------------+
                  

                  Что добавилось в этом коде по сравнению с предыдущим.

                  Здесь появилась переменная signal с пустым присваиванием. Значение переменной рассчитывается далее по коду:

                  string signal="";

                  Также добавились две переменные для значений линии %K (0,1) и еще две переменные для линии %D (0,1), рассчитанным по текущим и предшествующим данным:

                     double KValue0 = Karray[0];
                     double DValue0 = Darray[0];
                     
                     double KValue1 = Karray[1];
                     double DValue1 = Darray[1];
                  

                  Чтобы проверить пересечение между %K и %D и определить его вид, а нам нужно пересечение снизу вверх, то есть линия %K должна пробить %D внизу вверх и остаться выше после этого пересечения. Для этого используем условный оператор if:

                     if (KValue0<50&&DValue0<50)
                        if ((KValue0>DValue0) && (KValue1<DValue1))
                        {
                           signal = "BUY";
                        }      
                        
                  

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

                  Comment("SSS - Uptrend Strategy - Signal is ",signal);

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

                  Навигатор 2

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

                   Окно программы SSS-Uptrend


                  Теперь после нажатия "ОК" программа появится на графике:

                  Программа SSS-Uptrend, запущенная на графике

                  Программа хорошо работает, и при тестировании она показала, например, такой сигнал:

                  SSS - uptrend - сигнал на покупку

                  • Стратегия вторая — нисходящий тренд

                  %K, %D > 50 --> %K < %D = Сигнал на продажу

                  Код торговой системы на основе стратегии для нисходящего тренда будет таким:

                  //+------------------------------------------------------------------+
                  //|                Simple Stochastic System - Downtrend 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()
                    {
                     string signal="";
                     
                     double Karray[];
                     double Darray[];
                     
                     ArraySetAsSeries(Karray, true);
                     ArraySetAsSeries(Darray, true);
                     
                     int StochDef = iStochastic(_Symbol,_Period,5,3,3,MODE_SMA,STO_LOWHIGH);
                     
                     CopyBuffer(StochDef,0,0,3,Karray);
                     CopyBuffer(StochDef,1,0,3,Darray);
                     
                     double KValue0 = Karray[0];
                     double DValue0 = Darray[0];
                     
                     double KValue1 = Karray[1];
                     double DValue1 = Darray[1];
                           
                     if (KValue0>50&&DValue0>50)
                        if ((KValue0<DValue0) && (KValue1>DValue1))
                        {
                           signal = "SELL";
                        }
                        
                     Comment("SSS - Downtrend Strategy - Signal is ",signal);
                        
                    }
                  //+------------------------------------------------------------------+
                  

                  Здесь что изменилось:

                  • Условия пересечения линий

                     if (KValue0>50&&DValue0>50)
                        if ((KValue0<DValue0) && (KValue1>DValue1))
                        {
                           signal = "SELL";
                        }
                        
                  

                  • Комментарий, выводимый в соответствии со стратегией:

                     Comment("SSS - Downtrend Strategy - Signal is ",signal);

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

                  Навигатор 3

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

                  Окно программы SSS-Downtrend

                  Теперь после нажатия "ОК" программа появится на графике:

                  Программа SSS-Downtrend, запущенная на графике 

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

                  SSS-Downtrend - сигнал на продажу

                  • Стратегия третья — боковой тренд
                    • Сигнал на покупку:

                  %K, %D < 20 --> %K > %D = Сигнал на покупку

                  %K, %D > 80 --> %K < %D = сигнал тейк-профита

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

                  //+------------------------------------------------------------------+
                  //|           Simple Stochastic System - Sideways - Buy 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()
                    {
                     string signal="";
                     
                     double Karray[];
                     double Darray[];
                     
                     ArraySetAsSeries(Karray, true);
                     ArraySetAsSeries(Darray, true);
                     
                     int StochDef = iStochastic(_Symbol,_Period,5,3,3,MODE_SMA,STO_LOWHIGH);
                     
                     CopyBuffer(StochDef,0,0,3,Karray);
                     CopyBuffer(StochDef,1,0,3,Darray);
                     
                     double KValue0 = Karray[0];
                     double DValue0 = Darray[0];
                     
                     double KValue1 = Karray[1];
                     double DValue1 = Darray[1];
                     
                     if (KValue0<20&&DValue0<20)
                        if ((KValue0>DValue0) && (KValue1<DValue1))
                        {
                           signal = "BUY";
                        }      
                        
                     Comment("SSS - Sideways - Buy Strategy - Signal is ",signal);
                     
                      if (KValue0>80&&DValue0>80)
                        if ((KValue0<DValue0) && (KValue1>DValue1))
                        {
                           signal = "Take Profit";
                        }
                        
                     Comment("SSS - Sideways - Buy Strategy - Signal is ",signal);  
                        
                    }
                  //+------------------------------------------------------------------+
                  

                  Здесь что изменилось:

                  • Условия пересечения в соответствии с сигналом на покупку по стратегии для бокового рынка:

                     if (KValue0<20&&DValue0<20)
                        if ((KValue0>DValue0) && (KValue1<DValue1))
                        {
                           signal = "BUY";
                        }      
                        
                  

                  • Комментарий на графике в соответствии с сигналом на покупку по стратегии для бокового рынка:

                     Comment("SSS - Sideways - Buy Strategy - Signal is ",signal);

                  • Условия сигнала для фиксирования прибыли по стратегии для бокового рынка:

                      if (KValue0>80&&DValue0>80)
                        if ((KValue0<DValue0) && (KValue1>DValue1))
                        {
                           signal = "Take Profit";
                        }
                        
                  

                  • Комментарий на графике в соответствии с сигналом тейк-профита по стратегии для бокового рынка:

                     Comment("SSS - Sideways - Buy Strategy - Signal is ",signal);

                  После компиляции сгенерированный файл этой торговой системы появится в окне Навигатора:

                  Навигатор 4

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

                  Окно программы SSS-Sideways - покупка

                  Теперь после нажатия "ОК" программа появится на графике:

                  На графике программа SSS-Sideways - покупка

                  Сигналы будут отображаться в виде комментария на графике в соответствии с условиями данной стратегии. На рисунке ниже показан пример такого сигнала:

                  Окно программы SSS-Sideways - сигнал на покупку

                  Пример сигнала тейк-профита:

                  Окно программы SSS-Sideways - сигнал тейк-профита

                    • Боковая стратегия: сигнал на продажу

                  %K, %D > 80 --> %K < %D = Сигнал на продажу

                  %K, %D < 20 --> %K > %D = сигнал тейк-профита

                  Код торговой системы по этой стратегии будет таким:

                  //+------------------------------------------------------------------+
                  //|          Simple Stochastic System - Sideways - Sell 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()
                    {
                     string signal="";
                     
                     double Karray[];
                     double Darray[];
                     
                     ArraySetAsSeries(Karray, true);
                     ArraySetAsSeries(Darray, true);
                     
                     int StochDef = iStochastic(_Symbol,_Period,5,3,3,MODE_SMA,STO_LOWHIGH);
                     
                     CopyBuffer(StochDef,0,0,3,Karray);
                     CopyBuffer(StochDef,1,0,3,Darray);
                     
                     double KValue0 = Karray[0];
                     double DValue0 = Darray[0];
                     
                     double KValue1 = Karray[1];
                     double DValue1 = Darray[1];  
                     
                      if (KValue0>80&&DValue0>80)
                        if ((KValue0<DValue0) && (KValue1>DValue1))
                        {
                           signal = "SELL";
                        }
                        
                     Comment("SSS - Sideways - Sell Strategy - Signal is ",signal);  
                     
                     if (KValue0<20&&DValue0<20)
                        if ((KValue0>DValue0) && (KValue1<DValue1))
                        {
                           signal = "TAKE PROFIT";
                        }         
                     Comment("SSS - Sideways - Sell Strategy - Signal is ",signal);  
                    }
                  //+------------------------------------------------------------------+
                  
                  

                  Здесь что изменилось:

                  • Условия пересечения в соответствии с сигналом на продажу по стратегии для бокового рынка:
                      if (KValue0>80&&DValue0>80)
                        if ((KValue0<DValue0) && (KValue1>DValue1))
                        {
                           signal = "SELL";
                        }
                  
                  • Комментарий на графике в соответствии с сигналом на продажу по стратегии для бокового рынка:
                     Comment("SSS - Sideways - Sell Strategy - Signal is ",signal);  
                  • Условия сигнала для фиксирования прибыли по стратегии для бокового рынка:
                     if (KValue0<20&&DValue0<20)
                        if ((KValue0>DValue0) && (KValue1<DValue1))
                        {
                           signal = "TAKE PROFIT";
                        }   
                  
                  • Комментарий на графике в соответствии с сигналом тейк-профита по стратегии для бокового рынка: 
                     Comment("SSS - Sideways - Sell Strategy - Signal is ",signal);  

                  После компиляции сгенерированный файл этой торговой системы появится в окне Навигатора:

                  Навигатор 5

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

                  Окно программы SSS-Sideways - продажа

                  Нажимаем "ОК", программа запустится на графике и начнет генерировать сигналы:

                  На графике программа SSS-Sideways - продажа

                  На следующем рисунке показан пример сигнала на продажу по этой стратегией:

                  Окно программы SSS-Sideways - сигнал на продажу

                  На следующем рисунке показан пример сигнала тейк-профита по этой стратегией:

                  Окно программы SSS-Sideways - сигнал тейк-профита

                  Заключение

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

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

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

                  Разработка торговой системы на основе индикатора ADX Разработка торговой системы на основе индикатора ADX
                  Эта статья продолжает серию о построении торговых систем с использованием самых популярных индикаторов. На этот раз мы поговорим об индикаторе ADX (Average Directional Index, Индекс среднего направленного движения). Мы подробно изучим этот индикатор, чтобы понять, чем он может быть полезен в торговле. Также с помощью простых стратегий мы узнаем, как его использовать. Изучая самую суть вещей, мы можем получить больше информации и использовать это с максимальной выгодой.
                  Разработка торгового советника с нуля (Часть 17): Доступ к данным в Интернете (III) Разработка торгового советника с нуля (Часть 17): Доступ к данным в Интернете (III)
                  В этой статье мы продолжим с просмотром того, как получать данные из Интернета для их использования в советнике. Давайте приступим к работе, а точнее к кодированию альтернативной системы.
                  Нейросети — это просто (Часть 20): Автоэнкодеры Нейросети — это просто (Часть 20): Автоэнкодеры
                  Мы продолжаем изучение алгоритмов обучения без учителя. Возможно, у читателя может возникнуть вопрос об соответствии последних публикаций теме нейронных сетей. В новой статье мы возвращаемся к использованию нейронных сетей.
                  DoEasy. Элементы управления (Часть 10): WinForms-объекты — оживляем интерфейс DoEasy. Элементы управления (Часть 10): WinForms-объекты — оживляем интерфейс
                  Настала пора заняться оживлением графического интерфейса — делать функционал для взаимодействия объектов с пользователем и другими объектами. И для того, чтобы более сложные объекты могли правильно работать, нам уже необходим функционал взаимодействия объектов друг с другом и с пользователем.