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

Разработка торговой системы на основе индикатора Parabolic SAR

MetaTrader 5Трейдинг | 18 июля 2022, 08:47
2 042 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Введение

В этой статье мы обратим свое внимание на еще один полезный технический индикатор, который можно использовать в торговле. Этот технический индикатор называется Parabolic SAR - Параболическая система времени/цены. Мы научимся проектировать торговую систему, напишем код торговой стратегии на языке MQL5 в редакторе MetaQuotes Language Editor, встроенном в MetaTrader 5. Получившуюся программу можно будет запускать в торговой платформе. Если вы не знакомы с платформой и редактором, рекомендую почитать раздел "Как написать MQL5-код в редакторе MetaEditor" одной из моих прошлых статей. Там в деталях описывается, как установить терминал и где найти редактор кода. Как и во всех предыдущих статьях, индикатор мы будем изучать, разбив тему на несколько разделов:

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

На протяжении этих разделов мы будем изучать индикатор, узнаем, как разработать торговую систему на основе простых стратегий индикатора Parabolic SAR и концепции, лежащей в его основе. В разделе "Определение Parabolic" узнаем в деталях, что означает индикатор, что он делает и как его можно рассчитать (детали расчета помогут лучше понять суть индикатора, позволит затем эффективнее его использовать). Затем узнаем, как использовать индикатор Parabolic SAR, с помощью простых стратегий, основанных на концепции этого индикатора — в разделе "Стратегия по Parabolic SAR". После этого разработаем схему работы этих стратегий. Позже эта схема поможет нам шаг за шагом разработать торговую систему. Ну и наконец, перейдем потом к самой интересной теме этой статьи — написанию кода торговой системы. Программа будет изучать условия и возвращать сигнал в соответствии с выбранными стратегиями — и все это она будет делать автоматически и точно. Разработанная программа будет автоматическим торговым советником.

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

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

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


Определения индикатора Parabolic SAR

Индикатор Parabolic SAR был создан Уэллсом Уайлдером. Название Parabolic происходит от графического формирования, а SAR означает Stop And Reverse ("остановка и разворот", некая индикативная цена, ниже которой реальная цена не должна опускаться). В книге "Новые концепции технических торговых систем" Уайлдер называет его Parabolic Time/Price system (Параболическая система времени/цены).

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

Другими словами, основной задачей Parabolic SAR является создание трейлинг-стопов. Стоп является функцией двух вещей: времени и цены. В зависимости от функции цены трейлинг-стоп может двигаться вверх или вниз — в соответствии с движением цены. Функция цены делает так, что трейлинг-стоп будет перемещаться каждый период независимо от направления цены.

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

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

  • Растущий SAR:
    1. Определяем предыдущее значение SAR — это значение SAR за предыдущий период.
    2. Определяем экстремум (ЕР) = самое высокое значение максимума текущего восходящего тренда.
    3. Определяем коэффициент ускорения (AF) = значение от 0,02 до 0,20. После определения первого минимального значения, равного 0,02, значение будет определяться в соответствии с экстремумом (EP) — коэффициент ускорение будет увеличиваться на 0,02 каждый раз, когда экстремум EP будет формировать новый максимум, приближаясь к максимальному значению 0,20, независимо от того, как долго будет продолжаться тренд.
    4. Текущее значение Parabolic SAR = предыдущий SAR (шаг 1) + предыдущий AF (коэффициент ускорение) * (предыдущий экстремум EP - предыдущий SAR).

Давайте рассмотрим пример такого растущего SAR — рассчитаем с использованием реальных рыночных данных:

День Максимум Минимум
1 45 43
2 44 43.5
3 46 43
4 47 42
5 48 42.5
6 47.5 42.75
7 48 42.60
8 47.75 42.5
9 48 43
10 49 42.5
11 48.75 42.60
12 50 42
13 51 42.5
14 52 43
15 51.5 42.5
16 51 42
17 52 43
18 53 44
19 54 45

