Разработка торговой системы по индикатору фракталов Fractals
Эта новая статья из серии, в которой мы знакомимся с популярными техническими индикаторами, посвящена еще одному широко используемому инструменту — индикатору фракталов Fractals. Тщательно разберем, что же из себя представляет этот индикатор. Статья включает в себя следующие разделы:
- Определение Фракталов
- Стратегии по индикатору Fractals
- Схемы стратегий на основе индикатора Fractals
- Торговые системы, работающие по фракталам
- Заключение
Мы узнаем, что это за индикатор, что он измеряет и основную лежащую в нем идею — для этого посмотрим, как рассчитать его вручную. На примере простых стратегий узнаем, как можно использовать индикатор фракталов в соответствии с его концепцией. Затем на основе этих стратегий создадим торговые системы, которые будут работать в торговом терминале MetaTrader 5 и будут автоматически генерировать сигналы.
Для написания кодов в статье будем использовать язык программирования MQL5 (MetaQuotes Language), встроенный в торговый терминал MetaTrader 5. Если вы не знаете, как загрузить или использовать MetaTrader 5 и MQL5, почитайте раздел «Как написать MQL5-код в редакторе MetaEditor» в ранней статье. Кстати, читателям я советую самостоятельно применять все, о чем мы здесь говорим, особенно если ваша цель — развивать навыки написания кодов.
Кроме того, прежде чем использовать какие-либо наработки на реальном счете, их обязательно нужно протестировать, потому что здесь все стратегии приведены исключительно в образовательных целях. Кроме того, не существует универсальных вещей, которые подходили бы абсолютно для всех. Поэтому для начала нужно понять, подходит ли вам такая стратегия торговли.
Внимание! Все содержание настоящей статьи предоставляется «как есть», предназначено только для целей обучения и не является торговой рекомендацией. Статья не несет в себе каких-либо гарантий результатов. Все, что вы применяете на практике на основе этой статьи, вы делаете исключительно на свой страх и риск, автор не гарантирует никаких результатов.
Определение Фракталов
Индикатор фракталов Fractals разработал Билл Вильямс. Он создал его как попытку предсказать потенциальное движение цены на основе бычьих или медвежьих сигналов. Бычий сигнал указывает на потенциальное движение вверх, а медвежий сигнал указывает на потенциальное движение вниз. Можно сказать, что индикатор пытается предугадать максимумы и минимумы на графике. Сигналы отображаются на графике в виде стрелок выше и ниже цены.
Индикатор формирует стрелки двух типов: стрелки восходящего фрактала и нисходящего. Так на основе каких расчетов индикатор генерирует соответствующие сигналы и стрелки?
Для этого индикатор ищет определенные паттерны, сформированные в направлении роста или падения.
Вот такой паттерн должен сформироваться для фрактала вверх:
- Серия из минимум пяти последовательных свечей или баров.
- Самый высокий максимум из пяти свечей должен быть в центре (третья свеча).
- Максимумы с каждой стороны это центральной свечи должны быть ниже.
- После закрытия пятой свечи в таком формировании над третьей свечой появится направленная вверх фрактальная стрелка.
Для формирования противоположного фрактала вниз паттерн будет таким:
- Серия из минимум пяти последовательных свечей или баров.
- Самый низкий минимум из пяти свечей должен быть в центре (третья свеча).
- Минимумы с каждой стороны это центральной свечи должны быть выше.
- После закрытия пятой свечи в таком формировании над третьей свечой появится направленная вниз фрактальная стрелка.
К счастью, рассчитывать индикатор вручную и визуально анализировать свечи не нужно, поскольку уже есть готовый к использованию индикатор в торговом терминале MetaTrader 5. Все, что нужно сделать, это выбрать его из списка индикаторов. Для этого нужно открыть терминал MetaTrader 5 и добавить индикатор на график через меню «Вкладка».
Вставка —> Индикаторы —> Bill Williams —> Fractals
После выбора индикатора из списка откроется окно параметров:
1 — цвет стрелок
Выбираем подходящие настройки, нажимаем OK, и индикатор запустится на графике:
Как видите, над свечами и под ними появились стрелки, которые указывают на потенциальное движение ценового действия. Стрелки вниз под ценой показывают потенциальное движение вверх, а стрелки вверх выше свечей означают потенциальное движение вниз.
Стратегии по индикатору Fractals
Далее рассмотрим примеры простых стратегий на основе индикатора Fractals, которые помогут понять, как можно использовать этот индикатор. Будем использовать фракталы отдельно, а затем посмотрим варианты использования его в комбинации с другими техническими индикаторами. Такой подход позволит получить больше информации и сделать сигналы более точными.
Стратегия первая: максимумы и минимумы фракталов
Согласно этой стратегии, будем получать сигналы максимумов и минимумов на основе положения верхних и нижних фракталов. Если индикатор сгенерировал нижнюю стрелку, это будет признаком минимума. Если Fractals сгенерировал стрелку сверху, это будет признаком максимума.
Стрелка внизу —> Fractals Low
Стрелка сверху —> Fractals High
Стратегия вторая: Fractals и скользящая средняя
По этой стратегией сигналы на покупку и продажу будут генерироваться на основе направления ценового действия в соответствии с положением цены и скользящей средней в дополнение к сгенерированным сигналам индикатора Fractals. Если цена закрытия находится выше скользящей средней, а индикатор Fractals сгенерировал нижнюю стрелку, это будет сигналом на покупку. Если цена закрытия находится ниже скользящей средней, а индикатор Fractals сгенерировал верхнюю стрелку, это будет сигналом на продажу.
Цена закрытия > MA + появилась нижняя стрелка —> сигнал на покупку
Стратегия третья: Fractals и Alligator
По этой стратегией сигналы на покупку и продажу будут генерироваться на основе направления ценового действия в соответствии с положением цены и индикатора Alligator в дополнение к сгенерированным сигналам индикатора Fractals. Если линия губ Аллигатора находится над зубами и челюстями, линия зубов находится над челюстями, цена закрытия выше зубов, а сигнал индикатора Fractals — стрелка внизу, это будет сигналом на покупку. А если линия губ ниже зубов и челюстей, зубы ниже челюстей, цена закрытия ниже зубов, а индикатор фракталов сформировал верхнюю стрелку, это будет сигналом на продажу.
Линия губ > линии зубов и челюстей, линия зубов > линии челюстей, цена закрытия > линии зубов, нижняя стрелка Fractals —> сигнал на покупку
Схемы стратегий на основе индикатора Fractals
В этой части мы с вами создадим пошаговые схемы для каждой рассмотренной стратегии. Такие схемы помогут перейти к разработке торговых систем на их основе.
1. Фрактальные максимумы и минимумы
Для этой стратегии создадим торговую систему, которая будет возвращать максимумы и минимумы индикатора Fractals в виде комментария на графике. Для этого она будет отслеживать значения fracUp и fracDown. Если значение fracUp выше нуля или если его значение непустое, а fracDown — пустое, торговая система должна вернуть сигнал в виде комментария на графике со следующими значениями:
В другом случае, если значение fracDown выше нуля или если его значение непустое, а fracUp — пустое, торговая система должна вернуть сигнал минимума в виде комментария на графике со следующими значениями:
Схема такой стратегии показана на рисунке ниже:
2. Fractals и скользящая средняя
По этой стратегии разработаем торговую систему, которая будет возвращать сигналы на покупку и продажу в виде комментария на графике. Для этого нужно наблюдать за следующими значениями:
- Цена закрытия
- Значение экспоненциальной скользящей средней EMA
- Значение fracDown
- Значение fracUp
- Покупка
- Текущая EMA
- Минимум Fractals: n
- Продажа
- Текущая EMA
- Максимум Fractals: n
- Значение линии губ
- Значение линии зубов
- Значение линии челюстей
- Цена закрытия
- Значение fracDown
- Значение fracUp
- Покупка
- Значение Jaws n
- Значение Teeth n
- Значение Lips n
- Минимум Fractals: n
- Продажа
- Значение Jaws n
- Значение Teeth n
- Значение Lips n
- Максимум Fractals: n
Если цена закрытия выше значения EMA, а значение fracDown непустое, сигнал, возвращаемый системой, будет таким:
И наоборот, если цена закрытия ниже значения средней EMA, а значение fracUp непустое, система вернет противоположный сигнал и выведет значения:
Так выглядит схема для разработки этой системы:
3. Fractals и Alligator
По этой стратегии разработаем торговую систему, которая будет возвращать сигналы на покупку и продажу на основе анализа следующих значений:
Если линия губ выше линии зубов и челюстей, значение зубов выше линии челюстей, цена закрытия выше линии зубов, а значение fracDown не равно пустому значению, торговая система должна возвращать сигнал на покупку в виде комментария на графике, а также значения индикатора:
В противоположной ситуации если линия губ ниже линии зубов и челюстей, значение зубов ниже линии челюстей, цена закрытия ниже линии зубов, а значение fracUp непустое, торговая система должна возвращать сигнал на продажу и значения индикатора в виде комментария на графике:
Так выглядит схема для разработки этой системы:
Торговые системы, работающие по фракталам
В этом разделе мы с вами шаг за шагом разберем, как написать на MQL5 торговые системы на основе показателей от этого индикатора и использовать их в MetaTrader 5. Начнем с простой системы Fractals, которая будет выводить на график комментарий со значениями индикатора фракталов.
Для этого создадим массивы для фракталов вверх и вниз с помощью функции double.
double fracUpArray[]; double fracDownArray[];
Устанавливаем сортировку данных в массиве с помощью функции ArraySetAsSeries: Параметры функции:
- array[] — созданные массивы fracUpArray и fracDownArray.
- flag — флаг установим true.
ArraySetAsSeries(fracUpArray,true); ArraySetAsSeries(fracDownArray,true);
Определяем индикатор фракталов с помощью функции iFractals, которая возвращает хэндл индикатора. Параметры функции:
- symbol — символ для расчетов; _Symbol означает символ текущего графика.
- period — период для расчетов, _Period означает текущий таймфрейм.
int fracDef=iFractals(_Symbol,_Period);
Получаем данные и сохраняем результат с помощью функции CopyBuffer. Параметры функции:
- indicator_handle — хендл индикатора, fracDef
- buffer_num — индикаторные буферы, у нас это будут UPPER_LINE для верхних и LOWER_LINE для нижних.
- start_pos — установим позицию начала расчета, укажем 0
- count — количество данных для копирования, укажем 3
- buffer[] — массив, в который будут скопированы данные (fracUpArray, fracDownArray).
CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray); CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
Получаем значения максимума и минимума фракталов.
double fracUpValue=NormalizeDouble(fracUpArray[0],5); double fracDownValue=NormalizeDouble(fracDownArray[0],5);
Возвращаем ноль, если у fracUpValue и fracDownValue пустые значения.
if(fracUpValue==EMPTY_VALUE) fracUpValue = 0; if(fracDownValue==EMPTY_VALUE) fracDownValue = 0;
Используем функцию Comment для создания комментария к графику с текущим значением фракталов:
Comment("Fractals Up Value string">"n", "Fractals Down Value code">//+------------------------------------------------------------------+ //| Simple Fractals 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() < //creating price array double fracUpArray[]; double fracDownArray[]; //Sorting data ArraySetAsSeries(fracUpArray,true); ArraySetAsSeries(fracDownArray,true); //define frac int fracDef=iFractals(_Symbol,_Period); //define data and store result CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray); CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray); //get values of fracUp and fracDown double fracUpValue=NormalizeDouble(fracUpArray[0],5); double fracDownValue=NormalizeDouble(fracDownArray[0],5); //returning zero if there is empty value of fracUp if(fracUpValue==EMPTY_VALUE) fracUpValue = 0; //returning zero if there is empty value of fracDown if(fracDownValue==EMPTY_VALUE) fracDownValue = 0; //comment on the chart Comment("Fractals Up Value string">"n", "Fractals Down Value comment">//+------------------------------------------------------------------+
После этого компилируем код советника, и он появляется в окне Навигатора в терминале:
Запускаем на нужном графике двойным кликом на файле или перетаскиванием. После этого появится окно советника.
В этом окне разрешаем автоматическую торговлю «Allow Algo Trading», нажимаем ОК, и программа запустится на графике, как показано ниже:
Как мы видим, в правом верхнем углу графика появилась индикация того, что на графике работает советник. Советник запущен и генерирует сигналы.
В левом верхнем углу графика отображаются два значения:
- Fractals Up = n
- Fractals Down = 0
В этом примере значение Fractals Down равно нулю, поскольку у нас есть значение Fractals up.
Имеем два значения:
- Fractals Up = 0
- Fractals Down = n
Но значение Fractals Up равно нулю, так как у нас есть значение Fractals down.
1. Фрактальные максимумы и минимумы
Ниже показан полный код торговой системы по максимумам и минимумам фракталов.
//+------------------------------------------------------------------+ //| Fractals highs and lows.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() < //creating arrays double fracUpArray[]; double fracDownArray[]; //Sorting data ArraySetAsSeries(fracUpArray,true); ArraySetAsSeries(fracDownArray,true); //define frac int fracDef = iFractals(_Symbol,_Period); //define data and store result CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray); CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray); //define values double fracUpValue = NormalizeDouble(fracUpArray[0],5); double fracDownValue = NormalizeDouble(fracDownArray[0],5); //returning zero in case of empty values if(fracUpValue ==EMPTY_VALUE) fracUpValue = 0; if(fracDownValue ==EMPTY_VALUE) fracDownValue = 0; //conditions of the strategy and comment on the chart with highs and lows //in case of high if(fracUpValue>0) < Comment("Fractals High around: ",fracUpValue); > //in case of low if(fracDownValue>0) < Comment("Fractals Low around: ",fracDownValue); > > //+------------------------------------------------------------------+
Отличия в этом коде.
if(fracUpValue>0) < Comment("Fractals High around: ",fracUpValue); >
if(fracDownValue>0) < Comment("Fractals Low around: ",fracDownValue); >
После компиляции кода запускаем полученный файл на график, как делали в прошлый раз. Советник по максимумам и минимума фракталов запустится на графике:
Теперь мы можем получать нужные нам максимумы и минимумы. Сигналы минимумов:
Как видно на предыдущем графике, в верхнем левом углу отображается значение минимума фракталов, поскольку на графике образовался соответствующий паттерн.
Здесь в комментарии на графике отобразился максимум фракталов.
2. Fractals и скользящая средняя
Ниже приведен полный код для создания торговой системы по стратегии Fractals + MA:
//+------------------------------------------------------------------+ //| Fractals with 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() < //creating arrays double fracUpArray[]; double fracDownArray[]; MqlRates priceArray[]; double maArray[]; //Sorting data ArraySetAsSeries(fracUpArray,true); ArraySetAsSeries(fracDownArray,true); ArraySetAsSeries(priceArray,true); ArraySetAsSeries(maArray,true); //define values int fracDef = iFractals(_Symbol,_Period); int Data = CopyRates(_Symbol,_Period,0,3,priceArray); int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE); //define data and store result CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray); CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray); CopyBuffer(maDef,0,0,3,maArray); //get values double fracUpValue = NormalizeDouble(fracUpArray[0],5); double fracDownValue = NormalizeDouble(fracDownArray[0],5); double closingPrice = priceArray[0].close; double maValue = NormalizeDouble(maArray[0],6); bool isBuy = false; bool isSell = false; //conditions of the strategy and comment on the chart //in case of buy if(closingPrice > maValue && fracDownValue != EMPTY_VALUE) < Comment("Buy","n", "Current EMA: ",maValue,"n", "Fractals Low around: ",fracDownValue); isBuy = true; > //in case of sell if(closingPrice < maValue && fracUpValue != EMPTY_VALUE) < Comment("Sell","n", "Current EMA: ",maValue,"n", "Fractals High around: ",fracUpValue); isSell = true; > > //+------------------------------------------------------------------+
Отличия в этом коде.
Создаем два дополнительных массива: массив цен priceArray с помощью функции MqlRates, которая хранит информацию о ценах, объемах и спреде, и maArray с помощью функции double.
MqlRates priceArray[]; double maArray[];
Сортируем эти массивы.
ArraySetAsSeries(priceArray,true); ArraySetAsSeries(maArray,true);
Получаем исторические данные MqlRates с помощью функции CopyRates. Параметры функции:
- symbol — имя символа, _Symbol
- timeframe — таймфрейм для расчета (_period)
- start_pos — установим позицию начала расчета, укажем 0
- count — количество данных для копирования, укажем 3
- rates_array[] — массив, в который копируем данные, priceArray
Объявляем скользящую среднюю с помощью функции iMA. Параметры функции:
- symbol — имя символа
- period — период расчета
- ma_period — период усреднения, 50
- ma_shift — горизонтальный сдвиг, 0
- ma_method — тип скользящей средней, у нас это EMA (Exponential Moving Average)
- applied_price — тип цены, используемой в расчетах (цена закрытия
int Data = CopyRates(_Symbol,_Period,0,3,priceArray); int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
CopyBuffer(maDef,0,0,3,maArray);
Определение цены закрытия и значения MA.
double closingPrice = priceArray[0].close; double maValue = NormalizeDouble(maArray[0],6);
Создаем две bool-переменные для isBuy и isSell, чтобы избежать конфликта между сигналами на покупку и продажу одной и той же свечи.
bool isBuy = false; bool isSell = false;
Для формирования сигнала на покупку:
if(closingPrice > maValue && fracDownValue != EMPTY_VALUE) < Comment("Buy","n", "Current EMA: ",maValue,"n", "Fractals Low around: ",fracDownValue); isBuy = true; >
Для формирования сигнала на продажу:
if(closingPrice < maValue && fracUpValue != EMPTY_VALUE) < Comment("Sell","n", "Current EMA: ",maValue,"n", "Fractals High around: ",fracUpValue); isSell = true; >
Компилируем код и запускаем получившегося советника из навигатора в терминале MetaTrader 5.
Как видите, советник Fractals + MA прикреплен к графику (в правом верхнем углу есть соответствующий значок). Посмотрим на примеры сформированных сигналов от советника.
Сигнал на покупку:
На графике показан комментарий со значениями:
- Покупка
- Текущая EMA
- Минимум Fractals: n
Сигнал на продажу:
Имеем следующие значения:
- Продажа
- Текущая EMA
- Максимум Fractals: n
3. Fractals и Alligator
Ниже приведен полный код для создания торговой системы по стратегии Fractals + Alligator:
//+------------------------------------------------------------------+ //| Fractals with Alligator.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() < //creating arrays double fracUpArray[]; double fracDownArray[]; MqlRates priceArray[]; double jawsArray[]; double teethArray[]; double lipsArray[]; //Sorting data ArraySetAsSeries(fracUpArray,true); ArraySetAsSeries(fracDownArray,true); ArraySetAsSeries(jawsArray,true); ArraySetAsSeries(teethArray,true); ArraySetAsSeries(lipsArray,true); //define values int fracDef=iFractals(_Symbol,_Period); int Data = CopyRates(_Symbol,_Period,0,3,priceArray); int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN); //define data and store result CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray); CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray); CopyBuffer(alligatorDef,0,0,3,jawsArray); CopyBuffer(alligatorDef,1,0,3,teethArray); CopyBuffer(alligatorDef,2,0,3,lipsArray); //get values double fracUpValue=NormalizeDouble(fracUpArray[0],5); double fracDownValue=NormalizeDouble(fracDownArray[0],5); double closingPrice = priceArray[0].close; double jawsValue=NormalizeDouble(jawsArray[0],5); double teethValue=NormalizeDouble(teethArray[0],5); double lipsValue=NormalizeDouble(lipsArray[0],5); //creating bool variables to avoid buy and sell signals at the same time bool isBuy = false; bool isSell = false; //conditions of the strategy and comment on the chart //in case of buy if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue && closingPrice > teethValue && fracDownValue != EMPTY_VALUE) < Comment("Buy","n", "jawsValue string">"n", "teethValue string">"n", "lipsValue string">"n", "Fractals Low around: ",fracDownValue); isBuy = true; > //in case of sell if(lipsValueEMPTY_VALUE) < Comment("Sell","n", "jawsValue string">"n", "teethValue string">"n", "lipsValue string">"n", "Fractals High around: ",fracUpValue); isSell = true; > > //+------------------------------------------------------------------+
Отличия в этом коде.
Создаем три массива для компонентов Alligator.
double jawsArray[]; double teethArray[]; double lipsArray[];
Устанавливаем сортировку данных в массивах с помощью функции ArraySetAsSeries.
ArraySetAsSeries(jawsArray,true); ArraySetAsSeries(teethArray,true); ArraySetAsSeries(lipsArray,true);
Объявляем индикатор Аллигатора с помощью функции iAlligator. Параметры функции:
- symbol — имя символа; у нас это «_Symbol», то есть рассчитываем индикатор по символу текущего графика.
- period — таймфрейм для расчета; значение «_Period» означает, что индикатор будет рассчитываться на текущем таймфрейме.
- jaw_period — период усреднения для расчета линии челюсти, мы используем 13.
- jaw_shift — установим горизонтальный сдвиг для линии челюсти, у нас это 8.
- teeth_period — период усреднения для расчета линии зубов, мы используем 8.
- teeth_shift — установим горизонтальный сдвиг для линии зубов, 5.
- lips_period — период усреднения для расчета линии губ, мы используем 5.
- lips_shift — установим горизонтальный сдвиг для линии губ, у нас это 3.
- ma_method — тип сглаживания скользящей средней, MODE_SMA.
- applied_price — определяет тип цены, используемой для расчета; используем среднюю цену
int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
Определяем данные и сохранение результатов с помощью функции CopyBuffer Параметры функции:
- indicator_handle — хендл индикатора, alligatorDef
- buffer_num — номер индикаторного буфера, 0 — челюсти, 1 — зубы, 2 — губы.
- start_pos — установим позицию начала расчета, укажем 0
- count — количество данных для копирования, укажем 3
- buffer[] — определяем ценовой массив для копирования, у нас это jawsArray, teethArray, lipsArray
CopyBuffer(alligatorDef,0,0,3,jawsArray); CopyBuffer(alligatorDef,1,0,3,teethArray); CopyBuffer(alligatorDef,2,0,3,lipsArray);
Получаем значения компонентов Alligator.
double jawsValue=NormalizeDouble(jawsArray[0],5); double teethValue=NormalizeDouble(teethArray[0],5); double lipsValue=NormalizeDouble(lipsArray[0],5);
Для формирования сигнала на покупку:
if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue && closingPrice > teethValue && fracDownValue != EMPTY_VALUE) < Comment("Buy","n", "jawsValue string">"n", "teethValue string">"n", "lipsValue string">"n", "Fractals Low around: ",fracDownValue); isBuy = true; >
Для формирования сигнала на продажу:
if(lipsValueEMPTY_VALUE) < Comment("Sell","n", "jawsValue string">"n", "teethValue string">"n", "lipsValue string">"n", "Fractals High around: ",fracUpValue); isSell = true; >
Компилируем код, находим получившийся файл в Навигаторе в терминале и запускаем советник на графике торгового символа:
Советник запустился и работает на графике — об этом свидетельствует индикация в правом верхнем углу графика. Теперь мы можем получать сигналы.
Примеры сигналов, сгенерированных при тестировании этой стратегии.
Сигнал на покупку
Как видим, на графике выше в верхнем левом сформировался сигнал со следующими значениями:
- Покупка
- Значение челюстей
- Значение зубов
- Значение губ
- Минимум Fractals
На предыдущем графике имеем сигнал и следующие значения:
- Продажа
- Значение челюстей
- Значение зубов
- Значение губ
- Максимум Fractals
Заключение
Технический индикатор Fractals — полезный и эффективный инструмент, который можно использовать самостоятельно или в сочетании с другими техническими индикаторами. Предполагается, что вы познакомились с индикатором, узнали, что он измеряет, как он может формироваться на графике и как найти встроенный индикатор в терминале MetaTrader 5. Кроме того мы посмотрели, как можно использовать фракталы, с помощью следующих простых торговых стратегий:
- Максимумы и минимумы Fractals: для поиска максимумов и минимумов индикатора Fractals и получения сигнала на графике.
- Fractals и скользящая средняя: сигналы на покупку на основе показателей от индикатора фракталов и положения цены относительно скользящей средней.
- Fractals и Alligator: сигналы на покупку на основе показателей от индикатора фракталов, индикатора Alligator и положения цены.
Также мы научились создавать автоматические системы на основе каждой из рассмотренных стратегий — мы написали код советников, которые генерируют сигналы в терминале MetaTrader 5. Я надеюсь, вы пытались самостоятельно повторять все, о чем здесь было написано, чтобы максимально полно понять и получить выгоду от материала в статье, а также, возможно, найти новые идеи.
Еще раз повторюсь, что очень важно тщательно тестировать и оптимизировать стратегии, прежде чем применять их на реальном счете. Надеюсь, эта статья была полезной и вы узнали из нее что-то новое, что поможет сделать ваши торговые результаты чуточку лучше. Если вам понравилась статья, почитайте предыдущие статьи из этой же серии — в каждой из них мы разбирали популярный технический инструмент и разрабатывали на его основе торговые стратегии.
Fractals Форекс
Fractals (фрактал) – индикатор Форекс и элемент авторской торговой стратегии Билла Вильямса, использующего его для поиска точек разворота тренда, локальных ценовых экстремумов и сильных ценовых уровней. Индикатор фрактал входит в базовый комплект инструментов технического анализа всех популярных торговых терминалов и отображается на ценовом графике в виде стрелок вверх-вниз на ключевом баре.
Определение фрактала
Визуально отдельный фрактал представляет собой графическую фигуру из последовательно идущих пяти ценовых баров или свечей и указывает уровень, на котором цена не смогла установить новый максимум или минимум. Группа из пяти свечей, в которой максимум третьей свечи больше максимумов двух правых и левых свечей называется верхним фракталом. Обратная комбинация, когда минимум третьей свечи ниже остальных является нижним фракталом.
Идеальный fractals индикатор, как на рисунке выше, на ценовом графике возникает довольно редко, и обычно трейдер имеет дело с только с различными «фрактальными моделями», но принцип их построения и трактовка сигналов от этого не меняется и на ценовом графике индикатор фракталов Форекс выглядит аналогично. Также имеются методики анализа рынка и торговые стратегии рассматривающие «неполные» фракталы из трех-четырех свечей, но применять их рекомендуется только опытным трейдерам из-за большого количества ложных сигналов.
Важность пятой свечи
Поскольку оба типа фракталов состоят из пяти свечей, то перед открытием сделки всегда нужно дождаться закрытия последней (пятой) свечи, которая окончательно подтверждает фрактал. Всегда следует помнить, что Fractals относится к перерисовывающимся индикаторам, которые хорошо смотрятся на истории, но если последняя свеча закрывается выше текущего максимума или ниже минимума, то фрактал не подтвердится и может просто «исчезнуть» с графика. Существуют лишенные данного недостатка варианты fractals индикатора. Скачать их можно из сети Интернет для любого торгового терминала.
Определение направления тренда с помощью фракталов
- Нижняя граница фрактала.
- Правые свечи внутри фрактала.
- Прорыв идет вниз, и в момент пробития нижней границы открываем сделку на продажу (Sell).
- Верхняя граница фрактала.
- Две правые свечи внутри фрактала.
- При пробитии верхней границы открываем сделку на покупку (Buy).
Как и в других индикаторах технического анализа, точность сигналов Fractals возрастает с увеличением таймфрейма, то есть пробитие недельного или дневного фрактала будет более надежным сигналов, чем на часовых и меньших временных промежутках.
Фракталы как точки установки ордеров стоп-лосс
- Стоп-лосс на уровне только последнего фрактала.
- Устанавливаем ордер на уровне максимума/минимума тени свечи фрактала, а не ее тела. Верхняя тень для продажи, нижняя для покупки.
Fractals — это индикатор Форекс, который всегда должен дополнительно подтверждаться и фильтроваться другими техническими инструментами, и само собой, Вильямс рекомендует использовать Alligator. По его стратегии сделка на покупку не открывается, если фрактал находится ниже линии «зубов» и пропускаем сигнал на продажу, если фрактал выше данной линии. Фракталы, находящиеся за пределами «пасти» Аллигатора будут иметь значение только до прорыва или появления нового.
Источник https://www.mql5.com/ru/articles/11620
Источник https://www.fcxchief.asia/ru/library/indicators/fractal-indicator/