期货软件TB系统源代码解读系列57-AMA

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容