Navigation:Home > Content >

tradebreakout.mq5

Time: 2011-11-13 | Download file:tradebreakout.mq5

//+------------------------------------------------------------------+
//|                                                TradeBreakOut.mq5 |
//|                                  Copyright © 2013, Andriy Moraru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, Andriy Moraru"
#property link      "http://www.earnforex.com"
#property version   "1.0"

#property description "Red line crossing 0 from above is a support breakout signal."
#property description "Green line crossing 0 from below is a resistance breakout signal."

//---- номер версии индикатора
#property version   "1.00"
//---- отрисовка индикатора в отдельном окне
#property indicator_separate_window
//---- количество индикаторных буферов 2
#property indicator_buffers 2
//---- использовано всего 2 графических построения
#property indicator_plots   2

//+---------------------------------------------+
//|  объявление констант                        |
//+---------------------------------------------+
#define RESET 0 // Константа для возврата терминалу команды на пересчёт индикатора

//+---------------------------------------------+
//|  Параметры отрисовки уровней индикатора     |
//+---------------------------------------------+
//---- отрисовка уровней в виде линий
#property indicator_type1   DRAW_LINE
//---- толщина линии индикатора равна 1
#property indicator_width1 1
//---- ввыбор цветов уровней
#property indicator_color1  clrRed
//---- отображение меток уровней
#property indicator_label1  "Resistance Breakout"

//+---------------------------------------------+
//|  Параметры отрисовки уровней индикатора     |
//+---------------------------------------------+
//---- отрисовка уровней в виде линий
#property indicator_type2   DRAW_LINE
//---- толщина линии индикатора равна 1
#property indicator_width2 1
//---- ввыбор цветов уровней
#property indicator_color2  clrTeal
//---- отображение меток уровней
#property indicator_label2  "Support Breakout"
//+----------------------------------------------+
//| Параметры отображения горизонтальных уровней |
//+----------------------------------------------+
#property indicator_level1 0.0
#property indicator_levelcolor clrBlue
#property indicator_levelstyle STYLE_SOLID
#property indicator_levelwidth 2
//+----------------------------------------------+
//|  объявление перечислений                     |
//+----------------------------------------------+
enum price_type
  {
   Close,   // по клоузам
   HighLow  // по экстремумам
  };
//+----------------------------------------------+
//| Входные параметры индикатора                 |
//+----------------------------------------------+
input uint L = 50;                    // Period
input price_type PriceType = HighLow; // ценовой расчёт
//+----------------------------------------------+

//---- объявление динамических массивов, которые будут в 
// дальнейшем использованы в качестве индикаторных буферов
double ExtLineBuffer1[],ExtLineBuffer2[];

//---- Объявление целых переменных начала отсчёта данных
int min_rates_total;
//+------------------------------------------------------------------+   
//| TradeBreakOut indicator initialization function                  | 
//+------------------------------------------------------------------+ 
void OnInit()
  {
//---- Инициализация переменных начала отсчёта данных
   min_rates_total=int(L);

//---- превращение динамических массивов в индикаторные буферы
   SetIndexBuffer(0,ExtLineBuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,ExtLineBuffer2,INDICATOR_DATA);

//---- установка позиции, с которой начинается отрисовка уровней Боллинджера
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);

//---- запрет на отрисовку индикатором пустых значений
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);

//---- индексация элементов в буферах как в таймсериях   
   ArraySetAsSeries(ExtLineBuffer1,true);
   ArraySetAsSeries(ExtLineBuffer2,true);

//--- создание имени для отображения в отдельном подокне и во всплывающей подсказке
   IndicatorSetString(INDICATOR_SHORTNAME,"TradeBreakOut");

//--- определение точности отображения значений индикатора
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- завершение инициализации
  }
//+------------------------------------------------------------------+ 
//| TradeBreakOut iteration function                                 | 
//+------------------------------------------------------------------+ 
int OnCalculate(
                const int rates_total,    // количество истории в барах на текущем тике
                const int prev_calculated,// количество истории в барах на предыдущем тике
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]
                )
  {
//---- проверка количества баров на достаточность для расчёта
   if(rates_totalrates_total || prev_calculated<=0)// проверка на первый старт расчёта индикатора
     {
      limit=rates_total-min_rates_total-1; // стартовый номер для расчёта всех баров
      for(bar=rates_total-1; bar>limit && !IsStopped(); bar--)
        {
         ExtLineBuffer1[bar]=0.0;
         ExtLineBuffer2[bar]=0.0;
        }

     }
   else limit=rates_total-prev_calculated; // стартовый номер для расчёта новых баров

//---- основной цикл расчёта индикатора
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
     {

      if(PriceType==Close)
        {
         HC=close[ArrayMaximum(close,bar,L)];
         LC=close[ArrayMinimum(close,bar,L)];
         ExtLineBuffer2[bar]=(close[bar]-HC)/HC;
         ExtLineBuffer1[bar]=(close[bar]-LC)/LC;
        }
      else
        {
         HH=high[ArrayMaximum(high,bar,L)];
         LL=low[ArrayMinimum(low,bar,L)];
         ExtLineBuffer2[bar]=(high[bar]-HH)/HH;
         ExtLineBuffer1[bar]=(low[bar]-LL)/LL;
        }
     }
//----     
   return(rates_total);
  }
//+------------------------------------------------------------------+

Recommend