Теперь нужно рассчитать рост SAR, рассчитывается он, как показано ниже:

  1. Определяем предыдущее значение SAR — это значение SAR за предыдущий период, в нашем примере это первое значение, выделенное желтым цветом. Для упрощения оно здесь равно 42.
  2. Определяем экстремум (ЕР) = самое высокое значение максимума текущего восходящего тренда. У нас это значение 48.
  3. Рассчитываем разницу между EP и SAR. Получается, 48-42=6.
  4. Определяем коэффициент ускорения (AF) = значение от 0,02 до 0,20, первым его значением будет 0,02.
  5. Умножаем коэффициент ускорения AF на разницу между EP и SAR, получаем значение 0.12
  6. Рассчитываем текущий SAR, прибавив результат умножения предыдущего AF на разницу между EP и SAR — это результат пятого шага выше. Получаем значение 42,12.

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

Пример растущего SAR

Как видите в столбце SAR, значения SAR растут каждый день в течение периода.

  • Снижающийся SAR:
    1. Определяем предыдущее значение SAR — это значение SAR за предыдущий период.
    2. Определяем экстремум (ЕР) = самое низкое значение минимума текущего нисходящего тренда.
    3. Определяем коэффициент ускорения (AF) = значение от 0,02 до 0,20. После определения первого минимального значения, равного 0,02, значение будет определяться в соответствии с экстремумом (EP) — коэффициент ускорение будет увеличиваться на 0,02 каждый раз, когда экстремум EP будет формировать новый минимум, приближаясь к максимальному значению 0,20, независимо от того, как долго будет продолжаться тренд.
    4. Текущее значение Parabolic SAR = предыдущий SAR (шаг 1) - предыдущий AF (коэффициент ускорения) * (предыдущий экстремум EP - предыдущий SAR).

Давайте рассмотрим пример такого снижающегося SAR — рассчитаем с использованием рыночных данных:

День Максимум Минимум
1 54 45
2 53 44
3 52 43
4 51 42
5 51.5 42.5
6 52 43
7 51 42.5
8 50 42
9 48.75 42.6
10 49 42.5
11 48 43
12 47.75 42.50
13 48 42.60
14 47.50 42.75
15 48 42.50
16 47 42
17 46 43
18 44 43.50
19 45 43

Теперь рассчитаем снижающийся SAR за указанный период, рассчитывается он, как показано ниже:

  1. Определяем предыдущее значение SAR — это значение SAR за предыдущий период, в нашем примере это первое значение, выделенное желтым цветом. Для упрощения оно здесь равно 51.
  2. Определяем экстремум (ЕР) = самое низкое значение минимума текущего нисходящего тренда, это 42.
  3. Рассчитываем разницу между EP и SAR. Получается, 51-42=9.
  4. Определяем коэффициент ускорения (AF) = значение от 0,02 до 0,20, первым его значением будет 0,02.
  5. Умножаем коэффициент ускорения AF на разницу между EP и SAR, получаем значение 0.18
  6. Рассчитываем текущий SAR — для этого вычтем предыдущий SAR из результата шага 5. Получаем значение 50,82.

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

Как видите в столбце SAR, значения SAR снижаются каждый день в течение периода.

К счастью, по факту делать всего этого не нужно, т.е. не нужно рассчитывать Parabolic SAR или любой другой индикатор вручную, потому что индикатор встроен в торговую платформу MetaTrader 5. Поэтому все, что нужно сделать, это выбрать индикатор из списка доступных индикаторов в платформе. Вот как это можно сделать:

В терминале выбираем меню "Вставка", далее выбираем в нем Индикаторы --> Трендовые --> Parabolic SAR:

Вставка SAR

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

Параметры SAR

1 - шаг коэффициента ускорения AF, на который значение будет увеличиваться каждый раз, когда цена фиксирует новый максимум или минимум.

2 - максимальное значение коэффициента ускорения AF. По умолчанию равен 0.20.

3 - цвет индикатора.

4 - стиль индикатора.

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

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

Как видно на рисунке выше, во время восходящего движения Parabolic SAR движется ниже цен и продолжает движение вверх в соответствии с ценами, и наоборот, во время нисходящего движения индикатор движется выше цены и продолжает движение вниз в соответствии с движением цены.


Стратегия по Parabolic SAR

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

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

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

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

Значение SAR < минимальной цены = покупка

Значение SAR > максимальной цены = тейк-профит

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

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

Значение SAR > максимальной цены = сигнал на продажу

Значение SAR < минимальной цены = тейк-профит

  • Стратегия третья — сигнал на покупку со стратегией трейлинг-стопа

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

