Navigation:Home > Content >

demarker_htf.mq5

Time: 2018-05-02 | Download file:demarker_htf.mq5

//+------------------------------------------------------------------+ 
//|                                                 DeMarker_HTF.mq5 | 
//|                                          Copyright © 2006, ycomp | 
//|                                                                  | 
//+------------------------------------------------------------------+ 
#property copyright "Copyright © 2006, ycomp"
#property link ""
//---- номер версии индикатора
#property version   "1.60"
#property description "DeMarker"
//---- отрисовка индикатора в отдельном окне
#property indicator_separate_window
//---- количество индикаторных буферов 1
#property indicator_buffers 1 
//---- использовано всего одно графическое построение
#property indicator_plots   1
//+----------------------------------------------+
//| Параметры отображения горизонтальных уровней |
//+----------------------------------------------+
#property indicator_level1 0.7
#property indicator_level2 0.5
#property indicator_level3 0.3
#property indicator_levelcolor clrGray
#property indicator_levelstyle STYLE_DASHDOTDOT
//+----------------------------------------------+
//| Параметры отображения границ окна            |
//+----------------------------------------------+
#property indicator_maximum   +1.0
#property indicator_minimum    0.0
//+----------------------------------------------+
//|  объявление констант                         |
//+----------------------------------------------+
#define RESET 0 // Константа для возврата терминалу команды на пересчёт индикатора
#define INDICATOR_NAME "iDeMarker" // Константа для имени индикатора
//+----------------------------------------------+
//|  Параметры отрисовки индикатора              |
//+----------------------------------------------+
//---- отрисовка индикатора 1 в виде символа
#property indicator_type1   DRAW_SECTION
//---- в качестве цветов индикатора использованы
#property indicator_color1  clrDeepPink
//---- толщина линии индикатора 1 равна 2
#property indicator_width1  2
//---- отображение лэйбы индикатора
#property indicator_label1  INDICATOR_NAME
//+-------------------------------------+
//|  ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА       |
//+-------------------------------------+ 
input ENUM_TIMEFRAMES TimeFrame=PERIOD_H4; //Период графика
input uint DeMarker_Period=14;             //период усреднения
input int Shift=0;                         // сдвиг индикатора по горизонтали в барах
//+-------------------------------------+
//---- объявление динамических массивов, которые будут в 
// дальнейшем использованы в качестве индикаторных буферов
double IndBuffer[];
//---- Объявление переменной для хранения результата инициализации индикатора
bool Init;
//---- Объявление стрингов
string Symbol_;
//---- объявление целочисленных переменных для хендлов индикаторов
int Ind_Handle;
//---- Объявление целых переменных начала отсчёта данных
int min_rates_total;
//+------------------------------------------------------------------+
//|  Получение стрингового таймфрейма                                |
//+------------------------------------------------------------------+
string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
  {
//----
   return(StringSubstr(EnumToString(timeframe),7,-1));
//----
  }
//+------------------------------------------------------------------+    
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+  
void OnInit()
  {
   Init=true;
//---- проверка периодов графиков на корректность
   if(TimeFramerates_total || prev_calculated<=0)// проверка на первый старт расчёта индикатора
     {
      limit=rates_total-min_rates_total-2; // стартовый номер для расчёта всех баров
      LastCountBar=limit;
     }
   else limit=int(LastCountBar)+rates_total-prev_calculated; // стартовый номер для расчёта новых баров 

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

//---- основной цикл расчёта индикатора
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
     {
      //---- обнулим содержимое индикаторных буферов до расчёта
      IndBuffer[bar+1]=EMPTY_VALUE;

      //---- копируем вновь появившиеся данные в массив iTime
      if(CopyTime(Symbol_,TimeFrame,time[bar],1,iTime)<=0) return(RESET);

      if(time[bar]>=iTime[0] && time[bar+1]        

Recommend