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

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

MetaTrader 5Трейдинг | 22 августа 2022, 09:43
1 939 16
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Введение

Это новая статья из серии, в которой мы учимся создавать торговые системы на основе популярных технических индикаторов. В этот раз мы будем создавать простые торговые системы на основе показателей от индикатора Williams %R (%R, Процентный диапазон Уильямса). Помимо тщательного изучения самого технического индикатора мы рассмотрим варианты его эффективного использования на основе его внутренней концепции. Я считаю, что если понять саму суть вещей, можно не только эффективнее их использовать, но также станет возможным поиск новых идей относительно изученной концепции или даже другого инструмента, напрямую или косвенно связанного с изучаемым. В любом случае, наша главная цель — научиться торговать эффективнее. Поэтому я использую подход, при котором мы разбираемся с самой сутью, с корнями материала, чтобы лучше все понять.

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

  1. Определение индикатора Williams' %R
  2. Стратегия по индикатору Williams' %R
  3. Схема разработки стратегии по Williams' %R
  4. Торговая система по индикатору Williams' %R
  5. Заключение

В первом разделе узнаем, что же из себя представляет этот индикатор Процентного диапазона Уильямса, как он строится, как его можно рассчитать и что он измеряет. Затем узнаем, как его можно использовать. Для этого рассмотрим примеры некоторых простых стратегий, основанных на концепции этого индикатора — в разделе "Стратегия по Williams' %R". Далее мы разработаем пошаговый план для каждой рассмотренной стратегии, который поможет перейти к самой важной задаче в рамках этой статьи — написанию кода торговой системы на основе этого индикатора. План для написания системы будем составлять в разделе "Схема разработки стратегии по Williams' %R". И наконец, подойдем к самой интересной теме в этой статье — созданию торговой системы на основе рассмотренных стратегий по индикатору.

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

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

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

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


Определение индикатора Williams' %R

