期货软件TB系统源代码解读系列1
这是一个期货爱好者的个人分享,不是专业程序员,各位编码大神看了请不要见笑。
好了话不多说,我直接用求平均值AverageFC代码附上,一一解释说明。
Params
NumericSeries Price(1);
Numeric Length(10);
Vars
Numeric AvgValue;
Begin
AvgValue = Summation(Price, Length) / Length;
Return AvgValue;
End
解释如下:
Params
Numeric Length(10);
NumericSeries Price(1);
Vars
Numeric AvgValue;
Begin
AvgValue = Summation(Price, Length) / Length;
Return AvgValue;
End
了解了怎么函数AverageFC求平均值,那么接下来看我们经常用的双均线移动平均线交易系统的源代码如何直接调用它的。
Params
Numeric FastLength(5);
Numeric SlowLength(20);
Vars
NumericSeries AvgValue1;
NumericSeries AvgValue2;
Begin
AvgValue1 = AverageFC(Close,FastLength);
AvgValue2 = AverageFC(Close,SlowLength);
PlotNumeric("MA1",AvgValue1);
PlotNumeric("MA2",AvgValue2);
If(!CallAuctionFilter()) Return;
If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])
{
Buy(1,Open);
}
If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])
{
SellShort(1,Open);
}
End
根据这源代码正常测试公式,不同周期,得到收益差距很大,你会发现周期时间越大,它的K线波多越剧烈,得到的结果收益跟亏损不怎么理想的。
根据测试我一般建议关注以下几个点:
1、开仓点位,这很重要,你是以开盘价、收盘价或则指定价格开仓,在历史K线中测试时,结果可能很理想,但实盘能否如此理想,你得在开盘期间确认一下。
2、盈亏比,不管均线系统,还是别的系统,一般都是以小亏损来换取大盈利的,这种要求盈亏比3:1,成功率25%左右,最后得到的结果才有可能是正的。(当然高成功率也可以,但这种人很少,而且这种系统我也暂时没见过,我看到的基本都是小亏大盈的系统,成功率最高的也就是45%-50%)
3、参数优化,上面的代码参数是5跟20,你要是觉得这参数不符合你心意,那你可以照你经验来修改。我常用的方法是测试所有的品种,各周期不同也都优化一遍,最后统计出一个相对符合数据的参数(不是符合我自己心意的)。
4、交易频率,像上面的源代码,交易频率很快,基本就是平仓的同时,就反手开新仓的。这频繁的交易,可能跟你交易理念也不相符,比如正在上涨趋势,只是因为均线参数过小,它有交叉了,系统就自动显示平仓,反手卖出。要怎么解决这个问题呢?只要在系统中添加新一条更大的均线限制就行。
好了,在结束前,我就附上一个修改后的源代码,有空你们自己测试一下,这均线还是很好的,记得这是针对3、5分钟周期的k线图。
Params
Numeric FastLength(5);
Numeric SlowLength(20);
Numeric DslowLength(200);
Vars
NumericSeries AvgValue1;
NumericSeries AvgValue2;
NumericSeries AvgValue3;
Begin
AvgValue1 = AverageFC(Close,FastLength);
AvgValue2 = AverageFC(Close,SlowLength);
AvgValue3 = AverageFC(Close,DslowLength);
PlotNumeric("MA1",AvgValue1);
PlotNumeric("MA2",AvgValue2);
PlotNumeric("MA3",AvgValue3);
// 集合竞价和小节休息过滤
If(!CallAuctionFilter()) Return;
If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1] && Close > AvgValue3[1])
{
Buy(1,Open);
}
If(MarketPosition ==1 && AvgValue1[1] < AvgValue2[1])
{
Sell(1,Open);
}
If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1] && Close < AvgValue3[1])
{
SellShort(1,Open);
}
If(MarketPosition ==-1 && AvgValue1[1] > AvgValue2[1])
{
BuyToCover(1,open);
}
End
作者:翊之依
链接:https://www.jianshu.com/p/92572e24432b
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

加载中…