海龟策略深入研究-策略回测系列-2:原版海龟策略(上)

2024-04-21 09:48

本文主要是介绍海龟策略深入研究-策略回测系列-2:原版海龟策略(上),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

海龟策略7大要素

原版海龟策略出现在《海龟交易法则》最后章节的附录中,有兴趣的朋友可以详细看看,在这里我们概况一下海龟策略的7大要素,如图所示。
enter image description here

(由于内容有点多,故拆分成上下两部分,这里只介绍到第四大要素,即入场信号)

1.品种选择

书中明确表示海龟策略选择标准是流动性高的期货品种,另外两个隐含的条件是具有历史大波动并且无人为干预的品种(例子:肉类交易厅场内交易员腐败问题)。

在国内,其对应的就是四大期货交易所成交量巨大的品种,并且可以剔除股指期货(因为政府干预)。

2.头寸规模

2.1 头寸规模含义

头寸规模是海龟交易系统最重要的部分之一,其优势是根据一个市场的绝对波动幅度来调整头寸的规模,等于将头寸的绝对波动幅度标准化。

这意味着,一个特定头寸在某一天的向上或向下变动幅度与其他市场的头寸基本相同,无论这个特定市场的波动性是大还是小。

举个例子,若一个市场的合约价值波动性较强,那么这个市场中的合约持仓就少一些,反之,若一个市场的波动性较弱,这个市场中的头寸就可以大一些。

总之,市场的波动性与头寸的规模是相互抵消的。波动性标准化处理意味着不同交易在盈亏概率上是相同的:它们都有同样的机会赚一美元或赔一美元。这便提高了多重市场分散性的效果。

2.2 头寸规模计算

enter image description here
公式中有2点需要特别说明一下,一个是"N",另一个是"每一点数所代表的美元”。

  • N:其定义是真实波动幅度(TR)的20日指数移动平均值,即20日的ATR(至于ATR指标的介绍和计算过程在附录A-1中展开,这里不做过多说明)。另外需要注意的是,ATR是基于期货指数得到的,这意味着在策略实现中,不管是历史回测还是以后实盘测试,都要用到期货指数。解决方法有两个:要么自己自己写脚本合成实时的指数行情数据,要么使用第三方收费的指数行情数据。(考虑开发脚本的难度和运维数据的成本,显然购买第三方数据性价比高的)
  • 每一点数所代表的美元:每一手合约规模数量,以美元为计价。

2.3 举例说明

原版头寸规模单位计算例子:纽约商品期货交易所(NYMEX)民用燃料油(HO03H)在2002年12月4日,其日K线的最高价、最低价、收盘价分别是0.7420、0.7140、0.7162,ATR值是0.0141,民用燃料油的合约规模是42000加仑(1000桶),若账号资金是一百万,则得出的头寸规模是16.88,四舍五入得头寸规模为17手合约,如图
enter image description here

这里可以看出美国期货合约,其合约规模非常大,但是价格低(即ATR值小),这与国内期货合约是相反的。这是因为国内期货表现出其合约规模小但是价格比较高的特点。

下面以螺纹钢合约为例:2018年12月12日,螺纹钢指数日K线的最高价、最低价、收盘价分别是3416、3356、3356,20日的ATR值是103.55,合约规模是10吨,故其头寸规模 = (1%乘以1,000,000) /(103.55乘以10)=9.66,四舍五入得10手合约。

从上面两个例子可以推断出,若账号资金不足,头寸规模调整失去精确性,大大降低风险分散化的效果。

3.单位头寸限制

原版海龟策略通过4个层面来限制其成交量。书中说道,这些法则可以控制交易者总体风险水平。无论是在没完没了的亏损时期还是翻天覆地的价格动荡中,这些限制都能把损失最小化。

这四个层面的限制分别如下:

  • 单个市场:头寸上限是4个
  • 高度关联的多个市场:单个方向头寸单位不超过6个
  • 松散关联的多个市场:某一个方向上的头寸单位不超过10个
  • 单个方向:最多12个

这方面的总结可能是经验之谈,实现起来比较困难,因为高度关联市场和松散关联市场判断起来都非常主观,并无统一标准。故只能简单的实现单个市场和单个方向的头寸限制。

4.入场信号

原版海龟策略提供2个版本的入场信号,用的都是唐奇安通道突破策略(唐奇安通道突破在附录A-2中展开,这里不做过多说明。),其区别在于时间周期不同,下面分别介绍这两个版本:

