AMA调整移动平均线,最近喜欢研究均线了,没事就看看有关均线的各个指标,这个指标也就是把均线以另一种方式算出来的,没有具体算法,直接解读的,先看第一个用到的函数求卡夫曼自适应移动平均AdaptiveMovAvg,如下:
Params
NumericSeries Price(1);//声明数值序列参数Price1,初值1.//
Numeric EffRatioLength(10);//声明数值参数EffRatioLength,初值10.//
Numeric FastAvgLength(2);//声明数值参数FastAvgLength,初值2.//
Numeric SlowAvgLength(30);//声明数值参数SlowAvgLength,初值30.//
Vars
Numeric NetChg(0);//声明数值变量NetChg,初值0.//
Numeric TotChg(0);//声明数值变量TotChg,初值0.//
Numeric EffRatio(0);//声明数值变量EffRatio,初值0.//
Numeric ScaledSFSqr(0);//声明数值变量ScaledSFSqr,初值0.//
NumericSeries AMAValue; //声明数值序列变量AMAValue。//
Numeric SFDiff;//声明数值变量SFDiff。//
Begin
if(CurrentBar == 0)//假如当前为第一根k线。//
{
AMAValue = Price;//变量AMAValue = 价格price。//
}Else//从第二根k线开始,执行下列算法。//
{
NetChg = Abs( Price - Price[EffRatioLength] );//把当前价格减去前十价格,再取绝对值,最后把值赋值给变量NetChg。//
TotChg = Summation( Abs( Price - Price[1] ), EffRatioLength );//把绝对值与周期10返回函数Summation求和,即为变量TotChg值。//
EffRatio = IIF(TotChg > 0, NetChg / TotChg, 0);//假如TotChg > 0成立的,取值NetChg / TotChg,否则取值0,依据求得值赋值给变量EffRatio了。//
SFDiff = 2 / ( FastAvgLength + 1 ) - 2 / ( SlowAvgLength + 1 );//直接代入相应数值,可得SFDiff = 2 / (2+1)- 2 / (30+1),算得系数。//
ScaledSFSqr = Sqr( 2 / ( SlowAvgLength + 1 ) + EffRatio * SFDiff ); //这里也是直接代入相应的数值了,主要还是看函数Sqr,意思是求参数的平方,例如Sqr(2)=4.//
AMAValue = AMAValue[1] + ScaledSFSqr * ( Price - AMAValue[1] );//这个也就是把上面算得的数值,代入公式了。//
}
Return AMAValue;//把变量AMAValue值返回给主函数了。//
End
看看TB里显示AMA均线的,代码如下:
Params
Numeric EffRatioLength(10);
Numeric FastAvgLength(2);
Numeric SlowAvgLength(30);
Begin
PlotNumeric("AdpMa",AdaptiveMovAvg(Close,EffRatioLength,FastAvgLength,SlowAvgLength)); //画线,这里直接把四个相应数值返回函数AdaptiveMovAvg,求得AMAValue值了。//
End