BAFE 发布于2019-03-11
回复 519
浏览 48608
496
本策略主要是根据《量化课堂》中的海龟交易,进行改编,修复了中间N值的计算错误,用run_daily函数替换handle_data函数,这样可以保证N值和唐奇安通道的按日计算,而交易可以按分钟进行,修复原策略“如果当日开盘跌停,导致策略无法止损,后期无法交易的错误”。案例用的茅台,结果只能说一般,不如持有,但对于周期性行业,效果要好些,大家可以测试。
天然的海龟是一个比较成熟而完整的交易系统。构建交易系统的目的就是避免交易员自己做出主观的决策。这样才能真正的让概率发挥作用。海龟的主要捕捉的是趋势。其采用突破法来确定趋势,当价格突破时认为有买入的信号,而随着价格离当初突破的价格越来越远,我们认为趋势成立的概率就越来越高,加仓!那么,这个突破怎么确定呢?我们需要用到唐奇安通道的方法进行处理。
唐奇安通道
在海龟的系统的止盈止损中,实际上就是借助了唐奇安通道。那么,这唐奇安通道究竟是个什么东西呢?
首先引入上线中线下线的概念。上线=Max(前N个交易日的最高价),下线=Min(前N个交易日的最低价),中线=(上线+下线)/2,每个交易日结束之后更新当天的数据。这里N一般默认取20。那么唐奇安通道就是这个上线和下线所形成的走势区间。所谓的突破,也就是指今日盘中股价高过了上线。参见下图:
这里有个小插曲,为什么默认的N是20呢?这有个典故——神奇数字。Donchian在开发唐奇安通道的期间,碰巧阅读到整形外科医生Maxwel Maltz博士在1960年所作的“心理控制论”(这本书在1989年被重新发现)。Maltz博士称在整形外科手术过程中,患者最少需要21日来看到自己的新的容颜。这一事实震惊了Donchian,所以他也采用了这个说法。(小编也听说过,养成一个新的习惯需要21天嘛)
在聚宽平台实现这个策略,最好采用按分钟回测,这样可以准确的捕捉日内的买卖点,否则等日线的收盘价出来,说不定已经离突破很远了。同时请注意,在以往国外的实战当中,主要是在纽约和芝加哥的场内期货交易的,期货可以做多也可以做空,但是国内的股票只能买入和卖出,因此我们只能做向上突破。
止损
有了唐奇安通道,我们有了买入和卖出的依据了, 那么止损是干什么的呢?其实止损提出的初衷是,如果某笔交易是亏损的交易,造成的损失不要超过总仓位的k%。在完整的海龟系统里面,海龟用了一系列的公式进行仓位比例的计算,具体的内容可以参考下一节。
完整的海龟交易系统
完整的海龟交易系统包含以下内容:
1、市场:原版海龟选择交易纽约和芝加哥的场内期货。筛选标准则是高流动性,我大A股市场当然也符合这个标准啦。
2、仓位:这可以说是海龟交易系统最核心的部分。Richard Dennis期望通过市场的波动性水平来管理仓位。其构建了指数N来衡量波动性水平。指数的构建为以下四步
(注:如果暂时不能理解下面的公式,完全不用担心,这些都在代码中体现出来,大家可以在代码的实际使用中搞明白这些麻烦的公式)。
(1)True Range
TrueRange=Maximum(H−L,H−PDC,PDC−L)
TrueRange=Maximum(H−L,H−PDC,PDC−L)TrueRange=Maximum(H−L,H−PDC,PDC−L)
公式中,True Range表示一天内的波动量,H为当日日内最高价,L为当日日内最低价,PDC为前一日收盘价。
(2)N
N=19∗PDN+TR20
N=19∗PDN+TR20N=19∗PDN+TR20
公式中,TR为True Range,即一天内波动量,PDN为前一日的N值。此公式的真是含义为计算之前20天(包括今天在内)的N的平均值
(3)Dollar Volatility
DollarVolatility=N∗DollarsPerPoint
DollarVolatility=N∗DollarsPerPointDollarVolatility=N∗DollarsPerPoint
公式中,Dollar Volatility指的是波动的价格,Dollars per Point指的是标的股票每波动一个最小单位,1手股票的总价格变化量。在国内最小变化量是0.01元,1手是100股。所以Dollars per Point就是0.01×100=1
(4)Unit
Unit=1%ofAccountMarketDollarVolatility
Unit=1%ofAccountMarketDollarVolatilityUnit=1%ofAccountMarketDollarVolatility
公式中,Unit即为我们买卖的单位,1% of Account是总资产的1%,Market Dollar Volatility就是我们之前算出的Dollar Volatility,通过此公式计算出的Unit就是我们要买入的单位数量。此公式的意义是在一般情况下(市场波动率不大的时候),如果买入1Unit单位的资产,当天震幅使得总资产的变化不超过1%
3、入市:
(1)若当前价格高于过去20日的最高价,则买入一个Unit(注意是分钟回测)
(2)加仓:若股价在上一次买入(或加仓)的基础上上涨了0.5N,则加仓一个Unit
Example:若某只股票A的N为2,20日最高价为100
则当股价突破100时买入一个Unit,当股价突破100+0.5×2=101时加仓一个Unit,当股价突破101+0.5×2=102时加仓一个Unit。
4、止损:即损失达到多少时就一定要卖出现有仓位。海龟交易系统规定,当价格比最后一次买入价格下跌2N时,则卖出全部头寸止损(也就是,在一般情况下,损失不会超过2%)。
5、止盈:
系统一
当股价跌破10日内最低价时(10日唐奇安通道下沿),清空头寸结束本次交易
评论
基准收益是什么标的,为何让海龟对标真的兔子
2019-03-11
g.security = '600519.XSHG'
set_benchmark(g.security)
2019-03-12
国内A股怎么解决当天突破买入后加仓,但股价马上回落到原点,就没办法卖出止损的问题。如果是T+0交易就没问题。
2019-03-21
@鱼儿无忧 用融资融券做对冲,锁定利润或损失,第二天再平仓,当然交易成本会比T+0的要高~
2019-04-01
很希望能把这个单股票版改为多股票遍历版,即每次同时把自个儿关注股票在实盘里都要取数,可否有偿请您帮忙改进~谢谢!,我微信号18190686753
2019-04-18
计算ATR时,是不是应该用绝对值:hc = math.fabs(price['high'][i] - price['close'][i - 1])
2019-05-11
@与狼共舞其实改进很简单,添加关注股票池,然后加一个FOR循环,
2019-05-26
@刘鹏20 用绝对值逻辑上更通顺,但实际结果是一样的,因为我们取的是三者中的最大值,昨日的收盘价,要么处于今天的高点之上,要么处于,今天的高低点之间,要么处于今天的低点之下,这三种情况中的最大值,就对应了hl,hc,cl。
2019-05-26
多谢大神分享,自己写的海龟老是出错,参考一下大神的作业。
2019-07-12
@无敌小菜鸟 文章中说了是茅台,结果不如一直持有。
2019-09-21
在测试周期2014-01-01 到 2019-03-01中,基准收益720%,策略收益275%
2019-09-26
海龟体系核心还是方法论和交易观念的打造, 具体交易策略还是得相应调整了
2019-11-12
@Wangshizong 改啥,基准收益都这么高了,很难超过呢
2019-11-12
@智习 比如加些风控什么的再降低下回撤或者提高下alpha的值,或者把股票池进一步刷选什么的。。对比下。。。
2019-11-12
一直听说海龟体系,想学习一下,请问一下如何下载呢
2020-02-20