Итак, как я уже упоминал во введении, мы подробно изучим индикатор Williams %R. Процентный диапазон Уильямса (Williams' %R, WPR) — это индикатор импульса, который разработал Ларри Вильямс. Можно сказать, что WPR — противоположность Стохастику, поскольку разница между ними заключается в том, как они измеряются. Также можно сказать, что WPR можно использовать так же, как Стохастик. Если хотите узнать больше о Стохастике, рекомендую прочитать мою предыдущую статью "Разработка торговой системы на основе Стохастика". Индикатор WPR измеряет взаимосвязь между ценой закрытия и диапазоном максимума-минимума. Показатели WPR колеблются между значениями 0 и -100. Поскольку WPR является индикатором импульса, его также можно использовать для измерения силы тренда. О типах трендов мы уж не раз говорили в предыдущих статья. Например, можете прочитать подробное описание тренда из ранней статьи по ссылке. Имеет смысл наблюдать за важными уровнями в индикаторе: -80, -20 и середина диапазона -50.

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

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

  1. Рассчитать самый высокий максимум = максимальное значение максимумов за расчетный период.
  2. Рассчитать самый низкий минимум = минимальное значение минимума за расчетный период.
  3. WPR = (Самый высокий максимум - Закрытие)/(Самый высокий максимум - Самый низкий минимум) * -100

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

Период Максимум Минимум Закрытие
1 1.078 1.0678 1.0733
2 1.0788 1.0726 1.0777
3 1.0766 1.0697 1.0727
4 1.0733 1.0662 1.0724
5 1.074 1.0642 1.068
6 1.0749 1.0661 1.0734
7 1.0698 1.0558 1.0689
8 1.0599 1.0532 1.056
9 1.0608 1.046 1.0586
10 1.0565 1.046 1.0466
11 1.0556 1.0429 1.0547
12 1.0444 1.0388 1.0431
13 1.0421 1.035 1.0411
14 1.053 1.0353 1.0379
15 1.0577 1.0502 1.0511
16 1.0586 1.0525 1.0527
17 1.0594 1.0495 1.0555
18 1.0601 1.0482 1.0551
19 1.0642 1.0493 1.054
20 1.0632 1.0505 1.0621
21 1.0579 1.0491 1.052
22 1.0567 1.0491 1.051
23 1.0602 1.0381 1.0547
24 1.0509 1.0359 1.0443
25 1.0486 1.0396 1.0414
26 1.052 1.04 1.0408
27 1.0644 1.0505 1.0515
28 1.0775 1.0611 1.0614
29 1.0749 1.0671 1.0714
30 1.0715 1.0652 1.0699

Проделаем необходимые шаги для расчета значений WPR. Обратите внимание, что мы будем использовать настройки периода по умолчанию, равные 14.

1 - получаем самый высокий максимум.

Значения максимального максимума

2 - получаем самый низкий минимум.

Значения минимального минимума

3 - находим WPR.

Итак, мы рассчитали значения WPR. Мы получим линию, которая колеблется между уровнями 0 и -100 для измерения импульса. Но сейчас нам не нужно рассчитывать индикатор вручную, поскольку уже есть готовый к использованию индикатор в торговом терминале MetaTrader 5, и все, что нужно сделать, это выбрать его из списка индикаторов.

Запуск W_R на графике

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

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

1 — установить нужный период для расчета.

2 — выбрать цвет линии WPR.

3 — стиль линии WPR.

4 — толщина линии WPR.

Кроме того, дополнительно можно настраивать уровни индикатора на вкладке Levels, как показано ниже:

Уровни W_R

На рисунке выше видно, что у нас два уровня: -80 и -20. Это важные уровни для определения высоких и низких показателей. Кроме того, можно добавить и другие уровни, которые могут быть полезны при анализе, например, уровень -50. Чтобы его добавить, нажимаем "Add" и выбираем уровень, который будет отображаться в окне индикатора на графике.

После определения всех необходимых параметров нажимаем «ОК», и индикатор запустится на графике, как показано ниже.

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

Как видно на рисунке выше, черная линия в нижнем окне графика колеблется между уровнями 0 и -100 — она измеряет импульс. Кроме того, уровень середины диапазона -50 является важным уровнем, и он дает значимую информацию о движении цены, поскольку, когда индикатор WPR пересекает уровень -50 снизу вверх, это означает, что цена торгуется в верхней половине диапазона, образованного между максимумом и минимумом расчетного периода. И наоборот, когда WPR пересекает уровень -50 сверху вниз, это означает, что цена торгуется в нижней половине диапазона. Далее, если показатели индикатор находятся в области ниже -80, это низкое значение, которое указывает на то, что цена торгуется вблизи своего минимума. Если индикатор выше уровня -20, это означает высокое значение, которое указывает на то, что цена торгуется вблизи своего максимума. Эти уровни -80 и -20 образуют очень важные области, которые указывают на то, что цена достигла области перекупленности или перепроданности.


Стратегия по индикатору Williams' %R

В этой части на примере простых стратегий мы узнаем, как можно использовать индикатор Williams' %R в соответствии с его концепцией. Мы изучим три различные стратегии, которые основаны на идее, лежащей в основе индикатора. Первую стратегию назовем Williams %R - OB and OS (области перекупленности и перепроданности), вторую назовем Williams %R - crossover (пересечение), а третью назовем Williams %R - MA. Давайте определим, как можно использовать эти стратегии.

  • Стратегия первая: Williams %R - OB and OS (зоны перекупленности и перепроданности)

Индикатор позволяет определять, когда торговый инструмент находится в зоне перекупленности или в зоне перепроданности, исходя из определенного условия. Когда значение Williams %R ниже уровня -80, это является сигналом перепроданности. Когда значение Williams %R находится выше уровня -20, это является сигналом перекупленности.

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

Значение WPR < -80 --> перепроданность

Значение WPR > - 20 --> перекупленность

  • Стратегия вторая: Williams %R — crossover (пересечение)

В соответствии с этой стратегией мы можем получать сигналы на покупку или продажу, которые генерируются при пересечении между текущим значением Williams %R, предыдущим и уровнем -50. Когда предыдущее значение WPR ниже -50, а текущее — выше -50, это сигнал на покупку. Когда предыдущее значение WPR выше -50, а текущее — ниже уровня -50, это сигнал на продажу.

Эта стратегия генерирует сигналы на покупку и продажу на основе пересечения с важным уровнем -50, она будет более эффективной, если объединить ее с другим техническим инструментом для подтверждения этих сигналов.

Предыдущий WPR < -50 и текущий WPR > -50 --> сигнал на покупку

Предыдущий WPR > -50 и текущий WPR < -50 --> сигнал на продажу

  • Стратегия третья: Williams %R - MA

В соответствии с этой стратегией мы будем получать уведомление при образовании сигнала на покупку или продажу. Но в этот раз используется другое условие: сигнал на покупку будет формироваться, когда цена Ask превысит значение скользящей средней, а Williams %R станет выше уровня -50. Сигнал на продажу будет формироваться, когда цена бид будет ниже значения скользящей средней, а значение Williams %R ниже значения скользящей средней.

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

Ask > значение MA и WPR > -50 --> сигнал на покупку

Bid < значение MA и WPR < -50 --> сигнал на продажу


Схема разработки стратегии по Williams' %R

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

  • Стратегия первая: Williams %R - OB and OS (зоны перекупленности и перепроданности)

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

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

 

  • Стратегия вторая: Williams %R — crossover (пересечение)

В соответствии с этой стратегией, советник должен генерировать сигналы на покупку и продажу на основе анализа трех значение: предыдущее WP , текущее WPR и -50. Для генерации соответствующего сигнала программа должна сравнивать эти три значения на каждом тике и определять положения предыдущего и текущего WPR относительно уровня -50. Если предыдущее значение WPR ниже уровня -50 и текущее WPR ниже -50, советник должен формировать и выводить на график сигнал на покупку, а также выводить текущее и предыдущее значения индикатора Williams %R. Если же предыдущее значение WPR выше уровня -50 и текущее WPR выше -50, советник должен формировать и выводить на график сигнал на продажу, и снова выводить комментарий с текущим и предыдущим значением индикатора Williams %R.

Ниже представлена схема этой стратегии.

  • Стратегия третья: Williams %R - MA

Создадим торговую систему, которая будет генерировать сигналы на покупку и продажу в соответствии с набором условий и дополнительным подтверждением. Необходимо, чтобы советник постоянно проверял уровни Ask и Bid, значение WPR, текущую среднюю и уровень -50. Если советник определит, что цена Ask выше скользящей средней, а значение WPR выше уровня -50, он должен сформировать сигнал на покупку, а также вывести на график комментарий со значениями Williams %R и экспоненциальной скользящей средней. Если же значение цены Bid будет ниже скользящей средней, а WPR ниже уровня -50, советник должен сформировать сигнал на продажу и вывести на график значения Williams %R и экспоненциальной средней.

Вот такая пошаговая схема поможет разработать торговую систему по этой стратегии:

Торговая система по индикатору Williams' %R

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

Итак, посмотрим, как написать код такой торговой системы:

  • Создаем массив с помощью функции типа double, которая представляет значения с плавающей точкой.
double WPArray[];
  • Сортируем созданный массив цен начиная с текущих данных, для этого будем использовать функцию ArraySetAsSeries — она возвращает true в случае успеха или false в случае неудачи (bool). Параметрами этой функции являются массив[] и флаг.
ArraySetAsSeries(WPArray,true);
  • Определяем свойства индикатора Williams' %R, используя функцию iWPR. Для этого создадим переменную integer WPDef для определения Williams' %R. Функция iWPR возвращает хэндл индикатора Williams' Percent Range. Параметрами являются имя символа, период и период усреднения.
    • Будем использовать _Symbol — работа на текущем символе графика, и _Period — текущий таймфрейм графика.
int WPDef = iWPR(_Symbol,_Period,14);
  • Копируем ценовые данные в созданный массив с помощью функции CopyBuffer. Она возвращает количество скопированных данных или -1 в случае ошибки. Параметрами функции являются хэндл индикатора, буфер индикатора, начальная позиция, объем копируемых данных и целевой массив для копирования.
CopyBuffer(WPDef,0,0,3,WPArray);
  • Получаем значения индикатора %R Уильямса для текущих данных с помощью функции NormalizeDouble. Для этого создаем переменную double WPValue, в которую будет получено значение. Параметры функции NormalizeDouble: нормализуемое число и количество знаков после запятой.
double WPVal = NormalizeDouble(WPArray[0],2);
  • С помощью функции Comment выводим на график комментарий со значением Williams' %R.
Comment("Williams' %R Value is",WPVal);

Вот так выглядит полный код этой программы — в нем собраны все рассмотренные функции:

//+------------------------------------------------------------------+
//|                                            Simple Williams%R.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 WPArray[];

   ArraySetAsSeries(WPArray,true);

   int WPDef = iWPR(_Symbol,_Period,14);

   CopyBuffer(WPDef,0,0,3,WPArray);

   double WPVal = NormalizeDouble(WPArray[0],2);

   Comment("Williams' %R Value is",WPVal);

  }
