海龟策略深入研究-策略回测系列-7 海龟策略要素代码解析

量化投资策略——海龟策略 几乎所有的宽客(Quant)都听说过海龟交易策略,该策略以海龟交易法则为核心。海龟交易法则,起源于八十年代的美国,是一套简单有效的交易法则。这个法则以及使用这个法则的人的故事被写成了一本书——《海龟交易法则》,这是一本入门量化投资的经典书籍。 海龟交易的具体规则是: 当今天的收盘价大于过去20个交易日中的最高价时,以收盘价买入; 买入后,当收盘价小于过去10个交易日中的最低价时,以收盘价卖出。 ... 阅读详情

海龟策略7大要素分别是品种选择、头寸规模、单位头寸限制、入场信号、逐步建仓、止损、止盈。由于品种选择无法通过不属于交易策略内容,故只对后面5大要素的进行代码解析。
 

1.头寸规模


头寸规模=(1%账户资金)/(ATR 合约规模),其代码如下

class TurtlePortfolio(object):
......
    #----------------------------------------------------------------------
    def newSignal(self, signal, direction, offset, price, volume):
......
            riskValue = self.portfolioValue * 0.01
            multiplier = riskValue / (signal.atrVolatility * size)
            multiplier = int(round(multiplier, 0))   # multiplier即为头寸规模
            self.multiplierDict[signal.vtSymbol] = multiplier
......
    #----------------------------------------------------------------------
    def sendOrder(self, vtSymbol, direction, offset, price, volume, multiplier):
        """"""
        # 计算合约持仓
        if direction == DIRECTION_LONG:
            self.unitDict[vtSymbol] += volume         # volume即为单位头寸
            self.posDict[vtSymbol] += volume * multiplier
        else:
            self.unitDict[vtSymbol] -= volume
            self.posDict[vtSymbol] -= volume * multiplier  # 实际持仓=单位头寸 * 头寸规模

 
 

2.单位头寸限制


原版海龟策略规定了4个维度的单位头寸限制,分别是

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

基于高度关联市场和松散关联市场判断起来都非常主观,并无统一标准。在客观上的层面只能实现单个市场和单个方向的头寸限制。
在开仓交易前,需要检查上一笔交易是否盈利,若是盈利则直接返回,不进行买卖操作(仅仅适用于短周期版本的入场策略,即profitCheck=True;长周期版本对应的是profitCheck=False)

 

MAX_PRODUCT_POS = 4         # 单品种最大持仓
MAX_DIRECTION_POS = 12      # 单方向最大持仓
......
class TurtlePortfolio(object):
......
    #----------------------------------------------------------------------
    def newSignal(self, signal, direction, offset, price, volume):
......
        # 开仓
        if offset == OFFSET_OPEN:
            # 检查上一次是否为盈利
            if signal.profitCheck:
                pnl = signal.getLastPnl()
                if pnl > 0:
                    return

            # 买入
            if direction == DIRECTION_LONG:
                # 组合持仓不能超过上限
                if self.totalLong >= MAX_DIRECTION_POS:
                    return

                # 单品种持仓不能超过上限
                if self.unitDict[signal.vtSymbol] >= MAX_PRODUCT_POS:
                    return
            # 卖出
            else:
                if self.totalShort <= -MAX_DIRECTION_POS:
                    return

                if self.unitDict[signal.vtSymbol] <= -MAX_PRODUCT_POS:
                    return

 
 

3.入场信号、逐步建仓、止损、止盈


原版海龟策略提供2个版本的入场和止盈信号,分别是长周期版本和短周期版本的唐奇安通道突破。

  • 短周期信号:入场用是20日唐奇安通道,止盈用是10日唐奇安通道,用20日周期计算ATR值,有上一笔盈利当前信号无效的过滤条件。
  • 短周期信号:入场用是55日唐奇安通道,止盈用是20日唐奇安通道,用20日周期计算ATR值,无上一笔盈利当前信号无效的过滤条件。

逐步建仓的规则是每隔0.5*ATR幅度慢慢加满至4个单位头寸,止损也相应根据0.5*ATR的步进移动。
 

class TurtleSignal(object):
    #----------------------------------------------------------------------
    def __init__(self, portfolio, vtSymbol, 
                 entryWindow, exitWindow, atrWindow,
                 profitCheck=False):
