English 中文 Español Deutsch 日本語 Português
preview
Возможности Мастера MQL5, которые вам нужно знать (Часть 53): Market Facilitation Index

Возможности Мастера MQL5, которые вам нужно знать (Часть 53): Market Facilitation Index

MetaTrader 5Трейдинг |
463 5
Stephen Njuki
Stephen Njuki

Введение

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

Market Facilitation Index (MFI, индекс облегчения рынка) отражает способность рынка изменять цены в течение установленного периода времени. Чтобы лучше представить ситуацию, будет полезно сравнить его с другим индикатором Билла Вильямса, который мы рассматривали в предыдущей статье — Awesome Oscillator (AO). Если начать с фокуса/цели, АО отслеживает импульс посредством сравнения средних цен за 34 и 5 периодов, исходя из установки о том, что более крупные изменения амплитуды представляют собой огромные сдвиги импульса, и наоборот. С другой стороны, MFI рассматривает эффективность движения цены по отношению к объему или пытается ответить на вопрос, если объем торговли составил x, насколько отреагирует цена, если бы объем был y.

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


где:

  • High - самая высокая цена за выбранный период времени.
  • Low - самая низкая цена за выбранный период времени.
  • Volume - общий объем торгов за этот период.

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

Зеленый цвет означает:

Синий цвет:

Коричневый цвет:

И розовый цвет:

Мы определяем или устанавливаем наши цвета в MQL5 следующим образом:

   color             Color(int ind)
   {  //
      return(
               (Volume(ind) > Volume(ind + 1) && MFI(ind) > MFI(ind + 1)) ? clrGreen :
               ((Volume(ind) < Volume(ind + 1) && MFI(ind) < MFI(ind + 1)) ? clrBrown :
                ((Volume(ind) < Volume(ind + 1) && MFI(ind) > MFI(ind + 1)) ? clrBlue :
                 ((Volume(ind) > Volume(ind + 1) && MFI(ind) < MFI(ind + 1)) ? clrPink : clrNONE
                 ))));
   }

При определении объема мы полагаемся на тиковый объем, поскольку реальный/контрактный объем не используется (особенно на рынке Форекс). Однако если вы торгуете акциями и эта информация доступна, то следует использовать именно ее.


Тиковый объем vs реальный объем

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

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

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

Как и следовало ожидать, у него есть свои ограничения. Главным из них является чрезмерный учет изменений цен и торговых инструментов. Если цена ценной бумаги быстро колеблется между любыми двумя ценами в течение короткого интервала, каждое такое колебание будет считаться тиком и, следовательно, единицей объема, даже если фактическое движение цены не отражается. Аргументом в пользу такого подсчета является то, что мы фиксируем количество участников рынка. Однако если трейдер x разместил крупный ордер с большим объемом и изменение цены распространилось на несколько пунктов, то это изменение цены будет зарегистрировано только как один тик. 

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

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


Важность абсолютного значения

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

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

Здесь имеет значение относительная важность соседних столбцов, а не их значения.


Зеленый сигнал

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

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

//+------------------------------------------------------------------+
//| Check for Pattern 0.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_0(ENUM_POSITION_TYPE T)
{  if(Color(X()) == clrGreen)
   {  if(T == POSITION_TYPE_BUY && Close(X()) > MA(X()))
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && Close(X()) < MA(X()))
      {  return(true);
      }
   }
   return(false);
}

Этот паттерн, обозначенный как 0, поскольку он первый (как мы делали на протяжении всех этих статей), можно протестировать, только присвоив входному параметру Patterns Used Bitmap значение 1. При прогонах оптимизации на паре EURJPY за 2023 год на 12-минутном таймфрейме получаем следующие результаты тестирования:

r0

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

Таким образом, наш паттерн 0 лучше всего подходит для подтверждения тренда, поскольку он хорошо сочетается со стратегиями следования за трендом.


Паттерн затухания

Наш следующий паттерн (паттерн 1) относится к ситуации, когда MFI отмечает снижение импульса, несмотря на продолжающуюся динамику цены. Обычно он отражает потерю давления покупателей или продавцов и поэтому используется для прогнозирования разворотов или консолидации рынка. Основным способом идентификации паттерна затухания является анализ дивергенции в ситуациях, когда розовый MFI сигнализирует о росте цены (что является медвежьей дивергенцией) или когда розовый MFI сигнализирует о падении цены (что является бычьей дивергенцией). Реализуем это в MQL5 следующим образом:

//+------------------------------------------------------------------+
//| Check for Pattern 1.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_1(ENUM_POSITION_TYPE T)
{  if(Color(X()) == clrPink)
   {  if(T == POSITION_TYPE_BUY && Close(X()) < MA(X()))
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && Close(X()) > MA(X()))
      {  return(true);
      }
   }
   return(false);
}

Паттерн-1 также характеризуется выравниванием после пиков цены. Как видно из формулы розового сигнала выше, розовый паттерн в первую очередь является результатом снижения объема, а это, в свою очередь, снижает способность поддерживать преобладающие тренды. Тестирование той же пары выше EURJPY на 12-минутном таймфрейме дает нам следующие результаты.  

r1

Входные данные, используемые для этого прогона, получены в результате оптимизации по тем же параметрам, которые описаны выше: пороговые значения открытия и закрытия, разрыв с ценой входа, истечение срока действия отложенного ордера и пороговое значение паттерна. Поскольку мы проводили тестирование исключительно с паттерном 1, входная битовая карта (input bitmap) для используемых паттернов представляет собой 2 в степени 2, что равно 4.

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

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


Ложный сигнал

Паттерн 2, который характеризуется синим MFI, также называется ложным сигналом. Ложным, потому что ценовое движение на графике не подтверждается объемом. Он часто заставляет трейдеров слишком рано открывать позиции, что приводит к убыткам. Паттерн часто встречается на нестабильных или неволатильных рынках из-за преобладания ложных прорывов и разворотов. Реализуем его в MQL5 следующим образом:

//+------------------------------------------------------------------+
//| Check for Pattern 2.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_2(ENUM_POSITION_TYPE T)
{  if(Color(X()) == clrBlue)
   {  if(T == POSITION_TYPE_BUY && Close(X()) < MA(X()))
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && Close(X()) > MA(X()))
      {  return(true);
      }
   }
   return(false);
}

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

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

r2

Таким образом, паттерн 2 возникает из-за низкого объема и неликвидности, что часто приводит к ненадежным сигналам. Как правило, кратковременный шум от определенных всплесков объема из-за новостных событий или рыночных манипуляций может привести к ложным сигналам MFI. Кроме того, в случаях, когда ложный паттерн просто корректирует откат среди основного тренда, он может служить сильным сигналом продолжения тренда. Использование исключительно MFI без индикатора поддержки может привести не только к большому количеству сделок, но и к убыткам. Таким образом, помимо индикатора MA, который мы используем в паре с MFI для определения паттерна 2, можно использовать альтернативный индикатор, такой как ценовой канал, для фильтрации ложных паттернов, которые обязательно будут часто проявляться в очень сильных трендах в виде откатов.

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


Паттерн "приседания" (squat)

Паттерн 3 (приседание) возникает, когда MFI сильно колеблется или выравнивается, несмотря на значительное движение цены или волатильность. Это признак нерешительности на рынке, когда давление покупателей и продавцов практически равнозначно, заставляя рынок "приседать" перед тем, как произойдет прорыв или разворот.

Паттерн отмечен коричневым цветом и реализуется на MQL5 так:

//+------------------------------------------------------------------+
//| Check for Pattern 3.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_3(ENUM_POSITION_TYPE T)
{  if(Color(X()) == clrBrown)
   {  if(T == POSITION_TYPE_BUY && Close(X()+1) <= MA(X()+1) && Close(X()) >= MA(X()))
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && Close(X()+1) >= MA(X()+1) && Close(X()) <= MA(X()))
      {  return(true);
      }
   }
   return(false);
}

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

Медвежий паттерн также потребует коричневую гистограмму от MFI, но цена пересечет скользящую среднюю сверху вниз и закроется ниже нее. Как и в случае с паттернами 0-2, описанными выше, если мы выполним оптимизацию только для этого паттерна, установив Bitmap used равным 2 в степени 3 (8), то получим следующие результаты для некоторых благоприятных настроек входных данных:

r3

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

Периоды низкой волатильности также могут быть результатом периодов, когда рынки ожидают катализатора, например, выхода экономических данных или геополитических событий. Таким образом, эти коричневые области MFI можно рассматривать как переходные зоны, поскольку они обычно возникают и помогают определить важные области поддержки/сопротивления в ценовом движении. Последствия весьма разнообразны; в основном они сигнализируют о надвигающейся волатильности, поскольку "приседание" часто интерпретируется как признак того, что рынок набирает обороты и готовится к прорыву. Хотя само направление прорыва не прогнозируется паттерном, его объединение с другими индикаторами и даже ценовым действием, как мы сделали с нашей реализацией MQL5 выше, может помочь определить следующее направление.

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


Паттерн дивергенции

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

Однако когда речь идет об MFI, увеличение значения не может служить какой-либо цели в данном случае, потому что оно НЕ будет расходиться ни с бычьим трендом (то есть рост цен будет параллелен росту MFI), ни с медвежьим. С другой стороны, если мы посмотрим на снижение MFI, то легко увидим, что любой преобладающий тренд на рынке будет обозначать отклонение от него.

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

