COVAR即协方差指标,我没在百度里找到相关分析,这可能是TB人员自己从哪国外网站上看到的吧,具体算法我也不了解,咱只能一步步分析源代码了。如下解读:
Params
Numeric Length(10);//声明数值参数Length,初值10.//
Vars
Numeric CORValue(0); //声明数值变量CORValue,初值0.//
Begin
CORValue = Covar(Close, Data1.Close,Length);//直接看这个可能不明白,这里的Covar是个函数,意思是把括号里的三个数据都返回这个函数Covar代码里去求值,再把值反馈回来,最后赋值给变量CORValue了。//
PlotNumeric("CORA",CORValue);//画线CORA,值为CORValue值。//
PlotNumeric("零线",0);//画零线。//
End
很简单的代码吧,解读起来不难,但这个代码要是不省略来,把函数Covar具体代码体现在里边,那也挺费劲的,所以编程人员都喜欢分开来,一段段来写,最后调用就很方便的。接下来我们就看Covar函数怎么写了,解读如下:
Params
NumericSeries Price1(1); //声明数值序列参数Price1,初值1.//
NumericSeries Price2(1);//声明数值序列参数Price2,初值1.//
Numeric Length(10);//声明数值参数Length,初值10.//
Vars
Numeric Mean1;//声明数值变量Mean1.//
Numeric Mean2;//声明数值变量Mean2.//
Numeric SumValue(0);//声明数值变量SumValue,初值0.//
Numeric i;//声明变量i。//
Begin
if (Length >0 )//假如参数Length值(初值10)大于0.//
{
Mean1 = Average(Price1, Length);//求平均值函数Average,前面解读过了,略过,这里就是把价格参数Price1与周期参数Length返回函数求均值了,再把值反馈回来,赋值给变量Mean1.//
Mean2 = Average(Price2, Length);//解读同上。//
for i = 0 To Length - 1//循环语句,之前也解读过了,就是让变量i从0到9循环。//
{
SumValue = SumValue + (Price1[i] - Mean1) * (Price2[i] - Mean2);//累加求和公式,把变量i从0开始累加到9,求得总和值SumValue。//
}
Return SumValue / Length ;//依据上面求得的总和,把变量SumValue / 参数Length 了,再把这值反馈给主函数。//
}Else//就是当Length小于0的时候(根据初值参数,没法成立的)。//
{
Return -1;//反馈-1值。//
}
End
很奇怪吧,我也觉得,插入COVAR指标了,反而没法显示出来具体的数值,重新分析了一下代码,没发现哪步有逻辑错误的。分析到这,我只能说,这可能是一个错误的代码,具体原因,没有算法对照,我暂时没找到哪步出错的,有大神看出了,希望能指点一二了。