Разработка торговой системы на основе Импульса (Momentum)

Mohamed Abdelmaaboud | 12 мая, 2022

Введение

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

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

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

Подробнее об индикаторе Momentum мы узнаем в первой части "Определение импульса". Рассмотрим, что такое индикатор Momentum и как он рассчитывается. Затем познакомимся с простой стратегией, которая позволит лучше понять индикатор Momentum и того, как он может быть полезен. Затем разработаем план торговой системы для рассмотренной торговой стратегии Momentum. Этот план поможет в разработке системы на MQL5. Затем мы напишем сам код и научимся его запускать. Полученная система будет автоматически показывать сигналы от торговой стратегии. 

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

Скачайте инсталлятор, установите и откройте MetaTrader 5. Вот такое окно вы увидите:

Платформа MetaTrader 5

Далее нужно открыть редактор кода MetaEditor, в котором мы будем писать код. Открыть его можно несколькими способами:

На мой взгляд, проще всего это сделать первым способом — открыть MetaTrader 5 и нажать клавишу F4. После этого откроется редактор MetaEditor.

Второй способ — через Меню "Сервис":

MetaEditor способ 1

Третий способ — кнопка IDE на панели в MetaTrader 5:

MetaEditor способ 2

После этого откроется окно редактора:

Окно редактора MetaEditor

Дополнительную информацию можно найти в ранее опубликованной статье в этой серии: "Как и зачем разрабатывать собственную систему для алгоритмической торговли"

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

Обратите внимание, что перед тем, как использовать что-то новое, обязательно нужно протестировать: то, что подходит мне, может не подойти вам и вашему стилю торговли. Поэтому очень важно тестировать все на демо-счете — это поможет понять, будет ли инструмент полезен для вас или нет. 

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

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


Определение импульса

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

Концепция импульса заключается в измерении скорости чего-либо. В нашем случае он измеряет скорость изменения цен. Таким образом, он сравнивает текущую цену с предыдущим значением и измеряет скорость изменения между этими двумя значениями. Именно это и делает индикатор Моментум — он измеряет скорость изменения цены или ускорение тренда.

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

Дополнительную информацию вы можете найти в предыдущей статье из этой серии: "Разработка торговой системы на основе RSI". 

Концепция импульса дает еще одно важное измерение — оно показывает силу движения тренда. Поэтому теперь мы можем определять не только направление тренда, но и измерить силу этого тренда, анализируя импульс.

Momentum — опережающий индикатор, то есть он отображает информацию до окончания формирования цены, а значение индикатора изменяется раньше, чем изменяется график.

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

Есть два способа расчета индикатора Momentum:

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

Расчет очень простой — находим разницу между ценами закрытия текущего периода по сравнению с предыдущим периодом.

Импульс = Текущая цена закрытия - Цена закрытия (n)

n = 14, это значение периода по умолчанию

Результатом такого расчета будет линия индикатора Momentum, которая колеблется выше и ниже нуля.

Рассмотрим пример расчета индикатора. Допустим, у нас есть следующие данные:

День Цена закрытия
1
10
2 12
3 15
4 17
5 19
6 20
7 18
8 16
9 20
10 22
11 24
12 20
13 18
14 17
15 15

Теперь, если нужно рассчитать Моментум на 15-й день, получим следующее:

Импульс = Текущая цена закрытия - Цена закрытия (n)

n = 14, это первый день

Моментум = 15 - 10 = 5

Затем это значение отображается около уровня 5 выше 0, поскольку индикатор Momentum колеблется выше и ниже нуля. Здесь видны недостатки этого расчета, о которых говорилось ранее: между расчетными данными отсутствуют данные, поскольку мы вычитаем 14 периодов из текущего. Другим недостатком является то, что индикатор не имеет пределов, т.е. максимальное и минимальное значения не ограничены. 

Другой способ расчета индикатора Momentum — использование коэффициента. Именно такой расчет используется в MetaTrader 5. Он состоит из следующих шагов:

Моментум = (Текущая цена закрытия / Цена закрытия (n))*100

n = 14, это первый день

Применив этот расчет к предыдущему примеру, получаем такой Моментум:

Momentum = (15 / 10)*100 = 150

Значение отображается на уровне 150 выше 0, в данном случае индикатор Momentum колеблется выше и ниже уровня 100. В статье мы будем использовать этот способ расчета и на нем будет основана стратегия.

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

В MetaTrader 5 в меню "Вставка" выберите "Индикаторы", затем "Осцилляторы", затем Momentum, как показано на рисунке ниже:

Вставка индикатора Momentum

После того, как вы выберете After Momentum, откроется окно параметров индикатора:

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

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

  1. Период для сравнения с текущей ценой, здесь по умолчанию 14.
  2. Тип цены, по которой будет рассчитываться импульс (закрытие, открытие, максимум, минимум и т.д.).
  3. Настройка отображение индикатора на графике: цвет, тип и толщина линии.

Выберите подходящие параметры, нажмите ОК, и индикатор появится на графике, как на следующем рисунке:

Momentum на графике


Стратегия торговли по индикатору Momentum

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

Наша стратегия будет искать пересечение линии Momentum с уровнем 100. Когда линия Momentum пробьет 100 вверх, это будет сигналом на покупку. Когда линия Momentum пробьет 100 вниз, это будет сигналом на открытие короткой сделки.

