对角懵逼学《海龟》(三)

发布于: 修改于:雪球转发:0回复:2喜欢:4

最近玩 vn.py 有点high过头了,各种回测play。都差点忘了我本来只是想弄一个模拟的交易数据来计算风险评估的。先是用 Donchian Channel 突破做了IF主力连续合约的10分钟K线,又是折腾螺纹钢rb1701。后来发现,分钟线的收益,还不如日线……现在又开始倒腾日线。

真正的把书上的东西,写成一个策略的时候,会发现非常多的细节需要处理。这次聊聊写一个单品种的 Donchian Channel 突破策略(以下简称DC)。效果如果好的话,可以公开一下源码。

首先就是合约的问题。商品期货合约一年一换,比如rb1701,是当年1月16日切换的,其历史数据,在1月15日以前,是rb1601的数据。所以可以看到很多交割日后,K线显示大幅跳开,其实是新合约上市了。

也就是说,如果回测单一合约,最多也只有一年周期的数据。

或者可以考虑主力连续合约,不过依然难以避免主力合约更换时,大幅跳开的问题。

最终考虑的结果,还是只采用单一合约。由于只是单品种的策略,所以可以通过回测大量的品种的所有月份合约来回测。

先贴一段直接把日线数据套在分钟线上的DC策略,看一下结果:

开始载入数据

载入初始数据完成,数据量:15

载入回测数据日期: 2016-02-14 00:00:00 - None

载入回测数据完成,数据量:149

数据回放结束

计算回测结果

------------------------------

第一笔交易: 2016-02-29 00:00:00

最后一笔交易: 2016-05-05 00:00:00

总交易次数: 5.0

总盈亏: 12,330.0

最大回撤: -900.0

平均每笔盈利: 2,466.0

平均每笔滑点: 32.0

平均每笔佣金: 0.0

胜率 80.0%

平均每笔盈利 3,307.5

平均每笔亏损 -900.0

盈亏比: 3.67

历史成交:

2016/02/15 多头入场

2016/02/15 开 多 1 仓 加仓位置 1873.0 - 1886.38 - 1899.76 - 1913.14 止损: 1819.47959184

2016/02/22 加 多 1927 1886.38

2016/02/22 加 多 1927 1899.76

2016/02/22 加 多 1927 1913.14

2016/02/22 加 多 4 止损:1873.78306861

2016/02/26 多 离场 亏损突破

2016/02/26 平 多 4 仓 1898

2016/03/01 多头入场

2016/03/01 开 多 1 仓 加仓位置 1950.0 - 1964.1 - 1978.21 - 1992.31 止损: 1893.58269163

2016/03/02 加 多 1990 1964.1

2016/03/02 加 多 1990 1978.21

2016/03/02 加 多 3 止损:1918.75535651

2016/03/03 加 多 1993 1991.56

2016/03/03 加 多 4 止损:1909.34425962

2016/05/04 多 离场 盈利突破

2016/05/04 平 多 4 仓 2295

2016/05/10 冷却中, 不开仓 cd: 1系统2 开仓 空 : 1785

2016/05/10 开 空 1 仓 加仓位置 2078.0 - 2028.73 - 1979.46 - 1930.19 止损: 2275.078102

2016/06/06 空 离场 盈利突破2034 2029 2275.078102

2016/06/06 冷却中 ...

2016/06/27 多头入场

2016/06/27 冷却中, 不开仓 cd: 1系统2 开仓 多 : 2683

2016/06/27 开 多 1 仓 加仓位置 2207.0 - 2237.45 - 2267.89 - 2298.34 止损: 2085.21952981

2016/07/19 多 离场 盈利突破

2016/07/19 冷却中 ...

2016/08/08 多头入场

2016/08/08 冷却中, 不开仓 cd: 1系统2 开仓 多 : 2683

2016/08/08 开 多 1 仓 加仓位置 2536.0 - 2578.56 - 2621.11 - 2663.67 止损: 2365.77156706

2016/08/30 多 离场 盈利突破

2016/08/30 冷却中 ...

2016/09/07 冷却中, 不开仓 cd: 1系统2 开仓 空 : 1878

2016/09/07 开 空 1 仓 加仓位置 2334.0 - 2298.29 - 2262.59 - 2226.88 止损: 2476.82675054

似乎跟想象中的有点不一样?并没有出现频繁开仓然后亏成狗,反而只有寥寥的几次开仓就获得相当高的收益。很简单,为了不让自己受到打击,所以我特地选择了今天单边行情走势最好看的螺纹钢rb1701来回测。

至于上面 冷却中 ,这是应用到了海龟中突破信号有效性判定,如果前一次是盈利性突破,那么下一次突破信号视为无效,为了方便代码的定义,此时我会设为技能冷却中。这样的话,数据信号行是假装开仓了,实际上并没有开仓。

根据海龟交易法则中头寸规模的设定,一个头寸的大小跟其波动性ATR有关。同时,不同品种的合约,其一手的价值也差距很大。对于资金量很小的人来说,很难去调整头寸规模了。

举个栗子