......
    #----------------------------------------------------------------------
    def onBar(self, bar):
        self.bar = bar
        self.am.bar
        if not self.am.inited:
            return

        self.generateSignal(bar)
        self.calculateIndicator()       
    #----------------------------------------------------------------------
    def generateSignal(self, bar):
        """        
        判断交易信号
        """
        # 如果指标尚未初始化,则忽略
        if not self.longEntry1:
            return

        # 优先检查平仓
        if self.unit > 0:
            longExit = max(self.longStop, self.exitDown)

            if bar.low <= longExit:
                self.sell(longExit)
                return
        elif self.unit < 0:
            shortExit = min(self.shortStop, self.exitUp)
            if bar.high >= shortExit:
                self.cover(shortExit)
                return

        # 没有仓位或者持有多头仓位的时候,可以做多(加仓)
        if self.unit >= 0:
            trade = False

            if bar.high >= self.longEntry1 and self.unit < 1:
                self.buy(self.longEntry1, 1)
                trade = True

            if bar.high >= self.longEntry2 and self.unit < 2:
                self.buy(self.longEntry2, 1)
                trade = True

            if bar.high >= self.longEntry3 and self.unit < 3:
                self.buy(self.longEntry3, 1)
                trade = True

            if bar.high >= self.longEntry4 and self.unit < 4:
                self.buy(self.longEntry4, 1)
                trade = True

            if trade:
                return

        # 没有仓位或者持有空头仓位的时候,可以做空(加仓)
        if self.unit <= 0:
            if bar.low <= self.shortEntry1 and self.unit > -1:
                self.short(self.shortEntry1, 1)

            if bar.low <= self.shortEntry2 and self.unit > -2:
                self.short(self.shortEntry2, 1)

            if bar.low <= self.shortEntry3 and self.unit > -3:
                self.short(self.shortEntry3, 1)

            if bar.low <= self.shortEntry4 and self.unit > -4:
                self.short(self.shortEntry4, 1)

    #----------------------------------------------------------------------
    def calculateIndicator(self):
        """计算技术指标"""
        self.entryUp, self.entryDown = self.am.donchian(self.entryWindow)
        self.exitUp, self.exitDown = self.am.donchian(self.exitWindow)

        # 有持仓后,ATR波动率和入场位等都不再变化
        if not self.unit:
            self.atrVolatility = self.am.atr(self.atrWindow)

            self.longEntry1 = self.entryUp
            self.longEntry2 = self.entryUp + self.atrVolatility * 0.5
            self.longEntry3 = self.entryUp + self.atrVolatility * 1
            self.longEntry4 = self.entryUp + self.atrVolatility * 1.5
            self.longStop = 0

            self.shortEntry1 = self.entryDown
            self.shortEntry2 = self.entryDown - self.atrVolatility * 0.5
            self.shortEntry3 = self.entryDown - self.atrVolatility * 1
            self.shortEntry4 = self.entryDown - self.atrVolatility * 1.5
            self.shortStop = 0

......
class TurtlePortfolio(object):
......
    #----------------------------------------------------------------------
    def init(self, portfolioValue, vtSymbolList, sizeDict):
        """"""
        self.portfolioValue = portfolioValue
        self.sizeDict = sizeDict

        for vtSymbol in vtSymbolList:
            signal1 = TurtleSignal(self, vtSymbol, 20, 10, 20, True)
            signal2 = TurtleSignal(self, vtSymbol, 55, 20, 20, False)

            l = self.signalDict[vtSymbol]
            l.append(signal1)
            l.append(signal2) 
            self.unitDict[vtSymbol] = 0
            self.posDict[vtSymbol] = 0

    #----------------------------------------------------------------------
    def onBar(self, bar):
        """"""
        for signal in self.signalDict[bar.vtSymbol]:
            signal.onBar(bar)
量化交易核心概念解析:正期望值、夏普比率与海龟策略实战 量化交易是通过数学模型和计算机程序进行投资决策的方法,其核心原理是利用历史数据和统计分析实现系统化交易。从技术价值角度看,量化交易能够排除人为情绪干扰,实现精确的风险控制和纪律化执行。在应用场景上,量化策略广泛应用于股票、期货、外汇等金融市场。正期望值作为量化交易的基础概念,确保策略长期盈利的可能性;夏普比率则衡量风险调整后的收益质量,帮助投资者评估策略绩效。本文通过Python实战案例,深入解析海龟交易策略的实现过程,展示如何结合正期望值和夏普比率构建完整的量化交易框架。 阅读详情