Значение SAR < минимальной цены = сигнал на покупку --> значение трейлинг-стопа в соответствии со значением SAR

  • Стратегия четвертая — сигнал на продажу со стратегией трейлинг-стопа

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

Значение SAR > максимальной цены = сигнал на продажу --> значение трейлинг-стопа в соответствии со значением SAR


Схема стратегий по индикатору Parabolic SAR

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

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

Будем сообщать советнику инструкцию того, что нужно проверять и что нужно вернуть в случае выполнения условий. В данной конкретной стратегии советник будет проверять значение SAR и сравнивать его с ценовым уровнем. Затем нужно определить: Значение SAR меньше минимальной цены или нет? Если нет, советник не должен ничего делать и не должен ничего возвращать. Если да, советник должен вернуть сигнал на покупку. Затем, нужно снова сравнивать два значения. Если значение SAR не выше максимальной цены, ничего не делаем. Если же индикатор стал выше максимума, советник должен вернуть сигнал тейк-профита.

Значение SAR < минимальной цены = покупка

Значение SAR > максимальной цены = тейк-профит

 SAR - план стратегии восходящего тренда

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

В этой стратегии советник будет проверять значение SAR и сравнивать его с ценовым уровнем. Затем нужно определить: Значение SAR выше максимальной цены или нет? Если нет, советник не должен ничего делать и не должен ничего возвращать. Если да, советник должен вернуть сигнал на продажу. Затем, нужно снова сравнивать два значения. Если значение SAR не ниже минимальной цены, ничего не делаем. Если же индикатор стал ниже минимума, советник должен вернуть сигнал тейк-профита.

Значение SAR > максимальной цены = сигнал на продажу

