Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
При построении пользовательского индикатора обнаружил, что LWMA в iMAonArray( ) считается с большой ошибкой. Пришлось пересчитать ее со всеми циклами. Результаты прикладываю.
Красная линия при использовании стандартной функции, желтой - мой вариант расчета.
На всякий случай прикладываю коды обеих вариантов.
Видимо у Вас в начале допущена какая-то ошибка и она лавинообразно нарастает в конце.
Таким образом использовать стандартную функцию LWMA (onArray) не представляется возможным. А ведь многие уже наверное пытались использовать эту функцию, а результат-то она выдает неправильный.
//***************************************** #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Red #property indicator_width1 2 //================================== extern int hrma=12; //------------------------ double dma[],Hma[]; double sum_2,sum,sum_sq,w_2,w,w_sq; int pma,pma_2,psq; //************************************* int init() { IndicatorBuffers(2); //-------------------- SetIndexBuffer(0,Hma); //-------------------- SetIndexBuffer(1,dma); return(0); } //************************************************************** int start() { int cbi,cbi2,IC=IndicatorCounted(); if (Bars-IC<3) {cbi=Bars-IC-1; cbi2=cbi;} else { pma=hrma*60/Period()/2; pma_2=pma/2; psq=MathSqrt(pma); cbi=Bars-pma-1; cbi2=cbi-psq; } //--------------------------------------------------- for(int i=cbi; i>=0; i--) dma[i]=2*iMA(NULL,0,pma_2,0,3,0,i)-iMA(NULL,0,pma,0,3,0,i); for(i=cbi2; i>=0; i--) { Hma[i]=iMAOnArray(dma,0,psq,0,3,i); } //--------------------------------------------------- return(0); } //************************************************************//***************************************** #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Gold #property indicator_width1 2 //================================== extern int hrma=12; //------------------------ double dma[],Hma[]; double sum_2,sum,sum_sq,w_2,w,w_sq; int pma,pma_2,psq; //************************************* int init() { IndicatorBuffers(2); //-------------------- SetIndexBuffer(0,Hma); //-------------------- SetIndexBuffer(1,dma); return(0); } //************************************************************** int start() { int cbi,cbi2,IC=IndicatorCounted(); if (Bars-IC<3) {cbi=Bars-IC-1; cbi2=cbi;} else { pma=hrma*60/Period()/2; pma_2=pma/2; psq=MathSqrt(pma); cbi=Bars-pma-1; cbi2=cbi-psq; w_2=0.0; for(int j=1; j<=pma_2; j++) w_2+=j; w=0.0; for(j=1; j<=pma; j++) w+=j; w_sq=0.0; for(j=1; j<=psq; j++) w_sq+=j; } //--------------------------------------------------- for(int i=cbi; i>=0; i--) { sum_2=0.0; for (int n=1; n<=pma_2; n++) { sum_2+=Close[i+pma_2-n]*n; } sum=0.0; for (n=1; n<=pma; n++) { sum+=Close[i+pma-n]*n; } dma[i]=2*sum_2/w_2-sum/w; } for(i=cbi2; i>=0; i--) { sum_sq=0.0; for (n=1; n<=psq; n++) { sum_sq+=dma[i+psq-n]*n; } Hma[i]=sum_sq/w_sq; } //--------------------------------------------------- return(0); } //************************************************************