// ---------------------------------------------------------------------------
// Ïîêàçûâàåò ñðåäíèå äèàïàçîíû áàðîâ âíóòðè äíÿ çà çàäàííûé ïåðèîä âðåìåíè.
// Ðàáîòàåò ñòðîãî íà ÒÔ < 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