Как использовать индикатор фракталов в MQL4?

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

Что из себя представляет индикатор фракталов?

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

В MetaTrader 4, а также во многих других торговых платформах, фракталы представлены в виде стрелок, указывающих вверх или вниз в зависимости от их расположения.

Для расчета фрактала вам понадобится группа из 5 свечей. Если средняя свеча имеет самую высокую цену, мы увидим фрактал со стрелкой, направленной вверх, и значением, равным самой высокой цене. Если средняя свеча имеет самую низкую цену, мы увидим фрактал со стрелкой, указывающей вниз, и значением, равным самой низкой цене.

индикатор фракталов пример 1

индикатор фракталов пример 2

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

расположение фракталов

Как видите, определить фракталы довольно просто. Давайте посмотрим, как можно использовать данный индикатор.

Как можно использовать индикатор фракталов?

Фракталы можно использовать в разных ситуациях:

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

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

Как получить значение фракталов с помощью языка MQL4?

Язык MQL4 предоставляет встроенную функцию для обнаружения фракталов — iFractals(). Функция имеет следующие параметры:

double  iFractals(
   string       symbol,           // имя символа
   int          timeframe,        // таймфрейм
   int          mode,             // индекс линии
   int          shift             // сдвиг
   );
  • symbol — торговый инструмент. NULL или Symbol() означает текущий инструмент.
  • timeframe — таймфрейм графика. 0 будет означать текущий график.
  • mode — верхний или нижний индекс линии индикатора. Возможные значения могут быть MODE_UPPER или MODE_LOWER.
  • shift — сдвиг, выраженный в количестве свечей.

Я попытался создать простую функцию, которую вы можете использовать для обнаружения фракталов.

Следующий код может получать три значения:

  • Значение самого последнего верхнего фрактала.
  • Значение самого последнего нижнего фрактала.
  • Какой фрактал был самым последним — верхний или нижний.
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
 
bool FractalsUp, FractalsDown;
double FractalsUpPrice, FractalsDownPrice;
int UpperFractal, LowerFractal;
int FractalsLimit=15;
 
void FindFractalsIndex() {
// Находим индекс бара первого ближайшего нижнего фрактала.
for(int n=0; n<Bars;n++){ if(iFractals(NULL,0,MODE_LOWER,n)!=NULL)break;LowerFractal=n+1;} 
// Находим индекс бара первого ближайшего верхнего фрактала.
for(n=0; n<Bars;n++){ if(iFractals(NULL,0,MODE_UPPER,n)!=NULL)break;UpperFractal=n+1;}
}
 
void FindFractals(){
   //Инициализация переменных
   FractalsUp=false;
   FractalsDown=false;
   FractalsUpPrice=0;
   FractalsDownPrice=0;
 
   //Цикл сканирования последних свечей FractalsLimit, начиная с самых старых и заканчивая самыми последними.
   for(int i=FractalsLimit; i>=0; i--){
      //Если на свече есть фрактал, значение будет больше нуля и будет равно самой высокой или самой низкой цене.
      double fu=iFractals(NULL,0,MODE_UPPER,i);
      double fl=iFractals(NULL,0,MODE_LOWER,i);
      //Если есть верхний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsUp.
      if(fu>0){
         FractalsUp=true;
         FractalsDown=false;
         FractalsUpPrice=fu;
      }
      //Если есть нижний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsDown.
      if(fl>0){
         FractalsUp=false;
         FractalsDown=true;
         FractalsDownPrice=fl;
      } 
      //Если свеча имеет верхний и нижний фрактал, значения сохраняются, но мы не считаем его последним фракталом.
      if(fu>0 && fl>0){
         FractalsUp=false;
         FractalsDown=false;
         FractalsUpPrice=fu;        
         FractalsDownPrice=fl;
      }
  }
}
 
void OnStart()
  {
//---
   FindFractals();
   FindFractalsIndex();
   //Получаем все значения.
 
   //Выводим все полученные значения.
   Alert(FractalsUpPrice," ",FractalsDownPrice);
   Alert(FractalsUp," ",FractalsDown);
   Alert(UpperFractal," ",LowerFractal);
 
  }
//+------------------------------------------------------------------+

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