期货软件TB系统源代码解读系列24-CROA

CROA指标,TB系统称为相关分析指标,可百度找了半天,也没找到具体信息的,这个指标我也不是很熟悉,但是依据它观察过一段时间,看着还不错的。可它的算法,我看代码是理解的,说出来也麻烦,我直接做代码解读吧。

先看它用的求相关系数的函数Correlation,代码如下:

Params

NumericSeries Price1(1); //声明数值序列参数Price1,初值为1.//

NumericSeries Price2(1); //声明数值序列参数Price2,初值为1.//

Numeric Length(10); //声明数值参数Length,初值为10.//

Vars

Numeric Matches(0); //声明数值变量Matches,初值为0.//

BoolSeries Con; //声明布尔型序列变量Con。//

Numeric i; //声明数值变量i。//

Begin

Con = ( Price1 >= Price1[1] and Price2 >= Price2[1]) or ( Price1 < Price1[1] and Price2 < Price2[1]); //这括 里是用逻辑符合or连接,只要其中一个成立,就可以执行下列代码。看第一个括 ,假如当前k线的价格Price1大于等于前一k线的价格Price1,并且当前k线价格Price2大于等于前一k线价格Price2的。第二个括 ,假如当前k线价格Price1小于前一k线的price1,并且当前k线价格price2小于前一k线Price2的。两个括 ,把成立的赋值给布尔型序列变量Con,即为真。//

if (CurrentBar < Length )//假如当前k线索引值小于周期Length(初值10).//

{

Return 0;//返回值为0.//

}

Else//相当于当前k线索引值大于或等于周期10的,即第11根k线之后的,按下列执行。//

{

for i = 0 To Length – 1//循环语句,变量i从0到9依次循环执行.//

{

if (Con[i])//布尔型序列变量Con[i],依变量i值改变的。//

{

Matches = Matches + 1 ; //变量Matches自加1.再把值赋值回给变量Matches。//

}

}

Return 2 * Matches / Length – 1 ;//返回值主函数的值等于2*Matches / Length – 1。//

}

End

它在超级图表显示的代码如下:

Params

Numeric Length(10);//声明数值参数Length,初值为10,其实就是周期了。//

Vars

Numeric CORValue; //声明数值变量CORValue。//

Begin

CORValue = Correlation(Close, Data1.Close,Length);//咱在Correlation声明了三个参数吧,这边也对应着把三个参数返回去求值,再把值反馈回来,这个Data1.Close意思是第一个插入图表的商品合约收盘价。//

PlotNumeric(“CORA”,CORValue);//画线CORA了,值就为CORValue值。//

PlotNumeric(“零线”,0);//画零线。//

PlotNumeric(“1线”,1);//画1线,值为1了。//

PlotNumeric(“-1线”,-1);//画-1线,值为-1了。//

End

这应该能看得明白吧,这就是对比两个价格,看它们的相关系数是多少的,我们做成程序化就是依据这个相关系数来做的,规则如下:

1、在均线200上的,而且相关系数是大于0的,开多。

2、在均线200下的,而且相关系数是小于0的,开空。

3、有多单时候,当相关系数小于等于-0.5的,平仓。

4、有空单时候,当相关系数大于等于0.5的,平仓。

很简单的系统吧,我就直接附上代码及结果如下了:

Params

Numeric Length(10);

Numeric DslowLength(200);

Vars

NumericSeries CORValue;

NumericSeries AvgValue3;

Begin

AvgValue3 = AverageFC(Close,DslowLength);

PlotNumeric(“MA3”,AvgValue3);

CORValue = Correlation(Close, Data1.Close,Length);

If(!CallAuctionFilter()) Return;

If(MarketPosition <>1 And CrossOver( CORValue[1],0) And AvgValue3[1] < Close[1] )

{

Buy(1,Open);

}

If(MarketPosition <> -1 And CrossUnder(CORValue[1] , 0) And AvgValue3[1] > Close[1])

{

SellShort(1,Open);

}

If(MarketPosition == 1 And CrossUnder(CORValue[1],-0.5))

{

Sell(1,Open);

}

If(MarketPosition == -1 And CrossOver(CORValue[1],0.5))

{

BuyToCover(1,Open);

}

End

这回也是把具体数据也附上了,看着喜不喜欢的,就看个人了,反正我测试的也就这样了,都是没做什么优化的参数,要是喜欢这个代码的,自己优化统计,找到合适的参数了。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年7月2日
下一篇 2018年7月3日

相关推荐