相关推荐

[ ptrade交易实战 ]第二篇 自带交易策略实现

ptrade的交易工具一览!

vv_LCJL319的博客 1999

量化交易核心:正期望值、夏普比率与海龟策略实战解析

量化交易作为金融科技的重要分支,其核心原理建立在数学统计和风险管理基础之上。正期望值是量化策略的数学基础,通过计算胜率与盈亏比确定长期盈利概率;夏普比率则从风险调整角度评估收益质量,帮助投资者识别真正的超额收益。在工程实践中,经典的海龟交易系统展示了完整的趋势跟踪框架,结合严格的仓位管理和风险控制机制。这些概念共同构成了稳健量化体系的技术价值,适用于股票、期货、加密货币等多种交易场景。本文通过Python代码实例,深入解析正期望值计算、夏普比率评估以及海龟策略实现,为构建长期稳定的量化交易系统提供实践指导。

weixin_33670713的博客 351

软件工程导论考试通关秘籍:太原理工大学历年真题解析(附答案)

本文为太原理工大学《软件工程导论》考试提供高效备考指南,通过解析近六年真题,揭示高频考点如软件生命周期、UML建模和结构化设计等核心模块的命题规律。文章提供真题拆解、实战策略和避坑指南,帮助考生掌握图形转换题和简答题的应答技巧,助力考试通关。

weixin_29233333的博客 227

VNPY - CTA策略模块策略回测

作者:魔元 目录 使用回测引擎 读懂回测报告 优化策略参数 多进程优化 量化策略主要是从历史数据统计或者发现规律然后应用于实盘交易。当然历史不是简单的重复,这就要求策略需要根据市场调整和优化参数。通过回测历史数据可以验证策略的有效性,了解策略的历史收益、最大回撤和回撤时长,对策略参数进行优化等等。CTA策略模块的主要回测目标是验证交易信号是否正确,仓位大小的问题在实盘中则由交易员来确定。...

IAlexanderI的专栏 1万+

ADS 使用调整器动态调参教程(Tuning)

ADS动态调参教程

weixin_42845306的博客 1万+

MCU 微控制器,在实际项目中如何选型(以 STM32为例)

1.MCU 选型需要考虑的一些因素 2.案例:传感器设备的 MCU 选型

创享 AIOT 的专栏 1万+

Python量化交易03——海龟策略

Python量化交易实现海龟的策略

weixin_46277779的博客 5251

玩转RecyclerView | 实现子视图叠加 | 3D画廊效果 | 高级动效 | Android 3D坐标系介绍

之前写的一篇文章展示了RecyclerView实现的画廊效果,适用于专辑/图片/列表浏览效果。本篇文章阐述如何基于RecyclerView实现如下图所示的3D画廊效果。以下效果的重点在于实现子视图的图层叠加,滑动过程中的3D旋转效果较为简单。(1)无3D旋转效果图片(1)带3D旋转效果图片。

qq_38237224的博客 8160

python海龟代码大全_海龟交易系统的Python完全版 | RiceQuant米筐量化社区 交易策略论坛...