//+------------------------------------------------------------------+

После компиляции программа советника появится в окне Навигатора в MetaTrader 5, в папке Expert Advisors, как показано на рисунке ниже:

WPR в навигаторе 1

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

Окно программы Simple W_R

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

 Программа Simple W_R на графике

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

 Сигнал от программы Simple W_R

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

Simple W_R - тот же сигнал

Как видно на скриншоте, на графике запущены эксперт и индикатор, и оба они генерируют одно и то же значение. В правом верхнем углу видно, что на графике работает советник Simple Williams %R, а в левом верхнем углу отображается комментарий со сгенерированным им сигналом. Значение индикатора составляет -78,15, что совпадает со значением встроенного индикатора, который запущен на графике в дополнительном окне индикатора — такое же значение отображается над линией WPR с левой стороны. 

  • Стратегия первая: Williams %R - OB and OS (зоны перекупленности и перепроданности)

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

//+------------------------------------------------------------------+
//|                                         Williams%R - OB & OS.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 WPArray[];
   
   ArraySetAsSeries(WPArray,true);
   
   int WPDef = iWPR(_Symbol,_Period,14);
   
   CopyBuffer(WPDef,0,0,3,WPArray);
   
   double WPVal = NormalizeDouble(WPArray[0],2);
   
   if(WPVal<-80)
   {
      Comment("Over Sold");
   }
   
   if(WPVal>-20)
   {
      Comment("Over Bought");
   }
   
  }
