Вычисление LWMA

 

Требуется сгладить гистограмму MACD методом LWMA

Делаю так:

double macd[10] ,ma[5];

for (i=0;i<10;i++) macd[i]=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);

for (i=0;i<5;i++) ma[i]=iMAOnArray(macd,0,5,0,MODE_LWMA,i);

 

Получаю значения совсем отличающиеся от того, что рисует индикатор. Что не так?

 

 

Плюнул на все и посчитал вручную:

    for (int j=0; j<5; j++) {

     int we = 0; double summ = 0; int k=1;

     for (i=maPeriod+j;i>j;i--) { we += k; summ += k*macd[i-1]; k++;}

     ma[j] = summ/we;

    }

 
Sergey Deev:

Плюнул на все и посчитал вручную:

    for (int j=0; j<5; j++) {

     int we = 0; double summ = 0; int k=1;

     for (i=maPeriod+j;i>j;i--) { we += k; summ += k*macd[i-1]; k++;}

     ma[j] = summ/we;

    }

И скорость будет лучше в разы )
 
Sergey Deev:

...

Получаю значения совсем отличающиеся от того, что рисует индикатор. Что не так?

 

Эти функции в первую очередь предназначены для индикаторных буферов. Для применения с другими массивами надо делать ArraySetAsSeries(), без этого направление расположения данных меняется.