Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //+------------------------------------------------------------------+
- //| NHNL.mq5 |
- //| Copyright 2018, MetaQuotes Software Corp. |
- //| https://mql5.com |
- //+------------------------------------------------------------------+
- #property copyright "Copyright 2018, MetaQuotes Software Corp."
- #property link "https://mql5.com"
- #property version "1.00"
- #property indicator_separate_window
- #property indicator_buffers 3
- #property indicator_plots 3
- //--- plot High
- #property indicator_label1 "High Index"
- #property indicator_type1 DRAW_LINE
- #property indicator_color1 clrGreen
- #property indicator_style1 STYLE_SOLID
- #property indicator_width1 1
- //--- plot Low
- #property indicator_label2 "Low Index"
- #property indicator_type2 DRAW_LINE
- #property indicator_color2 clrRed
- #property indicator_style2 STYLE_SOLID
- #property indicator_width2 1
- //--- plot High+Low
- #property indicator_label3 "Index HL"
- #property indicator_type3 DRAW_LINE
- #property indicator_color3 clrBlue
- #property indicator_style3 STYLE_SOLID
- #property indicator_width3 1
- //--- input parameters
- input uint InpPeriod=20;
- //--- indicator buffers
- double BufferHigh[];
- double BufferLow[];
- double BufferHL[];
- //--- global variables
- int period;
- //+------------------------------------------------------------------+
- //| Custom indicator initialization function |
- //+------------------------------------------------------------------+
- int OnInit()
- {
- //--- setting global variables
- period=int(InpPeriod<1 ? 1 : InpPeriod);
- //--- indicator buffers mapping
- SetIndexBuffer(0,BufferHigh,INDICATOR_DATA);
- SetIndexBuffer(1,BufferLow,INDICATOR_DATA);
- SetIndexBuffer(2,BufferHL,INDICATOR_DATA);
- //--- settings indicators parameters
- IndicatorSetInteger(INDICATOR_DIGITS,Digits());
- IndicatorSetString(INDICATOR_SHORTNAME,"New High, New Low Index("+(string)period+")");
- //--- setting buffer arrays as timeseries
- ArraySetAsSeries(BufferHigh,true);
- ArraySetAsSeries(BufferLow,true);
- ArraySetAsSeries(BufferHL,true);
- //---
- return(INIT_SUCCEEDED);
- }
- //+------------------------------------------------------------------+
- //| Custom indicator 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_total<period) return 0;
- //--- Установка индексации массивов как таймсерий
- ArraySetAsSeries(high,true);
- ArraySetAsSeries(low,true);
- //--- Проверка и расчёт количества просчитываемых баров
- int limit=rates_total-prev_calculated;
- if(limit>1)
- {
- limit=rates_total-period-2;
- ArrayInitialize(BufferHigh,EMPTY_VALUE);
- ArrayInitialize(BufferLow,EMPTY_VALUE);
- ArrayInitialize(BufferHL,EMPTY_VALUE);
- }
- //--- Расчёт индикатора
- for(int i=limit; i>=0 && !IsStopped(); i--)
- {
- int count_h=0;
- int count_l=0;
- for(int n=0; n<period; n++)
- {
- if(high[i+n]>high[i+n+1]) count_h++;
- if(low[i+n]<low[i+n+1]) count_l--;
- }
- BufferHigh[i]=count_h;
- BufferLow[i]=count_l;
- BufferHL[i]=count_h+count_l;
- }
- //--- return value of prev_calculated for next call
- return(rates_total);
- }
- //+------------------------------------------------------------------+
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement