暑假期间,我在家里发现了Ricequant,一个金矿开采地。 我花了很多时间阅读API文档并一步步构建乌龟的轮廓。
选择实施海龟策略是有原因的。 海龟交易规则不仅仅停留在指标体系的阶段。 准确的说,已经形成了真正意义上的交易系统的雏形。 它涵盖了交易的各个方面,不向交易者提供任何信息。 这就给主观想象决策留下了空间,使系统程序化运行的优势得以发挥。 在一步步敲代码的过程中收获还是很多的。 今天我也把自己的想法和代码分享给大家。
首先,让我们从趋势策略开始......
在国内A股浓厚的追涨杀跌氛围中,我首先感觉到趋势跟随策略简单、粗暴、有效。 不过,我觉得看策略就像看一个人的历史。 随着时间的推移,评价会更加客观。
我们先来看看基于API自带的趋势指标MACD的策略。 有关 MACD 的介绍,您可以点击从 A 到 Z 的技术分析、MACD 入门、MACD 柱状图帮助确定趋势变化(网页链接)以及计算公式。 。 为了消除选股因素的影响,采用每日指数数据CSI300.INDX作为交易标的。 为了与后续策略进行比较,回测时间统一设置为20050104到20160310这十年。(源码:网页链接)
十一年的回测只用了不到6秒(时间应该慢点……)
回测收益 209.829% 回测年化收益 11.067% 基准收益 205.066%
Alpha 0.0305 Beta 0.441 夏普 0.3638 Sortino 0.3448
信息比率 -0.1163 波动性 0.2007
最大回撤 50.77% 跟踪误差 0.2255 下行风险 0.2117
嗯……好像没有想象中的那么好。 我一般都会看交易软件上的MACD,觉得很靠谱。 但这样看的话,却并没有那么令人印象深刻。 最大回撤接近五十。 我不敢花钱。 交给它吧……我睡不着,但是夏普0.80,十年,不容易……不太令人满意。
好吧,我们进入正题:海龟交易规则。 听我认真地说:
海龟交易规则背景
说起海龟交易,就不得不提它的创始人——理查德·丹尼斯
理查德·丹尼斯是 20 世纪 70 年代和 80 年代著名的期货投机者。 他是一位传奇人物。 在他多年的投机生涯中,丹尼斯出尽了风头。 他给人的印象就是经常能在最低点买入,然后在最低点买入。 反手卖空达到顶峰。
他相信优秀的交易者是后天培养的,而不是天生的。 1983 年 12 月,他雇佣了 23 名绰号为“海龟”的新交易员,并对交易员进行趋势跟踪交易策略的培训。 然后,每个新人都会获得 100 万美元的初始资金。 经过5年的运营,大多数“海龟”的业绩都非常惊人,最好的业绩达到了1.72亿美元。 N年后,《海龟交易法则》向世人公布,我们有幸看到了曾经著名的《海龟交易法则》的全貌。 (画外音:能够开发出超前于时代的交易模型,好处太诱人了!)
海龟交易规则的内容。 海龟交易规则原书可点击(网页链接)
这里我们先画一个简单的思维导图来表示海龟交易规则的基本框架:
让我们详细讨论每一项:
市场:
海龟们都是期货交易者,海龟们只选择有一定交易量和高流动性的市场。 这里我选择每日指数数据CSI300.INDX。 一方面是为了更好的与基准比较,另一方面也是因为这个指数不用担心流动性问题。
仓位大小:
头寸规模是海龟交易系统最重要的部分之一。 头寸规模是海龟交易系统最重要的部分之一。 头寸规模是海龟交易系统最重要的部分之一。
海龟交易法则根据市场的绝对波动率来调整仓位规模,也就是对仓位的绝对波动率进行标准化。 例如,当投资标的价值波动较大时,可以减持; 相反,当其价值波动较小时,您可以增持。 总而言之,市场波动和头寸规模可以相互抵消。
海龟使用称为 N 的概念来表示市场的基本波动性。 它代表特定市场在单个交易日内引起的价格波动的平均幅度。 它还弥补了开盘价缺口。 其实这个所谓的N就是我们平时熟悉的ATR。 有关 ATR 的介绍,您可以单击 AVERAGE TRUE RANGE(网页链接)
以下为计算公式:
TR=最大(HL,H-PDC,PDC-L)
在:
TR = 真实振幅
H=当日最高价
L=当日最低价
PDC = 前一日收盘价
N(即ATR)的计算公式如下(实际上是之前计算的TR的20日均线):
N=(19*PDN+TR)/20
在:
PDN=前一天的N值
TR=当日真实波动幅度
有了N,下一步就是计算绝对波动率,即基础市场价格波动率(由N值定义)所代表的值的波动率。
绝对波动幅度=N*合约各点代表的值
最后,海龟根据我们所说的单位建立位置。 让 1N 代表账户净值的 1%。 波动率调整后的持仓单位为:
持仓规模单位=账户的1%/市场绝对波动幅度
可见,以N作为市场波动的标准化衡量标准,并以此作为开仓和持仓的依据,其背后的基金管理含义是,即使当日投资标的跌幅达到N的水平(ATR),当日损失将可控制在总资产水平的1%以内。 即使当日投资标的下跌N(ATR)水平,当日损失也能控制在总资产的1%以内。 即使当日投资标的下跌N(ATR)水平,当日损失也能控制在总资产的1%以内。
以书中给出的参考文献为例:
2003年3月住宅燃料油合约
日期 | 最高价 | 最低价格 | 收盘价 | 真实波动率| N值
-------- | ---
2002/12/2| 0.7375| 0.7227| 0.7359| 0.0148| 0.0134
2002/12/3|0.7447| 0.7310| 0.7389| 0.0137| 0.0134
2002/12/4 |0.7420|0.7140| 0.7162| 0.0280| 0.0141
-------- | ---
持仓规模按照12月4日N值0.0141计算如下:
N=0.0141
账户规模 = 1,000,000 美元
每个积分的价值 = $42,000
持仓单位大小=0.011000000/0.014142000=16.88
四舍五入后,我们得到 16 份合约。
此外,海龟在任何时候都受到其持有的单位(Units)数量的限制。 在证券市场等单一市场中,持有的单位数量上限设置为4个单位,海龟们一般每周一计算一次N,更新单位(Units)。 )尺寸。
进入市场:
海龟的市场准入规则有两个系统。 我们可以根据自己的意愿决定用哪个系统来分配我们的净资产。
系统一:基于20日突破的短线系统
突破的定义是超过前 20 天的最高价或最低价。
海龟总是在日内突破发生时进行交易,而不是等待收盘或第二天开盘
系统2:基于55天突破的更简单的长期系统
每当有信号表明价格超过前 55 天的最高价和最低价时就建仓。
由于我的回测周期较长,所以我选择了系统2,这是一个基于55天突破的更简单的长期系统。
追踪:
海龟交易系统并不是一有突破信号就满仓介入,而是根据最新的市场价格变化逐步建仓。
海龟仅在价格突破时建立 1 个单位的头寸。 建仓后,每突破一次,就根据前一笔订单的实际成交价格加仓,间隔0.5N。
例如:
金:N=2.5
55 天突破 = 310
第一个单位添加 310.00
第二个单位是 310.00+1/2 2.5 即 311.25
第三个单位是 311.25+1/2 2.5 即 312.50
第四个单位是 312.50+1/2 2.5 即 313.75
海龟队被告知在接收入场信号时要非常一致,因为一年中的大部分利润可能来自于两到三个大胜利。
止损:
对于大多数人来说,坚持亏损交易最终会扭转局面比简单地退出亏损头寸并承认交易失败更容易。 从长远来看,不设止损的交易不会成功。 在开仓之前,您需要预先确定退出点。 如果市场波动触及您的价格水平,您每次都必须退出,无一例外。 在这一立场上动摇最终会导致灾难。 (画外音:你可能前一段时间对此有了更深的理解。)
止损标准
海龟根据仓位风险设置止损。 任何交易的风险不能超过2%,因为1N的价格波动代表账户净值的1%。 2%风险允许的最大止损是价格波动2N。 以确保所有仓位的风险最小。 如果增加额外的单位,前一个单位的止损需要增加0.5N。
例如:
原油:N=1.255 日线突破=28.30
第一台 28.30 25.90
离开城市:
艰难的退出
对于大多数交易者来说,海龟退出规则是系统中最难的部分。 等待 10 或 20 的新低通常意味着看着 20%、40% 甚至 100% 的利润消失。
海龟交易规则对于系统1和系统2有不同的退出标准:
系统1:背离市场是多头头寸的第10天最低价和空头头寸的第10天最高价。如果价格背离头寸,则该头寸的所有单位将在第10天退出爆发
制度二:多头仓位为20日最低价,空仓位为20日最高价,退出市场。 如果价格波动偏离仓位直至20日突破,该仓位的单位全部退出。
海龟入市时一般不会设定退出止损价,但白天会密切关注价格。 一旦价格越过退出突破价,他们就会开始打电话下达退出指令。
规则即将结束
以上就是海龟交易系统的完整规则。 每个部分的规则以及各部分之间的关系构成了一个交易系统。 下面,我们将一步步实现......
仅基于突破信号构建的策略,不考虑 N - 源代码:网页链接
回测结果:
那么夏普比率是0.346,比之前的MACD结果要差,回撤表现也不好。 在这个策略中,每次买卖的金额简单地控制在初始资金的1/10。 当超过第55天的最高价时,买入1个单位,最新价格跌破第20天的最低价时,卖出1个单位。 反正都是追涨杀跌,很像。
接下来我保持上述策略的其他部分不变,只在仓位大小中引入N的概念来计算每笔交易的单位(而不是简单地用本金的1/10来控制),看看有什么效果将有。
介绍基于突破信号构建的 N 种策略
- 源代码与上面的链接相同。 。
回测结果:
回测收益453.756%
回测年化率17.218%
收入基准收入205.066%
夏普 0.7499
最大回撤32.33%
嗯,夏普比率终于提高了很多。 与之前没有引入N的策略相比,性能有了很大的提升,最大回撤也从48降低到了32。这说明Turtle系统中引入了N,即调整开仓单位根据过去的价格波动平仓可以经受数据的考验。
海龟策略完整体系构建
最后,这是海龟系统的完整版本。 该代码包含上一节中提到的所有链接。 请注意,这个海龟策略是基于系统二的。 有兴趣的朋友可以尝试搭建系统一。
源代码交付:网页链接
这个完整版是用Python写的,上面都是用Java写的。
在不使用python的一些黑魔法的情况下,java代码是190行,python代码是120行。
回测结果:
回测收益287.019%
回测年化收益率13.384%
基准回报率205.066%
夏普 0.6562
最大回撤23.54%
欧普吐血了。 虽然代码比较长,但是运行速度很快。 最后我得到了它。 该策略的完整版本包括海龟中入场、跟踪、止损和出场的所有细节。 然而,这并没有什么用。 结果并不如预期。 漂亮,但是在上一个的基础上继续将最大回撤减少到22。 我想这是因为止损方法好,所以我稍微放心了一些。
从某种程度上来说,我还是了解了构建一个原型交易系统的方方面面,我对自己说,成功地完成了一次心理按摩。
最后欢迎朋友们对代码进行深入讨论。
扩大:
海龟策略本身是基于期货的,与证券市场有些不同。 另外,海龟本来就是用于期货的,卖空成本较低。 A股的融券(融券)成本比较高(哭……这时候还能融券吗?),所以以上都不涉及融券。 另外,毕竟是上世纪的老策略,结果只能靠运气。 不过对于新手来说学习和体验还是很有收获的。 试图理解其内部逻辑、结构框架以及系统各部分的相互制约对我们来说是有价值的。
基于ATR的海龟策略的止损规则具有一定的参考意义。 感觉比硬性设定止损线更“科学”。 如果有兴趣的话,可以专门控制变量进行比较。 你就会知道它是骡子还是马。
网页链接
网页链接 Python 完整版
$中证500(SH000905)$ $创业板(SZ159915)$ $深成指(SZ399001)$$上证综指(SH000001)$$恒生H股ETF(02828)$$恒生指数(HKHSI)$$CSI 300(SZ399300)$
@ETF拯救世界@小石在东@铁鸡金融@伟元外@大唯若愚@无意识小伙伴@马里奥@价值信仰@特立独行的小猪@今日话题@DAVID自由之路@SARS型伪价值炒作@ shulianginvestment01@502的牛@whirlpool火影忍者NARUTO@耐力投资@hogheadIRON@怪盗KuU@价值趋势科技派@深圳价值投资人