//+------------------------------------------------------------------+
//| Check for Pattern 4.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_4(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Low(X()+1) > Low(X()) && MFI(X()+1) > MFI(X()))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && High(X()+1) < High(X()) && MFI(X()+1) > MFI(X()))
   {  return(true);
   }
   return(false);
}

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

r4

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

Часто также рекомендуется сочетать этот паттерн (паттерн 4) с другими индикаторами Билла Вильямса, такими как Awesome Oscillator или Accelerator Oscillator. Кроме того, при совпадении со структурой цены, например, поддержкой/сопротивлением, надежность этого паттерна значительно повышается. Также важно отметить, что на рынках с сильными трендами расхождения часто приводят к коррекциям, а не к полным разворотам. С другой стороны, на рынках с ограниченным диапазоном расхождение MFI может быть более надежным. Как уже говорилось выше, этот паттерн позволяет лучше управлять и другими вещами, например, размещением стоп-лоссов.


Сигнал пробоя

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

//+------------------------------------------------------------------+
//| Check for Pattern 5.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_5(ENUM_POSITION_TYPE T)
{  if(Color(X()) == clrGreen)
   {  if(T == POSITION_TYPE_BUY && Close(X()+1) < MA(X()+1) && Close(X()) > MA(X()))
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && Close(X()+1) > MA(X()+1) && Close(X()) < MA(X()))
      {  return(true);
      }
   }
   return(false);
}

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

Когда цена пробивает ключевой уровень (поддержки или сопротивления) вместе с зеленой полосой MFI, это часто означает действительный прорыв. Строгое определение ключевых уровней поддержки/сопротивления зачастую более очевидно при ручной торговле, чем при автоматизации стратегии. Вот почему при строгом применении этого паттерна можно предпочесть вносить изменения по каждому отдельному инструменту. Несмотря на высокую вероятность данной ситуации, ей все равно может не хватать поддержки со стороны объема, что может создать риск ложных движений.

"Отсутствие объема" вытекает из формулы MFI, которую мы привели во введении в начале статьи, где мы показываем, что объем находится в знаменателе, поэтому рост MFI, хотя и отображается зеленой гистограммой, может не иметь пропорционального увеличения объема. Таким образом, его сочетание с полосами Боллинджера может сыграть роль дополнительной защиты от прорывов на малых объемах, которые могут привести к ложным сигналам.

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


Продолжение тренда

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

//+------------------------------------------------------------------+
//| Check for Pattern 6.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_6(ENUM_POSITION_TYPE T)
{  if(Color(X()+1) == clrGreen && Color(X()) == clrGreen)
   {  if(T == POSITION_TYPE_BUY && Close(X()+1) > MA(X()+1) && Close(X()) > MA(X()))
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && Close(X()+1) < MA(X()+1) && Close(X()) < MA(X()))
      {  return(true);
      }
   }
   return(false);
}

Прогон оптимизации с настройками, аналогичными уже рассмотренным выше паттернам, дает нам следующий отчет:

Это простое расширение паттерна 5, включающее в себя уже рассмотренные примечания по интерпретации и недостаткам паттерна.


Настройка диапазона торговли

Наш восьмой и последний паттерн (паттерн 7) стремится извлечь выгоду из фазы консолидации коричневого MFI, сочетая ее с RSI. То, что мы называем диапазонной торговлей, — это способ подготовки к прорывам волатильности, как уже говорилось выше в отношении паттерна 3. Реализация MQL5 выглядит так:

//+------------------------------------------------------------------+
//| Check for Pattern 7.                                             |
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_7(ENUM_POSITION_TYPE T)
{  if(Color(X()) == clrBrown)
   {  if(T == POSITION_TYPE_BUY && RSI(X()+1) <= 30.0 && RSI(X()) >= 30.0)
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && RSI(X()+1) >= 70.0 && RSI(X()) <= 70.0)
      {  return(true);
      }
   }
   return(false);
}

На основе коричневого столбца MFI мы ищем бычий паттерн, если RSI пересекает уровень 30 снизу вверх и закрывается выше него. Аналогичным образом, медвежий паттерн возникает, если RSI пересекает уровень 70 сверху вниз и закрывается ниже него. Тестирование только с этим паттерном требует значения параметра bitmaps used 128 (2^7), а запуск оптимизации только для этого паттерна дает нам следующий отчет:

r7

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

r_oll

c_oll



Заключение