4.1短周期版本

  • 若期货指数价格突破20日最高价/最低价,买入/卖出1个头寸单位。
  • 过滤条件是上一次突破是盈利性突破,则当前入市信号无效(其保障性突破点为在55日通道入市)。
  • 若突破日后价格在反方向移动幅度达 2*ATR,止损离场。
  • 关于过滤条件,该书作者认为若上一次突破点盈利,那么新突破点可能离当前价远,因为有可能是个55日突破点,若上一次突破点亏损,那么新突破点将更加接近当前价格。

4.2 长周期版本

  • 若价格突破55日最高价/最低价,买入/卖出1个头寸单位。
  • 对于长周期版本来说,所有突破都被视为有效信号,无论上一次突破是亏损性还是盈利性的。

海龟们可以自由决定如何在这两个版本之间分配资金,有的海龟只用短周期版本,有的则只用长周期版本,也有的各投50%。

--------------------------------------------------------------------分割线---------------------------------------------------------------------------------

附录A-1 ATR指标

1.1 ATR指标原理

平均真实波动范围(Average true range),简称ATR指标,是由韦尔德(J.Welles Wilder)发明的,ATR指标主要是用来衡量市场波动的强烈度,即为了显示市场变化率的指标。注意,这一指标主要用来衡量价格的波动,并不能直接反映价格走向及其趋势稳定性。

这一指标对于长期持续边幅移动的时段是非常典型的,这一情况通常发生在市场的顶部,或者是在价格巩固期间。根据这个指标来进行预测的原则可以表达为:该指标价值越高,趋势改变的可能性就越高;该指标的价值越低,趋势的移动性就越弱。

当ATR线上升时,意味着资产的波动性在增加。当ATR线下降时,意味着资产的波动性在减少。ATR 不会显示资产移动的方向。

1.2 ATR指标计算

首先应计算出TR(即当天的真实波幅),如图1-1所示,#2,#3为市场出现跳空高开和跳空低开的情况。TR在当日最高价与最低价,当日最高价与昨日最收盘价,当日最低价与昨日收盘价这3种情况中取最大值。

enter image description here
图1-1 计算ATR所考虑的3种情况

由于一天的TR缺乏效率以及代表性,韦尔德用ATR来更好的衡量市场的波动性;一般而言,海龟测试的数据周期是20以及55,这意味著如果投资者在日线图看ATR,20 = 20日。TR的计算公式如图1-2所示。
enter image description here
图1-2 TR计算公式

最后,20日的ATR = (前19日的TR + 当日的TR)/ 20


附录A-2 唐奇安通道

唐奇安通道也被称为价格通道,扬名于70年代,美国有个公司对当时最流行的机械交易系统进行了模拟测试和比较研究,其研究结果表明,在所有测试对象中唐奇安通道规则最为成功。1983年,他被推举为首届“最佳获利奖”得主,并将此奖项改为唐奇安奖。

唐奇安通道通道突破规则非常简单:当价格突破前X天最高价时,做多;价格突破前X天最最低价时,做空。X值默认为20,市场上流行对20这个值解释的佚闻是:唐奇安在开发唐奇安通道的期间,碰巧阅读到整形外科医生马尔兹博士在1960年所作的“心理控制论”(这本书在1989年被重新发现)。马尔兹博士称在整形外科手术过程中,患者最少需要21日来看到自己的新的容颜。而很多观察到的现象都显示了其最起码需要21日来使得新事物代替旧事物。这一事实震惊了唐奇安,21个自然日就等于15个交易日!当绝大多数交易者都在认为趋势可能已经变化时(他们认为看到了市场的新颜),主要趋势却已做好了继续运行的准备。

这篇关于海龟策略深入研究-策略回测系列-2:原版海龟策略(上)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/922771

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

Java基础回顾系列-第三天-Lambda表达式

Java基础回顾系列-第三天-Lambda表达式 Lambda表达式方法引用引用静态方法引用实例化对象的方法引用特定类型的方法引用构造方法 内建函数式接口Function基础接口DoubleToIntFunction 类型转换接口Consumer消费型函数式接口Supplier供给型函数式接口Predicate断言型函数式接口 Stream API 该篇博文需重点了解:内建函数式

Java基础回顾系列-第二天-面向对象编程

面向对象编程 Java类核心开发结构面向对象封装继承多态 抽象类abstract接口interface抽象类与接口的区别深入分析类与对象内存分析 继承extends重写(Override)与重载(Overload)重写(Override)重载(Overload)重写与重载之间的区别总结 this关键字static关键字static变量static方法static代码块 代码块String类特