@zhaoyang-chen 海龟的Python版出炉。为方便对比,这里把java、python两种语言代码同时贴出,回测时间及初始资金均使用页面默认的20140104-20150104,100000.0软妹币。turtle_javapublic class TurtleOriginalStrategy implements IHStrategy {Core talibCore;//定义全局变量s...

weixin_31621945的博客 2799

Android 13.0 framework层系统手势增加上滑手势home事件功能(相当于Home键)

在13.0的定制化开发系统手势功能的时候,客户需求要求在上滑手势的时候,在底部上滑时候进入系统桌面,也就是增加 home键功能,所以就需要分析相关的系统手势上滑事件,然后添加home事件这样 就可以实现这个功能了

安卓兼职framework和app工程师的博客 1133

《Java开发及前端最全面试题-Offer直通车》目录

Java开发是需求最广,工资高的细分领域,同时也是会的人最多,有的公司招1个Java开发,要面试几十甚至上百面试者,同时要求很高,要求通晓技术栈很多及很深深度。如果你正准备面试,想要脱颖而出,那么《Java开发及前端最全面试题-Offer直通车》是你的不二选择。本书汇集了多篇超过1万字的精华内容,无论是Java基础、数据库、SpringBoot和SpringCloud等必问的,还是前端、k8s等容器和虚拟化和大数据各类技术面试,本书都为你提供了最全面的试题和参考答案。

大模型大数据攻城狮的专栏 1180

python量化策略——海龟交易策略(长期)

长期海龟策略 下面的数字表示unit(总资产的1%) 调仓信号: 微上穿+1,中上穿+4,高度上穿满仓 微下穿-1,中下穿-4,高度下穿空仓 #如果发现历史大概率均线策略有效,是否可以以此构造随机均线策略??? #单只股票以时间段T频率 判断是否调仓 T=49表现最好 # coding=utf-8 import math import tushare as ts import pandas as pd import matplotlib import matplotlib.pyplot as plt

m0_46665608的博客 5634

Windows版TASSEL5的下载及安装

TASSEL5是一款用于研究表型和基因型关系的软件,由美国康奈尔大学Buckler实验室所研发。,选择Windows环境安装包下载并安装。1.安装成功后TASSEL5界面。

沉香best的博客 8188

量化交易核心概念:正期望值、夏普比率与海龟策略实战解析

量化交易是通过数学模型和程序化方法实现稳定盈利的金融科技领域。其核心原理基于概率统计和风险管理,通过正期望值确保策略长期盈利的数学基础,即胜率与盈亏比的优化组合。技术价值体现在夏普比率等风险调整后收益指标,帮助投资者衡量单位风险获得的超额回报。应用场景包括趋势跟踪、均值回归等经典策略,其中海龟交易系统通过突破信号和严格风控实现长期稳健收益。本文结合Python代码实战,深入解析正期望值计算、夏普比率优化和海龟策略实现,为量化交易入门提供完整框架。

593

【Microchip】微芯 MPLAB® X IDE开发环境新建项目(点亮1颗LED灯)(常用右键菜单快捷键)

1.新建项目2. 选择芯片型号和调试器3.选择编译器4.项目命名和选择文件路径5.新建成功,给项目添加main.c7.将新建的mainXC16.c文件添加进项目6000000UL这三个就是。

Naiva的博客 454

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Python量化交易:正期望值、夏普比率与海龟策略实战解析

量化交易是通过数学模型和计算机程序执行交易决策的系统化方法,其核心原理在于将投资逻辑转化为可回测的算法规则。从技术价值角度看,量化交易能够有效减少人为情绪干扰,实现风险可控的稳定收益。在金融科技和算法交易的应用场景中,Python因其丰富的数据分析生态成为量化开发的首选工具。正期望值作为策略盈利的数学基础,结合夏普比率这一风险调整收益指标,构成了量化策略评估的核心框架。本文通过海龟交易策略的完整Python实现,深入解析如何构建具备正期望值的交易系统,并利用夏普比率进行科学的绩效评估,为开发者提供从策略设计

weixin_30421809的博客 370

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

量化交易入门:正期望值、夏普比率与海龟策略实战解析

量化交易是通过数学模型和系统化方法实现稳定盈利的投资方式,其核心原理在于构建具有正期望值的交易系统。正期望值是衡量交易系统长期盈利能力的数学基础,结合风险收益比和胜率平衡,确保系统在概率上具备优势。夏普比率作为风险调整后收益的重要指标,帮助投资者评估单位风险带来的回报,是量化策略绩效评估的关键工具。在工程实践中,经典的海龟交易策略通过趋势跟踪、ATR波动率管理和严格止损机制,展现了量化方法在捕捉市场趋势中的应用价值。对于想要系统学习量化交易的新手,理解这些基础概念和实战策略,是构建自动化交易系统、实现稳定收

weixin_33800463的博客 439

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Sequoia回测框架对比:与Backtrader/VectorBT相比的独特优势

> 最后更新:2025-10-05(支持Python 3.9+) --- **实操建议**:首次使用推荐从「均线多头+海龟交易」双策略组合起步,通过调整[config.yaml](https://link.gitcode.com/i/e3559779a52220b4bc6b5442a9d5305a)中`threshold`参数观察结果变化。遇到问题可查阅[README.md](https...

gitblog_00845的博客 971

海龟交易策略:量化经典的趋势跟踪与风险管理实战

趋势跟踪是量化交易中的核心策略思想,旨在捕捉并跟随市场的主要价格方向,而非预测顶部或底部。其原理在于利用价格惯性,通过技术指标识别趋势的启动与持续,并系统性地执行交易。这种策略的技术价值在于将主观交易决策转化为客观、可重复的规则体系,有效克服人性弱点,实现纪律化投资。在应用场景上,它尤其适用于存在明显趋势的期货、外汇及宽基指数ETF等市场。以海龟交易法则为例,它通过唐奇安通道(Donchian Channel)生成突破信号,并结合平均真实波幅(ATR)进行动态风险控制和头寸规模管理,形成了一套完整的趋势跟踪

weixin_30384217的博客 404

量化基本知识与教程

​ B站系列视频为:34.9.2 股市投资第一步-Python基本面量化选股_量化选股–营收因子选_哔哩哔哩_bilibili如果是为了快速学习,已略熟悉python,推荐直接阅读下面内容,比看视频快些~​量化交易核心概念 补充知识Sharpe比:投资的“性价比”。数值越高,说明在承担相同风险的情况下,获得的回报越好CAPM:把“风险”变成一个数字(β),然后算出“为了承担这个风险,至少该赚多少”。简单理解:根据历史数据,大盘涨1%,这家公司股票涨1.5%,那么β就为1.5数据获取数据清洗策略编写策略回测策

qq_42865713的博客 391

量化交易python入门书籍_张杨飞《Python量化交易入门》PDF下载

张杨飞《Python量化交易入门》PDF下载首页 >计算机类字号:小中大评论:0 条评论:0 条Python量化交易入门【作 者】张杨飞【形态项】 402【出版项】 北京:电子工业出版社 , 2019.04【ISBN号】978-7-121-36140-1【中图法分类号】F830.91【原书定价】88.00【主题词】股票交易-应用软件【参考文献格式】 张杨飞. Python量化交易入门. 北京:电子...

weixin_39954487的博客 3248

海龟交易法java代码

海龟交易法是一种股票交易策略,它建立在趋势跟踪的基础上,旨在通过跟踪股票价格的趋势来实现获利。海龟交易法的基本思路是,当股票价格向上突破一定的价格水平时,买入股票;当股票价格向下突破一定的价格水平时,卖出股票。 下面是一个简单的 Java 代码示例,实现了海龟交易法的基本思路: ``` import java.util.ArrayList; import java.util.List; publi...

weixin_42613017的博客 451

PTrade交易程序代码——从零到实盘19

如题,本文将介绍PTrade实盘交易程序的代码。 如何在PTrade中部署策略,可以参见前文中“PTrade部署策略过程”部分内容,然后把本文的代码粘贴到PTrade,就能完成“双神穿多线”策略的部署。 我们将对程序的各个函数依次进行介绍。 初始化函数 def initialize(context): 该函数为PTrade的业务流程框架的必选函数,实现初始化功能,用于初始化一些全局变量。策略启动后,该函数仅会被调用一次。 参数context为Context对象,存放有当前的账户及持仓信息。 .

码农甲的博客 1万+

python海龟交易源码,福利到!用 Python 实现海龟交易系统

前言海龟交易系统本质上是一个趋势跟随的系统,但是最值得我们学习的,是资金管理尤其是分批建仓及动态止损的部分一、趋势捕捉唐奇安通道该指标是有 Richard Donchian 发明的,是有 3 条不同颜色的曲线组成的,该指标用周期(一般都是 20 )内的最高价和最低价来显示市场价格的波动性,当其通道窄时表示市场波动较小,反之通道宽则表示市场波动比较大。 如图所示:该具体分析为:当价格冲冲破上轨是就是...

weixin_39679061的博客 1680
上一篇: 海龟策略深入研究-策略回测系列-6 理解海龟策略代码
下一篇: 海龟策略深入研究-策略回测系列-8 品种选择检验(一)
Trader_Python
博客等级 码龄11年 392粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值