//+------------------------------------------------------------------+

В этом коде к имеющимся функциям добавились новые части.

Условия перепроданности:

   if(WPVal<-80)
   {
      Comment("Over Sold");
   }

Условия перекупленности:

   if(WPVal>-20)
   {
      Comment("Over Bought");
   }

Чтобы затем запустить скомпилированный код на исполнение в платформе MetaTrader 5 для автоматической генерации сигнала, делаем следующее:

Находим файл советника в окне навигатора.

WPR в навигаторе 2

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

Окно стратегии Williams_R - OB _ OS

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

Стратегия Williams_R - OB _ OS на графике

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

Перекупленность:

Williams_R - OB _ OS - сигнал перекупленности

На этом скриншоте видно, что советник сгенерировал сигнал перекупленности, потому что в дополнительном окне индикатор WPR поднялся выше уровня -20, что означает, что цены торгуются вблизи максимума за последние 14 периодов.

Перепроданность:

Williams_R - OB _ OS - сигнал перепроданности

В этом примере значение опустилось ниже уровня -80, то есть цены торгуются вблизи своего минимума, поэтому сформировался сигнал перепроданности.

  • Стратегия вторая: Williams %R — crossover (пересечение)

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

//+------------------------------------------------------------------+
//|                                       Williams%R - Crossover.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double WPArray[];

   ArraySetAsSeries(WPArray,true);

   int WPDef = iWPR(_Symbol,_Period,14);

   CopyBuffer(WPDef,0,0,3,WPArray);

   double WPVal = NormalizeDouble(WPArray[0],2);
   double WPPrevVal = NormalizeDouble(WPArray[1],2);

   if(WPPrevVal<-50 && WPVal>-50)
     {
      Comment("Buy signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "Williams % R Previous Value is",WPPrevVal);
     }

   if(WPPrevVal>-50 && WPVal<-50)
     {
      Comment("Sell signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "Williams % R Previous Value is",WPPrevVal);
     }

  }
//+------------------------------------------------------------------+

В этом коде к имеющимся функциям добавились новые части.

Получаем предыдущее значение Williams' %R с помощью функции NormalizeDouble. Для получения этого значения используем созданную double-переменную WPPrevValue. Параметры функции NormalizeDouble: нормализуемое число и количество знаков после запятой.

double WPPrevVal = NormalizeDouble(WPArray[1],2);

Условия стратегии по пересечению Williams%R.

Условия для сигнала на покупку:

   if(WPPrevVal<-50 && WPVal>-50)
     {
      Comment("Buy signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "Williams % R Previous Value is",WPPrevVal);
     }

Условия для сигнала на продажу:

   if(WPPrevVal>-50 && WPVal<-50)
     {
      Comment("Sell signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "Williams % R Previous Value is",WPPrevVal);
     }

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

WPR в навигаторе 2

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

Окно программы Williams_R - Crossover

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

Система Williams_R - Crossover на графике

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

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

Стратегия Williams_R - Crossover - сигнал на покупку

На графике видно, что советник сгенерировал сигнал на покупку, также в комментарии в верхнем левом углу выведены значения текущего и предыдущего Williams %R. В данном случае видно, что сформировались условия для такого сигнала: WPR = -55.93, т.е. ниже уровня -50, а текущее значение WPR = -41.09, что выше этого уровня -50.

Сигнал для Sell:

Стратегия Williams_R - Crossover - сигнал на продажу

 

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

На графике сформировались условия для такого сигнала: предыдущее значение = -29.95, что выше уровня -50, а текущее значение WPR = -58.8, что ниже уровня -50.

  • Стратегия третья: Williams %R - MA

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

//+------------------------------------------------------------------+
//|                                              Williams%R & MA.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 WPArray[];
   double MAArray[];

   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   ArraySetAsSeries(WPArray,true);
   ArraySetAsSeries(MAArray,true);

   int WPDef = iWPR(_Symbol,_Period,14);
   int MADef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);

   CopyBuffer(WPDef,0,0,3,WPArray);
   CopyBuffer(MADef,0,0,3,MAArray);

   double WPVal = NormalizeDouble(WPArray[0],2);
   double MAVal = NormalizeDouble(MAArray[0],2);

   if(Ask>MAVal && WPVal>-50)
     {
      Comment("Buy signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "EMA Value is",MAVal);
     }

   if(Bid<MAVal && WPVal<-50)
     {
      Comment("Sell signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "EMA Value is",MAVal);
     }

  }
//+------------------------------------------------------------------+

В этом коде к имеющимся функциям добавились новые части.

Создаем массивы для значений WP и MA.

double WPArray[];
double MAArray[];

Получаем значения ask и bid в созданные для них переменных типа double.

double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

Сортируем эти массивы как временной ряд — начиная с текущих данных:

ArraySetAsSeries(WPArray,true);
ArraySetAsSeries(MAArray,true);

Определяем Williams' PR с помощью функции iWPR и скользящую среднюю с помощью функции iMA. Параметры iWPR мы уже упоминали ранее. Параметры iMA — это символ, период, период сглаживания, горизонтальный сдвиг, тип сглаживания и тип цены.

int WPDef = iWPR(_Symbol,_Period,14);
int MADef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);

Копируем ценовые данные в созданный массив с помощью функции CopyBuffer.

CopyBuffer(WPDef,0,0,3,WPArray);
CopyBuffer(MADef,0,0,3,MAArray);

Получаем значения текущего RP Williams и скользящей средней.

double WPVal = NormalizeDouble(WPArray[0],2);
double MAVal = NormalizeDouble(MAArray[0],2);

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

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

   if(Ask>MAVal && WPVal>-50)
     {
      Comment("Buy signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "EMA Value is",MAVal);
     }

В случае сигнала на продажу

   if(Bid<MAVal && WPVal<-50)
     {
      Comment("Sell signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "EMA Value is",MAVal);
     }

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

WPR в навигаторе 4

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

 Окно советника Williams_R _ MA

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

 Советник Williams_R _ MA на графике

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

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

 Williams_R _ MA - сигнал на покупку

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

  • Сигнал на покупку 
  • Значение WPR
  • Значение EMA value

Условия соблюдены. Цена Ask выше, чем MA, а WPR выше уровня -50

В случае сигнала на продажу:

 Williams_R _ MA - сигнал на продажу

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

  • Сигнал на продажу 
  • Значение WPR
  • Значение EMA value

Условия соблюдены. Цена Bid ниже, чем MA, а WPR ниже уровня -50


Заключение

Процентный диапазон Уильямса (Williams' PR) — важный технический инструмент, один из самых популярный индикаторов, используемых для измерения импульса. Его также можно комбинировать с другими техническими индикаторами, чтобы полнее использовать его преимущества. Вообще, это одно из наиболее важных особенностей технического анализа — можно использовать более одного инструмента, чтобы получить более одной точки зрения и принять более взвешенное решение.

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

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

  • Williams %R - OB и OS: генерация сигналов перекупленности и перепроданности при достижении ценами соответствующих зон.
  • Williams %R - пересечение уровней: сигналы на покупку и продажу генерируются при пересечении определенных уровней.
  • Williams %R - MA: генерация сигналов на покупку и продажу на основе показателей WPR и экспоненциальной скользящей средней.

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

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

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

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

Прикрепленные файлы |
Последние комментарии | Перейти к обсуждению на форуме трейдеров (16)
Anatoli Kazharski
Anatoli Kazharski | 22 авг. 2022 в 15:39
Pavel Malyshko #:

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

То есть даже минимальной исследовательской жилки нет? Или больше пообщаться не с кем на вольные темы?

Прекращайте флуд. А если нужна помощь, то можете обращаться. )

Pavel Malyshko
Pavel Malyshko | 23 авг. 2022 в 19:15
Anatoli Kazharski #:

То есть даже минимальной исследовательской жилки нет? Или больше пообщаться не с кем на вольные темы?

Прекращайте флуд. А если нужна помощь, то можете обращаться. )

вольную тему и флуд заели вы увидев ошибку у автора.

я например не люблю все эти комментарии не по теме.

выхожу из этой темы. можете не утруждать себя ответами мне

Anatoli Kazharski
Anatoli Kazharski | 23 авг. 2022 в 19:27
Pavel Malyshko #:

вольную тему и флуд заели вы увидев ошибку у автора.

...

Где Вы это увидели? Покажите. )

Для непонятливых объясняю. Речь была о том, что автор написал множество практически одинаковых статей, отличие которых только в том, что предлагаются разные индикаторы. Этим бесполезным "добром" вся база кода завалена.

А об ошибке Вам, что-то почудилось. 

Pavel Malyshko #:

...

выхожу из этой темы. можете не утруждать себя ответами мне

Не стоило и начинать. 

Mohamed Abdelmaaboud
Mohamed Abdelmaaboud | 24 авг. 2022 в 09:19

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

Спасибо.

MrBrooklin
MrBrooklin | 5 янв. 2023 в 18:06

Всех с наступившим Новым годом!

Автору большое спасибо за проделанную работу. Есть один нюанс, который, на мой взгляд, всё-таки требует корректировки при нормализации цены скользящей средней. Вместо округление числа с плавающей точкой до 2-х:

double MAVal = NormalizeDouble(MAArray[0],2);

сюда просится округление до _Digits:

double MAVal = NormalizeDouble(MAArray[0],_Digits);

т.к. часто не выполняется условие, выделенное цветом:

   if(Ask>MAVal && WPVal>-50)
     {
      Comment("Buy signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "EMA Value is",MAVal);
     }

   if(Bid<MAVal && WPVal<-50)
     {
      Comment("Sell signal","\n",
              "Williams % R Value is",WPVal,"\n",
              "EMA Value is",MAVal);
     }

С уважением, Владимир.

Рыночная математика: прибыль, убыток, издержки Рыночная математика: прибыль, убыток, издержки
В данной статье я покажу вам, как считать полную прибыль или убыток любого трейда, включая комиссию и своп. Составим точнейшую математическую модель, напишем по ней код и сравним ее с эталоном, а также попытаемся залезть под капот основной функции MQL5 для вычисления прибыли и докопаемся до сути всех необходимых величин из спецификации.
Нейросети — это просто (Часть 25): Практикум Transfer Learning Нейросети — это просто (Часть 25): Практикум Transfer Learning
В последних двух статьях мы создали инструмент, позволяющий создавать и редактировать модели нейронных сетей. И теперь пришло время оценить потенциальные возможности использования технологии Transfer Learning на практических примерах.
Нейросети — это просто (Часть 26): Обучение с подкреплением Нейросети — это просто (Часть 26): Обучение с подкреплением
Продолжаем изучение методов машинного обучения. Данной статьей мы начинаем еще одну большую тему "Обучение с подкреплением". Данный подход позволяет моделям выстаивать определенные стратегии для решения поставленных задач. И мы рассчитываем, что это свойство обучения с подкреплением откроет перед нами новые горизонты построения торговых стратегий.
Разработка торговой системы на основе индикатора Ишимоку Разработка торговой системы на основе индикатора Ишимоку
Эта статья продолжает серию, в которой мы учимся строить торговые системы на основе самых популярных индикаторов. На этот раз мы поговорим об индикаторе Ишимоку и создадим торговую систему по его показателям.