分享

策略之参数自动化

 昵称14567126 2016-05-13

刚开始进入程式交易世界时,很多人会用最佳化参数的方式来挑选参数使用,但是随着环境的不同,就会开始自己一直去调整参数。当然,也不是所有参数都需要一直去做调整,但是,如果可以让自己的程式中的参数,随着环境改变而自动去调整变化,这样也许可以让程式变得更有弹性。


先介绍一个简单的交易策略当作范例,那就是N天的区间突破策略,其实也可以看成N根K棒的突破策略。


一般这种顺势突破策略在什么市场最容易赚大钱呢?那当然是在趋势明显走一段的大多头或大空头市场,但是如果遇到盘整格局的走势时,可能会有多空讯号反覆的问题。不过盘整盘是所有顺势策略的死穴,不单单是这策略的问题。


N天的区间突破策略的问题在于N


那这个N会有什么问题呢?你想想,当你设定N为5时,如果现在趋势明显,很好,进场会进的很快,可是当趋势混沌不明,忽上忽下时,这时候不就惨了,一下作多一下作空,每天都被杀好玩的。


所以,如果在趋势明显的时候,可以让N小一点,

在盘整的时候,可以让N变得大一点,这样多有弹性阿!重点来了,你要怎么让N去自动变化呢?


首先,想要决定N的大小,关键在于趋势是否明显。如果趋势明显,也表示指数的波动会比较大。

如果趋势是盘整,就表示指数会一直在某个区间整理,这样的波动会比较小,所以大家想到了吗?换句话来说,关键在于波动的大小。



假设我们一开始所设定的N是20,

因此也可以算出20根K棒的标准差,叫V20好了。

但是我们想用短一点的时间来衡量标准差,10根K棒好了,所以也可以得到10根K棒的标准差,就叫做V10吧!


那如何藉由波动率的变化来改变N?

请看以下策略源码体会体会



N天的区间突破策略原理:

当今天的价格的高点突破过去N天的最高点时买入,当今天的低点跌破过去的N天的最低点时卖出。

此策略适合趋势比较明显的商品,尤其是单边商品。


测试商品股指IF,使用两图表,子图1周期为1 hour,子图2周期为1 day。


源码如下:

inputs: x(20),y(10) ;

//定义波动率参数

Vars: V20(10),V10(10),N2(10),N1(10),N(10);

//定义变量


V20=Volatility(x)of data2;

V10=Volatility(y)of data2;

//定义波动率取日线数据,取子图2的日线线数。这个Volatility函数是分别取20日跟10ATR的移动平均数值

if V10<>0 and N2<>0 then begin

N1=(N*V20)/V10;

//定义N1的值,前提让分母不为0时执行,

//这N1=(N*V20)/V10是此参数自动化的核心, 代表你将原本固定N天的参考值改成会/根据V20和V10而变动的N1值, V20是较长期的,而V10是近期,大家看到这个公式应该可以发现,当你近期的波动率变大时,表示趋势出现,你的N1就会变小,而近期的波动率变得越小时,表示在盘整,N1就会变大,这样新的N变化似乎比较合理一点。


N2=IntPortion(N1);

//N1取整赋值给N2

end;


value1=Average(high of data2,N2)of data2;

value2=Average(low of data2,N2)of data2;

//定义前N2天的高点跟低点的值给value1value2


if close crosses above value1 then begin

buy next bar at market;

end;

//当价格上穿高点时买入或者反向


if close crosses below value2 then begin

sellshort next bar at market;

end;

//当价格下穿低点时开空或者反向


策略加载展示图:








    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多