Значение SAR < минимальной цены = тейк-профит

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

  • Стратегия третья — сигнал на покупку со стратегией трейлинг-стопа
  • Для этой стратегии советник будет проверять значение SAR и возвращать значение трейлинг-стопа - сравниваем это значение с максимумом и минимумом и определяем: значение SAR ниже минимума цены или нет? Если нет, советник возвращает только трейлинг-стоп. Если ниже минимума, советник возвращает сигнал на покупку и значение трейлинг-стопа. 

    Только уровень трейлинг-стопа --> значение SAR < минимума цены = покупка --> значение трейлинг-стопа в соответствии со значением SAR

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

    • Стратегия четвертая — сигнал на продажу со стратегией трейлинг-стопа

    Для этой стратегии советник будет проверять значение SAR и возвращать значение трейлинг-стопа - сравниваем это значение с максимумом и минимумом и определяем: значение SAR выше максимума цены или нет? Если нет, советник возвращает только трейлинг-стоп. Если выше максимума, советник возвращает сигнал на продажу и значение трейлинг-стопа.

    только значение трейлинг-стопа --> значение SAR > максимум цены = продажа --> значение трейлинг-стопа в соответствии со значением SAR

    Стратегия на продажу со стопами

    Торговая система Parabolic SAR

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

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

    • Создаем массив для значений Parabolic SAR, для этого используем функцию double:
    double SARArray[];
    • Сортируем созданный массив цен начиная с текущих данных, для этого будем использовать функцию ArraySetAsSeries — она возвращает true в случае успеха или false в случае неудачи (bool).
    ArraySetAsSeries(SARArray,true);
    • Определяем индикатор SAR с помощью функции "iSAR":
    int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
    • Заполняем массив SARArray значениями, используя функцию "CopyBuffer":
    CopyBuffer(SARDef,0,0,3,SARArray);
    • Рассчитываем значение SAR с помощью функции NormalizeDouble после создания переменной для значения SAR с помощью функции double:
    double SARValue=NormalizeDouble(SARArray[0],5);
    • Выведем на график комментарий со значением SAR с использованием функции comment:
    Comment("Parabolic SAR value is ",SARValue);

    Полный код полученной программы выглядит так:

    //+------------------------------------------------------------------+
    //|                                  Simple Parabolic SAR System.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()
      {    
       //создаем массив SAR
       double SARArray[];
    
       //сортируем массив от текущих данных
       ArraySetAsSeries(SARArray,true);
       
       //определение SAR
       int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
       
       
       //заполняем массив SARArray данными SARDef 
       CopyBuffer(SARDef,0,0,3,SARArray);
       
       //вычисляем значение последних данных
       double SARValue=NormalizeDouble(SARArray[0],5);
    
       //выводим на график комментарий с сигналом
       Comment("Parabolic SAR value is ",SARValue);
      }
    //+------------------------------------------------------------------+
    

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

    Простая система по Parabolic SAR в Навигаторе

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

     Простая система по Parabolic SAR - окно настроек

    Разрешаем алго-трейдинг ("Allow Algo Trading"), нажимаем OK, и программа (советник) запустится на графике, как показано на рисунке ниже:

    Простая система по Parabolic SAR - на графике

    А на рисунке ниже показан пример сгенерированных сигналов от этой системы:

    Простая система по Parabolic SAR

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

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

    • Создаем строковую переменную для сигнала с помощью функции string:
    string signal="";
    • С помощью функции MqlRates создаем массив цен, в нем хранится информация о ценах, объемах и спреде:
    MqlRates PriceArray[];
    • Сортируем массив цен начиная с текущих данных. Для этого используем функцию ArraySetAsSeries:
    ArraySetAsSeries(PriceArray,true);
    • Заполняем массив ценовыми данными с помощью функции CopyRates — эта функция получает исторические данные структуры MqlRates после сохранения данных в виде целого числа:
    int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
    • Создаем еще один массив для значений SAR, используя функцию double:
    double SARArray[];
    • Сортируем массив значений SAR начиная с текущих данных. Для этого используем функцию ArraySetAsSeries:
    ArraySetAsSeries(SARArray,true);
    • Определяем индикатор SAR для советника с помощью функции iSAR — она возвращает дескриптор индикатора Parabolic SAR после сохранения SARDef в виде значения integer:
    int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
    • Заполняем массив SARArray значениями, используя функцию CopyBuffer — она получает данные определенного буфера определенного индикатора:
    CopyBuffer(SARDef,0,0,3,SARArray);
    • Рассчитываем значение SAR на последних данных с помощью функции NormalizeDouble, которая возвращает тип значения double: 
    double SARValue=NormalizeDouble(SARArray[0],5);
    • Задаем условия сигнала на покупку с помощью функции if: если значение SAR меньше минимальной цены, советник должен вернуть сигнал на покупку:
       if(SARValue < PriceArray[1].low)
       {
          signal="Buy";
       }
    
    • Задаем условия сигнала тейк-профита с помощью функции if: если значение SAR выше максимальной цены, советник должен вернуть сигнал на фиксирование прибыли:
       if(SARValue > PriceArray[1].high)
       {
          signal="Take Profit";
       }
    
    • Выводим сгенерированный сигнал на график с помощью функции Comment:
    Comment("The signal is ",signal);

    Это все шаги — мы создали торговую систему. Полный код этой системы выглядит так:

    //+------------------------------------------------------------------+
    //|                      Parabilic SAR 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="";
       
       //создаем массив цен
       MqlRates PriceArray[];
       
       //сортируем массив от текущих данных
       ArraySetAsSeries(PriceArray,true);
       
       //заполняем массив ценовыми данными
       int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
       
       //создаем массив SAR
       double SARArray[];
    
       //сортируем массив от текущих данных
       ArraySetAsSeries(SARArray,true);
       
       //определение SAR
       int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
       
       
       //заполняем массив SARArray данными SARDef 
       CopyBuffer(SARDef,0,0,3,SARArray);
       
       //вычисляем значение последних данных
       double SARValue=NormalizeDouble(SARArray[0],5);
       
       //сигнал на покупку
       //если текущее значение SAR ниже минимума свечи 1
       if(SARValue < PriceArray[1].low)
       {
          signal="Buy";
       }
       
       //сигнал тейк-профита
       //если текущее значение SAR выше максимума свечи 1
       if(SARValue > PriceArray[1].high)
       {
          signal="Take Profit";
       }
       
       //комментарий с сигналом
       Comment("The signal is ",signal);
      }
    //+------------------------------------------------------------------+
    

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

    SAR Uptrend - В Навигаторе

    Запускаем двойным кликом на файле или перетаскиваем на график, после чего появится следующее окно:

     Окно стратегии SAR Uptrend

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

    Стратегия SAR Uptrend на графике

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

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

    SAR Uptrend - сигнал на покупку

    • Сигнал тейк-профита:

    SAR Uptrend - сигнал тейк-профита

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

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

    //+------------------------------------------------------------------+
    //|                    Parabolic SAR 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="";
       
       //создаем массив цен
       MqlRates PriceArray[];
       
       //сортируем массив от текущих данных
       ArraySetAsSeries(PriceArray,true);
       
       //заполняем массив ценовыми данными
       int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
       
       //создаем массив SAR
       double SARArray[];
       
       //определение SAR
       int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
       
       //сортируем массив от текущих данных
       ArraySetAsSeries(SARArray,true);
       
       //заполняем массив SARArray данными SARDef 
       CopyBuffer(SARDef,0,0,3,SARArray);
       
       //вычисляем значение последних данных
       double SARValue=NormalizeDouble(SARArray[0],5);
       
       //сигнал на покупку
       //если текущее значение SAR ниже минимума свечи 1
       if(SARValue > PriceArray[1].high)
       {
          signal="Sell";
       }
       
       //сигнал тейк-профита
       //если текущее значение SAR выше максимума свечи 1
       if(SARValue < PriceArray[1].low)
       {
          signal="Take Profit";
       }
       
       //выводим на график комментарий с сигналом
       Comment("The signal is ",signal);
      }
    //+------------------------------------------------------------------+
    
    • Что изменилось в коде по сравнению с предыдущим:
      • Условия сигнала на продажу — когда значение SAR поднимается выше максимальной цены:
       if(SARValue > PriceArray[1].high)
       {
          signal="Sell";
       }
    
      • Условия сигнала тейк-профита — когда значение SAR опускается ниже минимальной цены:
       if(SARValue < PriceArray[1].low)
       {
          signal="Take Profit";
       }
    

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

    SAR Downtrend - В Навигаторе

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

    SAR Downtrend - окно стратегии

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

    SAR Downtrend - на графике

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

    • Сигнал для Sell:

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

    • Сигнал тейк-профита:

    SAR Downtrend - сигнал тейк-профита

    • Стратегия третья — сигнал на покупку со стратегией трейлинг-стопа

    Согласно этой стратегии, советник должен отображать сигнал на покупку и трейлинг-стопы в виде комментариев на графике в соответствии со значением Parabolic SAR и текущими ценами. Он должен показывать значение трейлинг-стопа на графике, а затем генерировать сигнал на новую покупку, если значение SAR опускается ниже минимальной цены. Код торговой системы по этой стратегии будет таким:

    //+------------------------------------------------------------------+
    //|         Parabolic SAR System - Buy signal with training stop.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="";
       
       //создаем массив цен
       MqlRates PriceArray[];
       
       //сортируем массив от текущих данных
       ArraySetAsSeries(PriceArray,true);
       
       //заполняем массив ценовыми данными
       int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
       
       //создаем массив SAR
       double SARArray[];
       
       //определение SAR
       int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
       
       //сортируем массив от текущих данных
       ArraySetAsSeries(SARArray,true);
       
       //заполняем массив SARArray данными SARDef 
       CopyBuffer(SARDef,0,0,3,SARArray);
       
       //вычисляем значение последних данных
       double SARValue=NormalizeDouble(SARArray[0],5);
       
       //сигнал на покупку
       //если текущее значение SAR ниже минимума свечи 1
       if(SARValue < PriceArray[1].low)
       {
          signal="Buy";
       }
       
       //выводим на график комментарий с сигналом и трейлинг-стопом
       Comment("The signal is ",signal,"\n", "Trailing Stop is ",SARValue);
      }
    //+------------------------------------------------------------------+
    
    • Отличия в коде:
      • Добавилось значение трейлинг-стопа, которое является значением SAR — оно отображается отдельной строкой в комментарии на графике:
    Comment("The signal is ",signal,"\n", "Trailing Stop is ",SARValue);

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

    SAR-Uptrend - Сигнал на покупку со стратегией трейлинг-стопа - программа в Навигаторе

    Чтобы запустить советник в платформе, перетаскиваем программу из Навигатора на график, откроется вот такое окно:

    SAR-Uptrend - Сигнал на покупку со стратегией трейлинг-стопа - окно программы

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

    SAR-Uptrend - Сигнал на покупку со стратегией трейлинг-стопа - программа на графике

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

    SAR-Uptrend - Сигнал на покупку со стратегией трейлинг-стопа 1

    На следующем рисунке показано, как значение трейлинг-стопа будет увеличиваться вместе с ценой:

    SAR-Uptrend - Сигнал на покупку со стратегией трейлинг-стопа 2

    • Стратегия четвертая — сигнал на продажу со стратегией трейлинг-стопа

    Согласно этой стратегии, советник должен отображать сигнал на продажу и трейлинг-стопы в виде комментариев на графике в соответствии со значением Parabolic SAR и текущими ценами. Он должен показывать значение трейлинг-стопа на графике, а затем генерировать сигнал на новую продажу, если значение SAR поднимается выше максимальной цены. Код торговой системы по этой стратегии будет таким:

    //+-----------------------------------------------------------+
    //| Parabolic SAR System - Sell signal with trailing stop.mq5 |
    //| Copyright 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="";
       
       //создаем массив цен
       MqlRates PriceArray[];
       
       //сортируем массив от текущих данных
       ArraySetAsSeries(PriceArray,true);
       
       //заполняем массив ценовыми данными
       int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
       
       //создаем массив SAR
       double SARArray[];
       
       //определение SAR
       int SARDef=iSAR(_Symbol,_Period,0.02,0.2);
       
       //сортируем массив от текущих данных
       ArraySetAsSeries(SARArray,true);
       
       //заполняем массив SARArray данными SARDef 
       CopyBuffer(SARDef,0,0,3,SARArray);
       
       //вычисляем значение последних данных
       double SARValue=NormalizeDouble(SARArray[0],5);
       
       //сигнал на покупку
       //если текущее значение SAR ниже минимума свечи 1
       if(SARValue > PriceArray[1].high)
       {
          signal="Sell";
       }
       
       //выводим на график комментарий с сигналом и трейлинг-стопом
       Comment("The signal is ",signal,"\n", "Trailing Stop is ",SARValue);
      }
    //+------------------------------------------------------------------+
    
    • Отличия в коде:
      • Условия сигнала на продажу:
       if(SARValue > PriceArray[1].high)
       {
          signal="Sell";
       }
    

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

    SAR-Downtrend - Сигнал на продажу со стратегией трейлинг-стопа - программа в Навигаторе

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

    SAR-Downtrend - Сигнал на продажу со стратегией трейлинг-стопа - окно программы

    Нажимаем "ОК", и эксперт появится на графике:

    SAR-Downtrend - Сигнал на продажу со стратегией трейлинг-стопа - программа на графике

    Примеры сигналов, сгенерированных этим советником:

    SAR Downtrend - сигнал на продажу и трейлинг-стоп 1

    На следующем рисунке показано, как значение трейлинг-стопа будет уменьшаться, следуя за ценой:

    SAR Downtrend - сигнал на продажу и трейлинг-стоп 2


    Заключение

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

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

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


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

    Нейросети — это просто (Часть 21): Вариационные автоэнкодеры (VAE) Нейросети — это просто (Часть 21): Вариационные автоэнкодеры (VAE)
    В прошлой статье мы познакомились с алгоритмом работы автоэнкодера. Как и любой другой алгоритм, он имеет свои достоинства и недостатки. В оригинальной реализации автоэнкодер выполняет задачу максимально разделить объекты из обучающей выборки. А о том, как бороться с некоторыми его недостатками мы поговорим в этой статье.
    Разработка торговой системы на основе индикатора ATR Разработка торговой системы на основе индикатора ATR
    В этой статье мы изучим новый технический инструмент, который можно использовать в торговле. Это продолжение серии, в которой мы учимся проектировать простые торговые системы. В этот раз мы будем работать с еще одним популярным техническим индикатором — Средний истинный диапазон (Average True Range, ATR).
    Разработка торгового советника с нуля (Часть 19): Новая система ордеров (II) Разработка торгового советника с нуля (Часть 19): Новая система ордеров (II)
    В данной статье мы будем разрабатывать графическую систему ордеров вида «посмотрите, что происходит». Следует сказать, что мы не начнем с нуля, а модифицируем существующую систему, добавив еще больше объектов и событий на график торгуемого нами актива.
    Эксперименты с нейросетями (Часть 2): Хитрая оптимизация нейросети Эксперименты с нейросетями (Часть 2): Хитрая оптимизация нейросети
    Нейросети наше все. Проверяем на практике, так ли это. MetaTrader 5 как самодостаточное средство для использования нейросетей в трейдинге. Простое объяснение.