Индикаторы: Fractal Channel

 

Fractal Channel:

Показывает линиями канал по фракталам.

Author: Collector

 
Анализируя возможности автоматицации торговли на пробой-отскок от от уровней, я для себя написал индикатор, аналогичный Вашему. В основном они совпадают, только у меня при пробое ценой текущего уровня более 10 пунктов, индикатор показывает следующий уровень выше (ниже) текущей цены, как возможную следующюю цель.

//+------------------------------------------------------------------+
//|                                                  FractUppLow.mq4 |
//|                                                          Valmars |
//|                                                    valmars@bk.ru |
//+------------------------------------------------------------------+
#property copyright "Valmars"
#property link      "valmars@bk.ru"
 
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 MediumBlue
//---- input parameters
//---- buffers
double FractUppBuffer[];
double FractLowBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  { 
//---- indicators
   IndicatorBuffers(2);
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2); 
   SetIndexBuffer(0, FractUppBuffer);
   SetIndexDrawBegin(0, 100);
   SetIndexEmptyValue(0, 0.0);
   SetIndexLabel(0, "FrUpp");
   SetIndexStyle(1, DRAW_LINE,STYLE_SOLID, 2);
   SetIndexBuffer(1, FractLowBuffer);
   SetIndexDrawBegin(1, 100);
   SetIndexEmptyValue(1, 0.0);
   SetIndexLabel(1, "FrLow");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
    
//----   
   return(0);  
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars = Bars - IndicatorCounted() - 1;
// Расчёт для i-го бара, пока все бары не расчитаем. 
   for(int i = counted_bars; i > 0; i--)
     // Расчёт фрактала для i-го бара.
     {
       int j = i;
       int count = Bars - j - 1;
       // FractUpp присваиваем 0.
       double FractUpp = 0; 
       // Хай расчётного бара,Начинаем искать фрактал левее i-го бара. 
       double H=iHigh(NULL, 0, i);
       while(FractUpp < H)             
         {
           count--; 
           if(count <= 0)
               // Фрактал не наден(цена выше иторического max графика)
               break;
           // Продолжаем искать следующий фрактал, пока не найдём тот, 
           // который выше хая расчётного бара
           FractUpp = NormalizeDouble(iFractals(NULL, 0, MODE_UPPER, j), Digits);
           j++;
         }
       j = i;
       count = Bars - j - 1;
       // FractLow присваиваем 0.
       double FractLow = 0; 
       // Лоу расчётного бара,Начинаем искать фрактал левее i-го бара. 
       double L = iLow(NULL, 0, i);
       // Продолжаем искать следующий фрактал, пока не найдём тот, который 
       // ниже лоу расчётного бара
       while(FractLow > L || FractLow == 0)
         {
           count--; 
           if(count <= 0)
               //Фрактал не наден ((цена ниже исторического min графика)
               break;
           FractLow = NormalizeDouble(iFractals(NULL, 0, MODE_LOWER, j), Digits);
           j++;
         }    //Закрытие цикла while, фрактал найден
       //Только ,если найденный фрактал не ближе 10 пунктов от предыдущего
       if(MathAbs(FractUpp - FractUppBuffer[i+1]) > 10*Point)
           FractUppBuffer[i] = FractUpp;
       else 
           //Присваиваем индикатору значение найденного фрактала,
           FractUppBuffer[i] = FractUppBuffer[i+1];
       if(MathAbs(FractLow - FractLowBuffer[i+1]) > 10*Point)  
           FractLowBuffer[i] = FractLow;
       else 
           FractLowBuffer[i] = FractLowBuffer[i+1];
     }   //Закрытие цикла for 
   return(0);
  }                                            //Расчёт закончен,выходим
//+------------------------------------------------------------------+

Вот картинка для обоих индикаторов, мой показан красным-синим, Ваш, для отличия жёлтым-голубым.





Причина обращения: