【量化课堂】海龟策略
导语:本篇介绍如何借鉴成熟的策略体系并在聚宽平台上实现。成熟的策略体系有很多种,例如海龟,羊驼,鳄鱼等等。今天的先举个海龟交易系统。
规范源码已更新!请大家克隆研究。
本文由JoinQuant量化课堂推出 。难度标签为进阶上,理解深度标签:level-0作者: Haozun
编辑: 宏观经济算命师
海龟
天然的海龟是一个比较成熟而完整的交易系统。构建交易系统的目的就是避免交易员自己做出主观的决策。这样才能真正的让概率发挥作用。海龟的主要捕捉的是趋势。其采用突破法来确定趋势,当价格突破时认为有买入的信号,而随着价格离当初突破的价格越来越远,我们认为趋势成立的概率就越来越高,加仓!那么,这个突破怎么确定呢?我们需要用到唐奇安通道的方法进行处理。
唐奇安通道
在海龟的系统的止盈止损中,实际上就是借助了唐奇安通道。那么,这唐奇安通道究竟是个什么东西呢?
首先引入上线中线下线的概念。上线=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
公式中,True Range表示一天内的波动量,H为当日日内最高价,L为当日日内最低价,PDC为前一日收盘价。
(2)N
公式中,TR为True Range,即一天内波动量,PDN为前一日的N值。此公式的真是含义为计算之前20天(包括今天在内)的N的平均值
(3)Dollar Volatility
公式中,Dollar Volatility指的是波动的价格,Dollars per Point指的是标的股票每波动一个最小单位,1手股票的总价格变化量。在国内最小变化量是0.01元,1手是100股。所以Dollars per Point就是0.01×100=1
(4)Unit
公式中,Unit即为我们买卖的单位,1% of Account是总资产的1%,Market Dollar Volatility就是我们之前算出的Dollar Volatility,通过此公式计算出的Unit就是我们要买入的单位数量。此公式的意义是在一般情况下(市场波动率不大的时候),如果买入1Unit单位的资产,当天震幅使得总资产的变化不超过1%
3、入市:海龟将所有资金分为两部分,一部分资金按系统一执行,一部分资金按系统二执行
系统一
(1)若当前价格高于过去20日的最高价,则买入一个Unit(注意是分钟回测)
(2)加仓:若股价在上一次买入(或加仓)的基础上上涨了0.5N,则加仓一个Unit
系统二
与系统一相一致,但当如破55日最高价时才购买
(1)若当前价格高于过去55日的最高价,则买入一个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日唐奇安通道下沿),清空头寸结束本次交易
系统二
当股价跌破20日内最低价时(20日唐奇安通道下沿),清空头寸结束本次交易
6、技巧:资金的调整。开始时设定两个比例:Loss和Adjust。若交易结束后损失的资金占总资金比例大于Loss,则今后只用现有投资资金的Adjust比例。
Example:若初始资金为100万,设定Loss=80%,Adjust=90%。则当总资产低于100×80%=80万时,进行一次资金调整,以后只使用80×90%=72万的资金用于投资行为
结果展示
在这里,小编用简单的海龟系统对几只股票进行了模拟,投入到系统一的资金比例设置为70%或80%,其他参数均不变,结果如下
平安银行 000001.sz
贵州茅台600519.sh
包钢股份600010.sh
南方航空600029.sh
中信证券600030.sh
中兴通讯000063.sh
你以为到这里就完了吗?嘿嘿,too young too simple
还有很多复杂的情况,你考虑到了嘛?比如说,通道上沿是昨天的,如果当天分钟价格反复在通道上下震荡,一个不小心就会造成反复的买入。再比如,如果当天刚刚买入,马上又要止损,但是日内不能卖出,我们明天要怎么处理呢?再比如说,如果今天要买入5000手,但实际情况下我们只能买入4000手,剩下的1000手我们要怎么处理呢?是明天补充,还是就此忽略?我们现在是设置的统一的止损线,我们是否可以对买入的每一次单都设置一个单独的止损线呢?
这些问题,没有标准的解法,你可以有自己的处理措施,但是小编只是想说:编写一个完整的策略,一定要思考到位。
小编在这里也只是列出了一部分问题,怎么解决这些问题就暂时留给各位读者作为家庭作业了!
本文由JoinQuant量化课堂推出,版权归JoinQuant所有,商业转载请联系我们获得授权,非商业转载请注明出处。文章更迭记录:
v2.0,2016-07-16,更新为规范源码,添加“函数说明书”
v1.1,2016-07-04,添加“导语”
v1.0,2016-05-21,文章上线
【量化课堂】海龟策略相关推荐
- Python量化交易03——海龟策略
参考书目:深入浅出Python量化交易实战 海龟策略也是经典中的经典.其核心要点是:在股价超过过去的N天交易日的最高点时是买入信号,跌破过去的N天交易日的最低点时是卖出信号.最高点和最低点的通道被称为 ...
- 【量化课堂】多头趋势回踩策略
导语:雪球文章<多头趋势回撤点:一个好懂又好用的均线策略>介绍了一个择时选股的辅助判断方法.这篇文章将根据这个思路构建一个交易策略,并使用历史回测来检验它的效果. 作者:肖睿 编辑:宏观经 ...
- python量化交易策略——唐奇安通道和海龟策略(1)
本文采用唐奇安通道和海龟策略相结合的方式 # coding=utf-8 from __future__ import print_function, absolute_import, unicode_ ...
- python行业中性_【量化课堂】因子研究系列之四 -- 市值与行业的中性化
导语:本文给出以BP(账面市值比)为例的因子缩尾处理和对市值与行业中性化的处理实现代码,展现单因子不同分位处在不同处理方法下的表现. 本文是一系列因子研究中的第四篇文章.本系列的文章有: 引言 因子系 ...
- 麦语言 python_麦语言海龟策略体验
麦语言海龟策略体验 麦语言海龟策略体验 Author: Zero, Date: 2018-11-21 22:49:46 Tags: 海龟 My语言 尝个鲜 基于发明者强大的低层, 完全支持数字货币现货 ...
- 【点宽专栏】海龟策略在商品期货市场资金流策略中的应用——点宽精选
图片 本文为点宽-泰迪杯获奖作品 挖掘目标 运用日级K 线数据对2011-2013 年数据刻画资金流向,发现资金流向对未来期货的影响,并使用持仓量.成交量和价格结合进行量化选标的,最后将选择的标的运用 ...
- 均线交叉策略、海龟策略:基于backtrader框架的实现
原创文章第74篇,专注"个人成长与财富自由.世界运作的逻辑, AI量化投资". 前面系列文章,把backtrader的方方面面介绍了一下,如何使用,内部运作机制,如何扩展. 客观讲 ...
- python 完整的海龟策略_海龟策略btc现货版
海龟策略btc现货版 海龟策略btc现货版 Author: groot, Date: 2020-02-22 21:40:07 Tags: 看到平台上没有公开的python海龟策略,自己写个简单的抛个砖 ...
- 【量化课堂】kd 树算法之详细篇 【1002 消化第一次ojbk】
导语 :在上一篇<kd 树算法之思路篇>中,我们介绍了如何用二叉树格式记录空间内的距离,并以其为依据进行高效的索引.在本篇文章中,我们将详细介绍 kd 树的构造以及 kd 树上的 kNN ...
最新文章
- linux 子网和广播地址异常
- php输出股票价格代码,实时抓取YAHOO股票报价的php代码_PHP教程 - strrpos
- Elasticsearch和Hive整合,将hive数据同步到ES中
- python一个try块后接一个或多个finally块_Python *与*语句完全等同于一个try – (除了) – finally块?...
- 时间排序_你懂使用C ++ STL在线性时间内查找未排序数组的中位数吗
- 这个免费的交互式课程在一小时内学习JavaScript
- @scheduled注解配置时间_Java开发重写Spring Boot定时任务,支持可动态调整执行时间...
- DBA整理的万字详解MySQL性能优化,值得收藏!
- mysql 5.7.29下载安装_deepin20 离线安装 MySQL5.7.29
- 【Spring】使用数据源连接池访问数据库
- asp.net core 系列之Reponse caching 之 Response Caching Middleware(4)
- 一个不明觉厉的貌似包含很多linux资料索引的网页
- 安卓java游戏模拟器_java游戏模拟器安卓版下载
- Java实现拖拉/滑动图片验证码
- PLSQL导入.txt文件
- 伺服电机转矩常数的标定方法
- usb调试与adb调试
- android上查看浏览器内核版本号,各种浏览器的userAgent及如何使用JS来检测游览器类型,或android是什么版本号...
- 触摸屏 java_价值10W大洋的触摸屏技术揭秘。。。
- 机械键盘测试(1)——序
热门文章
- IE和firefox上传文件mime类型的设置
- 广东电信公话200专用话机话务动态分析系统的构建
- Linux驱动编程篇(三)——LED驱动(一)简单LED驱动
- 问题关于json 字符串中带有反斜杠的问题
- 安装和控制DNS服务器
- IBM Installation Manager安装的几种安装方式
- BZOJ1707: [Usaco2007 Nov]tanning分配防晒霜
- 2019年5月7日公布的全国水质排行榜_全国城市水质排名一览表
- 如何设置app字体跟随系统_Android 应用全局字体调节或禁止随系统字体大小更改...
- 托马斯插件_托马斯·爱迪生讨厌的营销策略