## 向各位前辈高手请教公式问题，谢谢了。

 33 zhengmeiyuan 2008.04.25 21:35   向 前辈高手们 请教: 我在('Perry Kaufman AMA Optimized')下载了AMA optimized.mq4指标，有不明白的，还有想修改的。 1.不知道什么原因，它产生的均线总是与 Moving Averages 指标的相同周期的均线不一样？ 2.输入的参数 nfast,nslow,G,dK是什么意思呢？ 3.在('Perry Kaufman AMA Optimized')的指标说明里说， ------------------------------------------------------------------------------------------ “AMA_Trend_Type不等于零: 测量当前 AMA (AMA[0])值和前一个柱 (AMA[1]) AMA的值之间的差距。 deltaAMA=AMA[0]-AMA[1]. 趋势探测设定为 dK*点。 如果 deltaAMA>dK*点,随后趋势上升，蓝线将出现在 AMA上。 如果 deltaAMAdK*StdAMA, 随后趋势上升,蓝点显示在AMA线上。 如果 deltaAMA0) { limit=Bars-counted_bars; limit2=limit; } if (counted_bars==0) { ArrayInitialize(AMAbuffer,0); ArrayInitialize(upAMA,0); ArrayInitialize(downAMA,0); ArrayInitialize(AbsBuffer,0); ArrayInitialize(AMA2Buffer,0); ArrayInitialize(SumAMABuffer,0); ArrayInitialize(StdAMA,0); limit=Bars-1; /* for (i=limit;i>=0;i--) { AMAbuffer[i]=0; upAMA[i]=0; downAMA[i]=0; AbsBuffer[i]=0; NoiseBuffer[i]=0; ERBuffer[i]=0; SSCBuffer[i]=0; StdAMA[i]=0; } ArrayInitialize(,) */ limit2=Bars-periodAMA-1; } limit--; limit2--; //Print("limit=",limit); //Print("项?Abs"); for (i=limit;i>=0;i--) { AbsBuffer[i]=MathAbs(Price(i)-Price(i+1)); } //Print("项?Noise"); for (i=limit2;i>=0;i--) { Noise=iMAOnArray(AbsBuffer,0,periodAMA,0,MODE_SMA,i)*periodAMA; if (Noise!=0) ER=MathAbs(Price(i)-Price(i+periodAMA))/Noise; else ER=0; SSC=MathPow(ER*dFS+slowSC,G); AMAbuffer[i]=Price(i)*SSC+AMAbuffer[i+1]*(1-SSC); AMA2Buffer[i]=AMAbuffer[i]*AMAbuffer[i]+AMA2Buffer[i+1];// 磬赅镫桠噱?耋祆?赈噤疣蝾?捞? SumAMABuffer[i]=SumAMABuffer[i+1]+AMAbuffer[i]; } //Print("项?Std"); for (i=limit2;i>=0;i--) { val1=0; val2=0; SredneeAMA=(SumAMABuffer[i]-SumAMABuffer[i+periodAMA])/periodAMA; SumKvadratAMA=AMA2Buffer[i]-AMA2Buffer[i+periodAMA]; dipersion=SumKvadratAMA/periodAMA-SredneeAMA*SredneeAMA; if (dipersion<0) { StdAMA[i]=0; //Print("悟痂鲟蝈朦磬 滂耧屦耔! 珥圜屙桢:",DoubleToStr(dipersion,8)); //Print("periodAMA=",periodAMA," Bars=",Bars," i=",i); //Print("Bar;Price;AbsBuffer;AMAbuffer;AMA2Buffer;SumAMABuffer;SredneeAMA"); // Print(i,";",Price(i),";",AbsBuffer[i],";",AMAbuffer[i],";",AMA2Buffer[i],";",SumAMABuffer[i],";",(SumAMABuffer[i]-SumAMABuffer[i+periodAMA])/periodAMA); if (IsTesting()&&false) { Print("Bar;Price;AbsBuffer;AMAbuffer;AMA2Buffer;SumAMABuffer;SredneeAMA"); for (int Z=Bars-1;Z>=i;Z--) Print(Z,";",Price(Z),";",AbsBuffer[Z],";",AMAbuffer[Z],";",AMA2Buffer[Z],";",SumAMABuffer[Z],";",(SumAMABuffer[Z]-SumAMABuffer[Z+periodAMA])/periodAMA); } //debug=true; } else StdAMA[i]=MathSqrt(dipersion); if (AMA_Trend_Type!=0) { if (MathAbs(AMAbuffer[i]-AMAbuffer[i+1])>dK*Point) { if (AMAbuffer[i]-AMAbuffer[i+1]>0) val1=AMAbuffer[i]; else val2=AMAbuffer[i]; } } else { if (MathAbs(AMAbuffer[i]-AMAbuffer[i+1])>dK*StdAMA[i]) { if (AMAbuffer[i]-AMAbuffer[i+1]>0) val1=AMAbuffer[i]; else val2=AMAbuffer[i]; } } upAMA[i]=val1; downAMA[i]=val2; } //Print("青觐眵桦?); //---- return(0); } //+------------------------------------------------------------------+