Мы изучили еще один индикатор Билла Вильямса — Market Facilitation Index — на основе паттернов, как это принято в нашей серии статей. Хотя это не очень распространенный индикатор и, очевидно, что его нужно использовать совместно с другими индикаторами для генерации сигналов, он может дать преимущество трейдерам, которые ищут что-то нестандартное.

FileName Описание
SignalWZ_53.mqh Файл класса пользовательских сигналов
wz_53.mq5 Собранный в Мастере советник с заголовком, показывающим используемые файлы

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

Прикрепленные файлы |
SignalWZ_53.mqh (17.07 KB)
wz_53.mq5 (7.41 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (5)
Daniel Opoku
Daniel Opoku | 11 мар. 2025 в 13:51

Спасибо за информацию о MFI. Я пересмотрю и протестирую еще раз. Каково было ваше соотношение риск/вознаграждение при тестировании этой стратегии?

.

Too Chee Ng
Too Chee Ng | 18 мар. 2025 в 23:22
Хорошая статья. Большое спасибо.
Too Chee Ng
Too Chee Ng | 11 апр. 2025 в 11:22
Что касается следующего:
//+------------------------------------------------------------------+
//| Проверьте наличие шаблона 4.|
//+------------------------------------------------------------------+
bool CSignalMFI::IsPattern_4(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Low(X()+1) > Low(X()) && MFI(X()+1) > MFI(X()))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && High(X()+1) < High(X()) && MFI(X()+1) > MFI(X()))
   {  return(true);
   }
   return(false);
}
Похоже, что выделенное
MFI(X()+1) > MFI(X()

является сомнительным (особенно по сравнению с алгоритмом других Паттернов)!!!

Может быть, один из них:

MFI(X()+1) < MFI(X()
Daniel Opoku
Daniel Opoku | 24 апр. 2025 в 08:19
Too Chee Ng #:
Что касается следующего:
Кажется, что выделенное

вызывает сомнения (особенно по сравнению с алгоритмом других шаблонов)!!!

Может быть, один из них:

MFI(X()+1) < MFI(X()

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

MFI(X()+1) > MFI(X()

В таком случае он проводит измерение;

уменьшение силы MFI, но увеличение нижнего минимума в медвежьем тренде

 MFI(X()+1) > MFI(X()  &&  Low(X()+1) > Low(X()) 

уменьшение силы MFI, но увеличение более высокого максимума в бычьем тренде .

 MFI(X()+1) > MFI(X() &&  High(X()+1) < High(X()) 
Надеюсь, это поможет.
Too Chee Ng
Too Chee Ng | 29 апр. 2025 в 09:18
Daniel Opoku #:

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

В таком случае он проводит измерение;

уменьшение силы MFI, но увеличение нижнего минимума в медвежьем тренде

уменьшение силы MFI, но увеличение более высокого максимума при бычьем тренде .

Надеюсь, это поможет.

Спасибо за объяснение.

Да, это имеет смысл.

От начального до среднего уровня: Индикатор (IV) От начального до среднего уровня: Индикатор (IV)
В этой статье мы рассмотрим, как легко создать и внедрить операционную методологию для окрашивания свечей. Данная концепция высоко ценится трейдерами. При реализации такого рода вещей необходимо проявлять осторожность, чтобы бары или свечи сохраняли свой первоначальный вид и не затрудняли чтение свечи за свечой.
От начального до среднего уровня: Индикатор (III) От начального до среднего уровня: Индикатор (III)
В данной статье мы рассмотрим, как объявлять различные индикаторы графического представления, такие как DRAW_COLOR_LINE и DRAW_FILLING. Кроме того, конечно же, мы научимся строить графики по нескольким индикаторам простым, практичным и быстрым способом. Это может действительно изменить ваш взгляд на MetaTrader 5 и рынок в целом.
Автоматизация торговых стратегий на MQL5 (Часть 13): Создание торгового алгоритма для паттерна "Голова и Плечи" Автоматизация торговых стратегий на MQL5 (Часть 13): Создание торгового алгоритма для паттерна "Голова и Плечи"
В настоящей статье мы автоматизируем паттерн «Голова-Плечи» на MQL5. Мы анализируем его архитектуру, реализуем советник для его обнаружения и торговли, а также тестируем результаты на истории. Этот процесс раскрывает практичный торговый алгоритм, который можно усовершенствовать.
Нейросети в трейдинге: Спайково-семантический подход к пространственно-временной идентификации (S3CE-Net) Нейросети в трейдинге: Спайково-семантический подход к пространственно-временной идентификации (S3CE-Net)
Приглашаем к знакомству с фреймворком S3CE-Net и его механизмами SSAM и STFS, которые точно обрабатывают спайковые события с учётом каузальности. Модель лёгкая, параллельная и умеет выявлять сложные связи во времени и пространстве.