Индикатор фракталов является очень полезным инструментом для трейдера. Этот индикатор помогает определить значимые области поддержки и сопротивления, а также может быть использован в стратегиях торговли на пробой. В этой статье я расскажу, как можно использовать язык MQL4 для получения значений индикатора фракталов.
Что из себя представляет индикатор фракталов?
Индикатор фракталов был изобретен Биллом Вильямсом. Несмотря на свою простоту, фракталы очень популярны как в торговле акциями, так и на рынке форекс.
В MetaTrader 4, а также во многих других торговых платформах, фракталы представлены в виде стрелок, указывающих вверх или вниз в зависимости от их расположения.
Для расчета фрактала вам понадобится группа из 5 свечей. Если средняя свеча имеет самую высокую цену, мы увидим фрактал со стрелкой, направленной вверх, и значением, равным самой высокой цене. Если средняя свеча имеет самую низкую цену, мы увидим фрактал со стрелкой, указывающей вниз, и значением, равным самой низкой цене.
Фракталы могут быть расположены рядом друг с другом в некоторых случаях, как вы можете видеть на следующем рисунке:
Как видите, определить фракталы довольно просто. Давайте посмотрим, как можно использовать данный индикатор.
Как можно использовать индикатор фракталов?
Фракталы можно использовать в разных ситуациях:
- Для поиска уровней поддержки и сопротивления. Фракталы помогут выделить уровни, на которых может произойти потенциальный разворот цены.
- Трейлинг-стоп. Вы можете перемещать стоп-лосс по фракталам, так как данные уровни имеют большие шансы не быть случайно задетыми ценой.
- Торговля на пробой. Можно открывать ордера, когда цена пробивает фрактальный уровень.
- Торговля по тренду. Вы можете повторно войти в тренд, когда фрактал дает сигнал на продолжение тенденции.
Также фракталы могут быть использованы для подтверждения сигналов других индикаторов.
Как получить значение фракталов с помощью языка 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); } //+------------------------------------------------------------------+
Эта функция может быть весьма полезной, поскольку она позволит вам собрать данные фракталов, которые вы можете использовать, к примеру, для трейлинг-стопа, точки входа или выхода из позиции, и многого другого.