Помогите понять!

 

Пробоема с усреднением. Я не могу понять как комп усредняет, объясните если можно по шагам. Например на графике всего 6 баров, и усреднение по 6 баров. Вырисобывается 7 бар, как комп будет действовать???

 
Techno >>:

Пробоема с усреднением. Я не могу понять как комп усредняет, объясните если можно по шагам. Например на графике всего 6 баров, и усреднение по 6 баров. Вырисобывается 7 бар, как комп будет действовать???

Усреднит по последним 6 значениям.

 

Усреднит по последним 6 значениям.

Посмотрите алгоритм расчёта МА в F1. То есть принцип скользящего усреднения.

 
sayfuji писал(а) >>

Посмотрите алгоритм расчёта МА в F1. То есть принцип скользящего усреднения.

ок, а если на графике всего 4 бара, а усреднить надо по 6, то недостающие 2 бара будут нулевыми?

 
Techno >>:

ок, а если на графике всего 4 бара, а усреднить надо по 6, то недостающие 2 бара будут нулевыми?

не понял, ты пытаешься усреднить будующее? тогда да, могут быть нулевыми, и с той же степенью вероятности равными 111.11(for EURUSD)

а чего ты хочешь этим добиться?

написать чтоли статью о фильтрах сюда)) это надо?

 
VDev писал(а) >>

не понял, ты пытаешься усреднить будующее? тогда да, могут быть нулевыми, и с той же степенью вероятности равными 111.11(for EURUSD)

а чего ты хочешь этим добиться?

написать чтоли статью о фильтрах сюда)) это надо?

вы не поняли. переменная bars = 4, а усредняет индикатор по 6 барам, то есть например low[6] и low[5] которых никогда не было будут равны 0? Или индикатор их вообще не будет принимать во внимание??

 
Techno >>:

вы не поняли. переменная bars = 4, а усредняет индикатор по 6 барам, то есть например low[6] и low[5] которых никогда не было будут равны 0? Или индикатор их вообще не будет принимать во внимание??

Нормальный индикатор сначала проверяет количество известных для расчета баров и если оно меньше необходимого периода, то вообще ничего не делает. Это легко проверить, накинув индюк или осцилл на график и перейти в самое начало истории клавишей Home. Там видно, что нормальные индюки и осциллы начинают давать показания не с самого первого бара, а с того, на котором им уже хватает информации для адекватных вычислений.

 
Reshetov писал(а) >>

Нормальный индикатор сначала проверяет количество известных для расчета баров и если оно меньше необходимого периода, то вообще ничего не делает. Это легко проверить, накинув индюк или осцилл на график и перейти в самое начало истории клавишей Home. Там видно, что нормальные индюки и осциллы начинают давать показания не с самого первого бара, а с того, на котором им уже хватает информации для адекватных вычислений.

Ну вот пример индикатора из учебника, он усредняет low и high по 5 баров и чертит.

Тут он ведь не проверяет хватает ли баров? Предположим bars=300, при первом включении i будет равно 299, и n тоже. Потом в цикле for в первой итерации индекс бара будет 299, во второй итерации 300, а в третьей 301(Но этого бара нет, так как их всего 300). Только в 5 итерации цикла while цикл for в первый раз посчитает все существующие бары. Или я может что-то не так понимаю????

#property indicator_chart_window // Индик. рисуется в основном окне
#property indicator_buffers 2 // Количество буферов
#property indicator_color1 Blue // Цвет первой линии
#property indicator_color2 Red // Цвет второй линии

extern int Aver_Bars=5; // Количество баров для расчёта

double Buf_0[],Buf_1[]; // Объявление индикаторных массивов
//--------------------------------------------------------------------
int init() // Специальная функция init()
{
//--------------------------------------------------------------------
SetIndexBuffer(0,Buf_0); // Назначение массива буферу
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
//--------------------------------------------------------------------
SetIndexBuffer(1,Buf_1); // Назначение массива буферу
SetIndexStyle (1,DRAW_LINE,STYLE_DOT,1);// Стиль линии
//--------------------------------------------------------------------
return; // Выход из спец. ф-ии init()
}
//--------------------------------------------------------------------
int start() // Специальная функция start()
{
int i, // Индекс бара
n, // Формальный параметр
Counted_bars; // Количество просчитанных баров
double
Sum_H, // Сумма значений High за переиод
Sum_L; // Сумма значений Low за переиод
//--------------------------------------------------------------------
Counted_bars=IndicatorCounted(); // Количество просчитанных баров
i=Bars-Counted_bars-1; // Индекс первого непосчитанного
while(i>=0) // Цикл по непосчитанным барам
{
Sum_H=0; // Обнуление в начале цикла
Sum_L=0; // Обнуление в начале цикла
for(n=i;n<=i+Aver_Bars-1;n++) // Цикл суммирования значений
{
Sum_H=Sum_H + High[n]; // Накопление суммы макс.значений
Sum_L=Sum_L + Low[n]; // Накопление суммы мин. значений
}
Buf_0[i]=Sum_H/Aver_Bars; // Значение 0 буфера на i-ом баре
Buf_1[i]=Sum_L/Aver_Bars; // Значение 1 буфера на i-ом баре

i--; // Расчёт индекса следующего бара
}
//--------------------------------------------------------------------
return; // Выход из спец. ф-ии start()
}
//--------------------------------------------------------------------

 
Techno >>:

Ну вот пример индикатора из учебника, он усредняет low и high по 5 баров и чертит.

Тут он ведь не проверяет хватает ли баров?

Что тут поделаешь? Бывают индикаторы нормальные, а бывают из учебника.

 
Reshetov писал(а) >>

Что тут поделаешь? Бывают индикаторы нормальные, а бывают из учебника.

Можешь добавить в этот индикатор строку, чтобы проверялось количество баров?, если не сложно))
 

чет  я не понимаю... на кой заморачиваться ?! если он "  усредняет low и high по 5 баров и чертит." накой ставить эту проверку то ? 

Он и так берёт 5 баров и чертит по ним.... 

Причина обращения: