#property indicator_separate_window #property indicator_buffers 2 #property indicator_plots 2 #property indicator_level1 0 #property indicator_level2 2 #property indicator_level3 -2 #property indicator_color1 clrBlue #property indicator_type1 DRAW_HISTOGRAM #property indicator_width1 2 #property indicator_color2 clrRed #property indicator_type2 DRAW_HISTOGRAM #property indicator_width2 2 input ENUM_TIMEFRAMES inp_signal_time_frame = PERIOD_M15; // time frame input int inp_signal_block = 100; // block size in points input int inp_signal_block_bars = 25; // period max input bool inp_signal_break = false; // break signal by opposite movement double ext_buf_up[]; double ext_buf_down[]; //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer(0, ext_buf_up); SetIndexBuffer(1, ext_buf_down); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ int OnCalculate(const int32_t rates_total, const int32_t 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 int32_t &spread[]) { for(int i=MathMax(0,prev_calculated-1); i= inp_signal_block*_Point && buy) { if(inp_signal_break) sell = false; start_price += inp_signal_block*_Point; count_down ++; } if(start_price - bar_price>= inp_signal_block*_Point && sell) { if(inp_signal_break) buy = false; start_price -= inp_signal_block*_Point; count_up ++; } if(!buy && !sell) break; } } //+------------------------------------------------------------------+