Board logo

标题: [策略探讨] 突破策略之参数自动化 [打印本页]

作者: 龙听    时间: 2017-12-21 16:29     标题: [策略探讨] 突破策略之参数自动化

原文参考合作:http://www.bituzi.com/2013/01/blog-post_18.html

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

先介绍一个简单的交易策略当作范例,那就是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;

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


作者: 龙听    时间: 2017-12-21 16:49

MC源码:
  1. inputs: x(20),y(10) ;
  2. Vars: V10(10),V20(10),N(10),N1(10),N2(10);
  3. V20=Volatility(x)of data2;
  4. V10=Volatility(y)of data2;

  5. if V10<>0 and N2<>0 then begin
  6. N1=(N*V20)/V10;
  7. N2=IntPortion(N1);
  8. end;

  9. value1=Average(high of data2,N2)of data2;
  10. value2=Average(low of data2,N2)of data2;

  11. if close crosses above value1  then begin
  12. buy next bar at market;
  13. end;

  14. if close crosses below value2  then begin
  15. sellshort next bar at market;
  16. end;
复制代码

作者: 龙听    时间: 2017-12-21 16:55

爱心页面打包,亲们就不用自己再设置页面了,装上MC后,直接解压这个,就能在MC中打开了。下载地址:突破策略之参数自动化.rar


效果图如下:(其它这也算是一个不错的趋势性策略,做螺纹、天胶类的趋势性好的品种也问题不大的)







欢迎光临 龙听期货论坛 (http://www.qhlt.cn/) Powered by Discuz! 7.2