螺纹钢rb,刚开始做期货大都会推荐使用这个试手,波动大,够活跃。以最近的主力合约 rb1701 为例,其10分钟K线的范围,在 7 ~ 15 之间,平均值大概是12。那么可以计算得出,一个头寸如果最小是1手螺纹钢,那么对应需要总资金

总资金∗风险投入=2ATR∗头寸大小∗合约大小

风险投入,书上取 2%,螺纹钢合约大小是1手10吨,那么

总资金=12∗2∗1∗10/0.02

相当于,你用螺纹钢来做10分钟K线的海龟策略,那么最少要准备12k的资金。这也就意味着,如果你资金在10万以下,开仓的范围也仅在8手以内。

反过来,如果想通过分散品种来平摊风险,那么类似于螺纹钢这个价值的品种,可以同时开仓8个品种。可以打打分摊风险。如果是日线的rb1701,其ATR为 60 ~90。按平均75来算的话,10万资金勉强能开2个品种。就问你满仓2个品种,你怕不怕?

所以日线还是等有钱之后再说吧。

先来看看螺纹钢主力连续合约,也不知道从哪里下来的数据,不用在意这些细节。

本金10w,单品种回撤真不是一般的爽。不过我忘记加上动态头寸了,再加上:

不过还只是针对ATR来调整头寸,但是整个收益曲线的波动却莫名地,增加了……

心塞

没关系,还没考虑整体权益来计动态调整。再加入整体权益来动态调整:

似乎逻辑有点问题。但是我又找不出什么原因。之前回测都是在使用主力连续合约,合约换季时可能会存在很大的跳空。所以我决定花点时间弄个rb1610的合约分钟线来回测。

然后就弄好了。

呵呵

再来一遍,无动态头寸:

```

初始资金: 12000

第一笔交易: 2015-10-26 21:20:00

最后一笔交易: 2016-09-20 09:30:00

总交易次数: 346.0

总盈亏: 29,297.53

最大回撤: -24%

平均每笔盈利: 84.67

平均每笔滑点: 24.62

平均每笔佣金: 1.54

胜率 41.04%

平均每笔盈利 385.5

平均每笔亏损 -183.55

盈亏比: 2.1

```

根据 ATR 动态调整头寸:

初始资金: 100000

第一笔交易: 2015-10-26 21:20:00

最后一笔交易: 2016-09-20 09:30:00

总交易次数: 346.0

总盈亏: 481,027.36

最大回撤: -43%

平均每笔盈利: 1,390.25

平均每笔滑点: 525.78

平均每笔佣金: 30.3

胜率 41.04%

平均每笔盈利 6,484.51

平均每笔亏损 -2,645.95

盈亏比: 2.45

趋势投资常见的资金曲线形态比较明显了,因频繁开仓而损耗的缓慢亏损,然后碰到一波行情猛拉一波收益。我感觉1个亿的小目标近在咫尺了!

最后是根据总权益+ATR来调整:

然后就爆仓了……

捂脸

特么头寸控制这么严格为毛会爆仓啊喂?!

检查了一下,发现是头寸和ATR之间的问题。原版海龟的ATR是基于日线的,而对于10分钟线,偶尔会出现很长时间没有成交,或者真的内心毫无波动的一天。此时的ATR会低至1。这样算下来,这样算出来的头寸规模,几乎就是满杠杆了……怪不得会爆仓。

在海龟里面,N指标就等于是 ATR,这里我决定擅自加入一个限制,如果ATR过低,N起码不低于6个价差。为什么是6呢?因为这样才66666。

初始资金: 100000

第一笔交易: 2015-10-27 10:40:00

最后一笔交易: 2016-09-20 09:30:00

总交易次数: 335.0

总盈亏: 1,462,711.22

最大回撤: -56.2%

平均每笔盈利: 4,366.3

平均每笔滑点: 1,722.63

平均每笔佣金: 115.55

胜率 42.69%

平均每笔盈利 30,329.5

平均每笔亏损 -15,491.7

盈亏比: 1.96

一年10倍,我觉得我的小目标可以定为1.1个亿了。

话说本来想要分析风险的?没有动态调仓的时候,数据体现的是出入场信号的质量。胜率41.04%,盈亏比2.1,还凑合。最大回撤24%,这个看起来是非常高了。海龟上说,实盘中要做好准备,实盘中的回撤可能会是历史回测中的2倍,意味着实盘可能会达到50%以上。使用动态头寸之后,就可以看总盈亏和最大回撤了。从总盈亏来看,一年盈利达到1400%,同时回撤也很惊人地达到56.2%,已经超出无动态头寸的24%的两倍了。

总而言之,对于单品种来说,海龟的回撤和收益都是杠杠的。接下来的通过分散品种来分散风险的机制,就显得非常重要了。理论上,分散品种可以稍微平滑一下收益曲线,同时也有可能因为共振,导致更加陡峭的回撤和收益。

这次,就酱。

2016年9月21日 星期三

对角懵逼

微博ID:@潇Shawn纹

雪球ID:@潇纹

全部讨论

2022-02-14 00:05

到底是怎么应用的呢?

2016-12-27 08:50

赞!