以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  交易策略发布专区  (http://weistock.com/bbs/list.asp?boardid=10)
----  【长期策略】动态突破II  (http://weistock.com/bbs/dispbbs.asp?boardid=10&id=30713)

--  作者:RogarZ
--  发布时间:2012/11/18 12:18:04
--  【长期策略】动态突破II

动态突破II

The Dynamic Break Out Strategya II

策略简述:

开多:昨收高于布林上轨且最高价大于等于X(X由自适应模块决定)周期最大的最高价。

开空: 昨收高于布林上轨且最高价大于等于X(X由自适应模块决定)周期最大的最高价。

平多&平空:X(X由自适应模块决定)周期的收盘价移动平均。

策略详述:

动态突破策略由George Pruitt 首次发表在1966年期货杂志上,之后被广泛地使用在各类市场上,取得了非常傲人的成绩。现今,在原系统上加入一个自适应参数调整模块,形成了新的动态突破II系统。

动态突破II最值得称道的地方就在于它能根据市场情况自动调节参数,它的基础是唐奇安通道(相关Donchian Channel可参考之前的文章http://www.weistock.com/bbs/dispbbs.asp?boardid=10&Id=30353)。

那么,如何设计出自适应参数调节功能模块? 在动态突破II中,我们将采用市场波动率作为评判标准。这种想法还是源自经典的唐奇安通道。若我们基于唐奇安通道做优化的话,会发现同一个市场不同时期最优值是不同的。大的波动率常常代表市场方向不明朗,我们通过增大回溯值,让策略更难触发交易;小的波动率常代表趋势市场,通过减少回溯值,我们让系统更容易交易。这样这样可以使系统锁定长期趋势利润而又能在趋势发生改变时及时出场。当然利用市场波动率作为参数调节并不是唯一选择,大家完全可以选用其它效果类似的指标来自动调节参数,从而来决定出场点。

需注意的是,自适应参数的调节区间是有范围的。在这个例子中,动态突破II的回溯值在2060之间,参数也设在这个范围内。

对于进场点,动态突破II一开始用过去20天来计算买卖界限,第一次买点就是过去20天最大的最高价,第一次卖点就是20天的最小值。每天结束后用30天收盘价的标准差作为市场波动率(也可以其他指标来估计波动率,如平均波动幅度,真实波动幅度,收盘价变化的标准差等等。确定当天的市场波动率后,按数值与前一日做比较,按波动的幅度来确定回溯值,如果波动率增长了10%,那么相应的回溯值也增大10%

除此以外,我们还将采用一个自适应布林带(可参考布林强盗系统)——其作为一个“确认”技术指标。

至于出场点,该策略使用X周期收盘价移动平均值,当然也是由回溯值决定。

代码:


//策略:动态突破II
//类型:中长期
//版本:1.0
//修订时间:2012.11.18
//DESIGNED BY ROGARZ

//中间变量
INPUT:SS(1,1,100,1),M(26,5,300,30),N(2,0.1,10,1);// 定义参数
VARIABLE:回溯值:=20;//定义全局变量
MID :=  MA(CLOSE,M);//布林中轨
UPPER: MID + N*STD(CLOSE,M);//布林上轨
LOWER: MID - N*STD(CLOSE,M);//布林下轨
手数:=ss;

//自适应模块
市场波动率:=STD(CLOSE,30);
昨日市场波动率:=STD(REF(CLOSE,1),30);
波动率的变化率:=(市场波动率-昨日市场波动率)/市场波动率;
回溯值:=(1+波动率的变化率)*回溯值;//LOOKBACKDAYS
回溯值:=ROUND(回溯值);//取整
回溯值:=MIN(回溯值,60);//确认回溯值不大于60
回溯值:=MAX(回溯值,20);//确认回溯值不小于20
X周期最高价:REF(HHV(H,回溯值),1);
X周期最低价:REF(LLV(L,回溯值),1);
X周期收盘移动平均:MA(CLOSE,回溯值);

//交易条件
开多条件:=CLOSE>X周期最高价 AND CLOSE>UPPER;
开空条件:=CLOSE<X周期最低价 AND CLOSE<LOWER;
平多条件:=CLOSE<X周期收盘移动平均;
平空条件:=CLOSE>X周期收盘移动平均;

//交易系统
平多:sell(平多条件 and holding>0,手数,market);
平空:sellshort(平空条件 and holding<0,手数,market);
开多:buy(开多条件 and holding<=0,手数,market);
开空:buyshort(开空条件 and holding>=0,手数,market);

//其他
资金:asset,noaxis,colorred;
持仓:holding,linethick0;

论坛相关帖
z7c9版:
http://www.weistock.com/bbs/dispbbs.asp?BoardID=10&ID=8277&skin=0


策略仅作交流学习,用于实盘后果自负!


--  作者:烟圈
--  发布时间:2012/11/18 15:11:20
--  
谢谢提供,学习了
--  作者:梦想
--  发布时间:2012/11/18 15:49:58
--  
不错
--  作者:自渔自乐
--  发布时间:2013/9/23 20:47:31
--  
请教 RogarZ老师,代码到下面这里我就看不懂了:

回溯值:=MIN(回溯值,60);//确认回溯值不大于60
回溯值:=MAX(回溯值,20);//确认回溯值不小于20
X周期最高价:REF(HHV(H,回溯值),1);
X周期最低价:REF(LLV(L,回溯值),1);
X周期收盘移动平均:MA(CLOSE,回溯值);

下面这样理解对吗:

回溯值A:=MIN(回溯值,60);//确认回溯值不大于60
回溯值B:=MAX(回溯值A,20);//确认回溯值不小于20
X周期最高价:REF(HHV(H,回溯值B),1);
X周期最低价:REF(LLV(L,回溯值B),1);
X周期收盘移动平均:MA(CLOSE,回溯值B);

如果不对,我的学习局限在哪里,发现我学习金字塔等非一般股软进度真慢。我的理解就局限于普通函数那里了,一涉及“变”的概念就无法进步了

--  作者:dcetrader
--  发布时间:2014/10/6 21:07:45
--  
为啥我测试时候发现这个回溯值一直就固定在20呢了????
--  作者:nickzxd
--  发布时间:2016/8/28 0:32:26
--  
“大的波动率常常代表市场方向不明朗,我们通过增大回溯值,让策略更难触发交易;小的波动率常代表趋势市场,通过减少回溯值,我们让系统更容易交易。


我怎么觉得这一段说反了呢。。。大波动率是有单边趋势,小波动率是横盘,趋势不明朗啊。
--  作者:nickzxd
--  发布时间:2016/8/28 0:42:35
--  
看代码的感觉,关键应该是在于波动率的变化率。
小波动率是横盘,大波动率是出现单边趋势。
那么当波动率的变化率变大的时候,说明出现了从横盘变为趋势的苗头。这种情况下多回溯一点,看看是不是只是从小幅横盘变为大幅横盘或者假突破信号。
而波动率的变化率没有增大,则之前是横盘,现在也是横盘;之前是趋势,现在也是趋势。不用通过增加回溯区间来判断是否是假突破信号。
我大致是这么理解的。如有错误请指教。