azzx_intraday_bar_range_2_0

Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
azzx_intraday_bar_range_2_0
// ---------------------------------------------------------------------------
//  Ïîêàçûâàåò ñðåäíèå äèàïàçîíû áàðîâ âíóòðè äíÿ çà çàäàííûé ïåðèîä âðåìåíè.
//  Ðàáîòàåò ñòðîãî íà ÒÔ < D1. 
//
//  Âåðñèÿ 2.0: Äîáàâëåíà ñðåäíÿÿ.
// ---------------------------------------------------------------------------

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_width1  4
#property indicator_width2  2
#property indicator_color1  DarkSeaGreen
#property indicator_color2  Red
#property indicator_minimum 0

// ×èñëî áàðîâ äëÿ ðàñ÷¸òà.
extern int PERIOD        = 480;
// Ãëóáèíà èñòîðèè äëÿ ðàñ÷¸òîâ.
extern int HISTORY_DEPTH = 16384;
// Ïåðèîä ñðåäíåé.
extern int SMA_PERIOD    = 4;
// Ñäâèã ñðåäíåé.
extern int SMA_SHIFT     = 2;

// Áóôåðû èíäèêàòîðà.
double buf[], buf_av[];
// Ðàáî÷èå ïåðèîäû èíäèêàòîðà.
int work_period1, work_period2;

// Èíèöèàëèçàöèÿ.
int init() {
  IndicatorShortName(StringConcatenate(
    "AZZX - INTRADAY BAR RANGE v2.0 (", 
    PERIOD, ", ", SMA_PERIOD, ", ", SMA_SHIFT, ")"));
  IndicatorDigits(Digits);
  
  SetIndexBuffer(0, buf);
  SetIndexBuffer(1, buf_av);
  SetIndexStyle(0, DRAW_HISTOGRAM);
  SetIndexEmptyValue(0, -1);
  SetIndexEmptyValue(1, -1);
  
  work_period1 = Bars - PERIOD;
  
  if((HISTORY_DEPTH != 0) && (work_period1 > HISTORY_DEPTH)) {
    work_period1 = HISTORY_DEPTH;
  }

  work_period2 = work_period1 - SMA_PERIOD;

  return(0);
}

// Ãëàâíûé öèêë.
int start() {
  int    i, j, c;
  double v;
  string t;
  
  for(i = Bars - IndicatorCounted() - 1; i >= 0; i--) {
    // Çíà÷åíèå îñíîâíîãî ïîêàçàòåëÿ.
    if(i < work_period1) {
      v = 0;
      c = 0;
      t = TimeToStr(Time[i], TIME_MINUTES);
      
      for(j = i + PERIOD - 1; j >= i; j--) {
        if(TimeToStr(Time[j], TIME_MINUTES) == t) {
          c++;
          v += High[j] - Low[j];
        }
      }
      
      buf[i] = v / c;
    } else {
      buf[i] = -1;
    }
    
    // Çíà÷åíèå ñðåäíåé.
    if((i < work_period2)) {
      v = 0;
            
      for(j = i + SMA_PERIOD - 1; j >= i; j--) {
        v += buf[j];
      }
      
      buf_av[i + SMA_SHIFT] = v / SMA_PERIOD;
    } else {
      buf_av[i] = -1;
    }
  }

  return(0);
}


Comments