Сигнал будет формироваться на основе направления тренда — это будет фильтром генерируемого сигнала. Индикатор Momentum дает ранние сигналы и развороты, которые можно использовать для фильтрации генерируемых сигналов.

Итак, стратегия такая:

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

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

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

При нисходящем тренде

На рисунке показан пример сигнала во время нисходящего тренда, когда индикатор Momentum пересекает уровень 100:

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

Схема торговой системы Momentum

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

Схема Momentum для восходящего тренда

Схема Momentum для нисходящего тренда

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


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

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

//+------------------------------------------------------------------+
//|                                       Simple Momentum 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()
  {
   //Создаем массив цен
   double PriceArray [];
   
   //Определение свойств Импульса
   int MomentumDef = iMomentum(_Symbol,_Period,14,PRICE_CLOSE);
   
   //Сортировка ценового массива
   ArraySetAsSeries(PriceArray,true);
   
   //Копируем результаты
   CopyBuffer(MomentumDef,0,0,3,PriceArray);
   
   //Находим значения Моментума для текущей цены
   double MomentumValue = NormalizeDouble(PriceArray[0],2);
   
   //Вывод комментария со значением Momentum на графике
   if(MomentumValue>100) Comment("MOMENTUM VALUE IS: ",MomentumValue);
   
  }
//+------------------------------------------------------------------+

Написанную программу нужно скомпилировать и запустить в торговой платформе MetaTrader 5. Для того в терминале MetaTrader 5, в окне Навигатора находим нужный файл. Окно Навигатора обычно открыто в терминале. Если нет, зайдите в меню "Вид" и выберите "Навигатор" или нажмите Ctrl + N в открытом MetaTrader 5.

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

Индикатор Momentum в навигаторе

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

Окно простого Momentum

Разрешите автоматическую торговлю Allow Algo Trading и нажмите ОК. Программа запустится и на графике появятся соответствующие комментарии. Вот пример работы программы:

Простой Momentum на графике

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

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

Это реализовано в следующем коде:

//+------------------------------------------------------------------+
//|                                    Momentum 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()
  {
   //Создаем массив цен
   double PriceArray [];
   
   //Определение свойств Импульса
   int MomentumDef = iMomentum(_Symbol,_Period,14,PRICE_CLOSE);
   
   //Сортировка ценового массива
   ArraySetAsSeries(PriceArray,true);
   
   //Копируем результаты
   CopyBuffer(MomentumDef,0,0,3,PriceArray);
   
   //Находим значения Моментума для текущей цены
   double MomentumValue = NormalizeDouble(PriceArray[0],2);
   
   //Вывод комментария со значением Momentum на графике
   if(MomentumValue>100) Comment("MOMENTUM UPTREND STRATEGY - BUY");
   if(MomentumValue<100) Comment("MOMENTUM UPTREND STRATEGY - No SIGNAL");
  }
//+------------------------------------------------------------------+

Запустите написанный и скомпилированный код в торговом терминале — там он будет генерировать нужные сигналы на графике. В окне Навигатора находим программу:

Индикатор Momentum в навигаторе 1

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

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

Разрешите автоматическую торговлю Allow Algo Trading и нажмите ОК. Файл запустится на графике:

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

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

Стратегия Momentum Uptrend - Buy

Стратегия Momentum Uptrend - нет сигнала

При нисходящем тренде

Вот код работы этой стратегии:

//+------------------------------------------------------------------+
//|                                  Momentum 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()
  {
   //Создаем массив цен
   double PriceArray [];
   
   //Определение свойств Импульса
   int MomentumDef = iMomentum(_Symbol,_Period,14,PRICE_CLOSE);
   
   //Сортировка ценового массива
   ArraySetAsSeries(PriceArray,true);
   
   //Копируем результаты
   CopyBuffer(MomentumDef,0,0,3,PriceArray);
   
   //Находим значения Моментума для текущей цены
   double MomentumValue = NormalizeDouble(PriceArray[0],2);
   
   //Вывод комментария со значением Momentum на графике
   if(MomentumValue<100) Comment("MOMENTUM DOWNTREND STRATEGY - SHORT");
   if(MomentumValue>100) Comment("MOMENTUM DOWNTREND STRATEGY - No SIGNAL");
  }
//+------------------------------------------------------------------+

После того, как мы написали текст кода, его надо скомпилировать. Для этого нажимаем кнопку "Compile". Далее снова запускаем на графике. Находим файл в окне Навигатора, в папке Expert Advisors:

Индикатор Momentum в навигаторе 2

Исполняем код, перетащив файл на график или кликнув на нем дважды. Откроется окно параметров программы:

Окно стратегии Momentum Downtrend

Снова разрешаем автоматическую торговлю Allow Algo Trading и нажимаем ОК. Программа запустится на графике и будет работать, как показано на рисунке:

Стратегия Momentum Downtrend на графике

Стратегия будет генерировать такие сигналы.

Стратегия Momentum Downtrend - Short

Стратегия Momentum Downtrend - нет сигнала

Итак, мы разработали торговую систему с использованием индикатора Momentum, используя простую торговую стратегию. Как я уже говорил, существует множество разных стратегий на основе индикатора Momentum, но в этой статье мы разобрали простую торговую стратегию. Главная цель — помочь понять концепцию индикатора и научиться программировать стратегии. Надеюсь, эта тема поможет найти новые идеи относительно того, как можно улучшить торговлю с помощью MQL5.


Заключение

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

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

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

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