当前位置: 首页 > article >正文

手把手教你用Python复刻‘双紫擒龙’量化指标(附完整源码与回测)

手把手教你用Python复刻‘双紫擒龙’量化指标附完整源码与回测在量化交易领域技术指标的神秘面纱常常让初学者望而却步。今天我们将用Python彻底拆解这个名为双紫擒龙的指标从数据获取到可视化回测完整呈现一个量化策略的开发闭环。不同于直接展示晦涩的公式我们会用可运行的代码和直观的图表让你真正理解这个指标的计算逻辑和实际效果。1. 环境准备与数据获取在开始之前确保你的Python环境已经安装以下必要库pip install pandas numpy matplotlib yfinance ta-lib注意TA-Lib的安装可能需要额外步骤。Windows用户可以直接下载预编译版本Mac用户可通过brew安装。我们将使用yfinance获取历史数据。这里以苹果公司(AAPL)的日线数据为例import yfinance as yf def fetch_data(ticker, start_date, end_date): data yf.download(ticker, startstart_date, endend_date) return data[[Open, High, Low, Close]] # 获取2020-2023年AAPL数据 aapl_data fetch_data(AAPL, 2020-01-01, 2023-12-31)2. 指标核心逻辑解析原始公式虽然复杂但可以分解为几个关键组成部分趋势线计算基于25日均线的变形支撑/压力系统使用EMA和双重MA构建信号触发条件结合价格突破与动量指标让我们用Python逐步实现这些组件2.1 趋势线计算def calculate_trend(data, window25): # 计算双重移动平均 ma_h data[High].rolling(window).mean() ma_l data[Low].rolling(window).mean() # 趋势线公式 trend ma_l.rolling(window).mean() - (ma_h.rolling(window).mean() - ma_l.rolling(window).mean()) return trend2.2 支撑与压力系统def calculate_support_resistance(data): # 支撑线20日价格中值的EMA support ((data[Open] data[Close])/2).ewm(span20).mean() # 压力线双重MA计算 ma_h_25 data[High].rolling(25).mean() resistance (ma_h_25.rolling(25).mean() - ma_l_25.rolling(25).mean()) ma_h_25.rolling(25).mean() return support, resistance3. 完整指标实现现在我们将所有组件整合成一个完整的指标类class DoubleDragonIndicator: def __init__(self, data): self.data data.copy() def calculate_all(self): # 计算趋势线 self.data[trend] calculate_trend(self.data) # 计算支撑压力 self.data[support], self.data[resistance] calculate_support_resistance(self.data) # 计算动量信号 self._calculate_momentum() # 生成交易信号 self._generate_signals() return self.data def _calculate_momentum(self): # 动量计算逻辑 price_diff self.data[Close].diff() abs_diff price_diff.abs() self.data[momentum] 100 * price_diff.rolling(6).mean().rolling(6).mean() / \ abs_diff.rolling(6).mean().rolling(6).mean() def _generate_signals(self): # 生成买入信号 self.data[buy_signal] ( (self.data[momentum].rolling(2).min() self.data[momentum].rolling(7).min()) (self.data[momentum].rolling(2).apply(lambda x: (x 0).sum()) 1) (self.data[momentum] self.data[momentum].rolling(2).mean()) ) # 生成突破信号 self.data[breakout] ( (self.data[Close].shift(1) self.data[resistance].shift(1)) (self.data[Close] self.data[resistance]) (self.data[Close]/self.data[Close].shift(1) 1.04) )4. 可视化与回测4.1 指标可视化让我们创建一个直观的图表展示指标效果import matplotlib.pyplot as plt def plot_indicator(data): plt.figure(figsize(15,8)) # 绘制价格 plt.plot(data.index, data[Close], labelPrice, colorblack, alpha0.5) # 绘制趋势线 plt.plot(data.index, data[trend], labelTrend, colorred, linewidth2) # 绘制支撑压力 plt.plot(data.index, data[support], --, labelSupport, colorcyan) plt.plot(data.index, data[resistance], --, labelResistance, coloryellow) # 标记信号 buy_signals data[data[buy_signal]] plt.scatter(buy_signals.index, buy_signals[Low]*0.98, marker^, colorgreen, labelBuy Signal) breakout_signals data[data[breakout]] plt.scatter(breakout_signals.index, breakout_signals[High]*1.02, markerv, colormagenta, labelBreakout) plt.legend() plt.title(Double Dragon Indicator) plt.show()4.2 简单回测框架让我们实现一个基本的回测逻辑def backtest(data, initial_capital10000): position 0 capital initial_capital portfolio [] for i in range(len(data)): # 买入逻辑 if data[buy_signal].iloc[i] and position 0: position capital / data[Close].iloc[i] capital 0 # 卖出逻辑 elif data[breakout].iloc[i] and position 0: capital position * data[Close].iloc[i] position 0 # 记录每日净值 if position 0: portfolio.append(position * data[Close].iloc[i]) else: portfolio.append(capital) return portfolio5. 策略优化与改进建议基础实现虽然完整但仍有改进空间参数优化尝试不同的移动平均窗口如20/50/100测试不同的动量计算周期风险控制加入止损机制设置仓位管理规则信号过滤结合成交量过滤假突破添加波动率指标确认信号强度优化后的动量计算示例def enhanced_momentum(data, short_window6, long_window12): price_diff data[Close].diff() abs_diff price_diff.abs() # 双重平滑 short_ma price_diff.rolling(short_window).mean().rolling(short_window).mean() long_ma abs_diff.rolling(long_window).mean().rolling(long_window).mean() return 100 * short_ma / long_ma6. 实际应用中的注意事项在实盘使用这个指标时有几个关键点需要牢记市场环境适应性趋势指标在单边市中表现良好但在震荡市中可能产生过多假信号数据质量确保使用的历史数据已经过复权处理特别是对于股票数据交易成本回测时要考虑手续费、滑点等实际交易成本一个更稳健的信号生成方法def robust_signal_generation(data): # 要求连续两天确认信号 data[confirmed_buy] data[buy_signal].rolling(2).sum() 2 # 突破信号需要成交量配合 data[volume_ma] data[Volume].rolling(20).mean() data[confirmed_breakout] data[breakout] (data[Volume] data[volume_ma]) return data完整代码已经展示了如何从零构建这个指标系统。在实际操作中建议先用模拟账户测试一段时间确认策略表现符合预期后再考虑实盘应用。

相关文章:

手把手教你用Python复刻‘双紫擒龙’量化指标(附完整源码与回测)

手把手教你用Python复刻‘双紫擒龙’量化指标(附完整源码与回测) 在量化交易领域,技术指标的神秘面纱常常让初学者望而却步。今天,我们将用Python彻底拆解这个名为"双紫擒龙"的指标,从数据获取到可视化回测&…...

RNA-seq数据归一化实战:DESeq2 median of ratios方法详解与避坑指南

RNA-seq数据归一化实战:DESeq2 median of ratios方法详解与避坑指南 当你第一次看到RNA-seq数据时,可能会被那些庞大的数字矩阵吓到。每个数字代表着一个基因在特定样本中的表达量,但这些数字真的可以直接比较吗?答案是否定的。就…...

OpenClaw学习助手:千问3.5-9B自动整理学习笔记教程

OpenClaw学习助手:千问3.5-9B自动整理学习笔记教程 1. 为什么需要AI学习助手? 去年备考专业认证时,我每天需要处理上百页PDF资料。手动整理重点不仅耗时,还经常遗漏关键信息。直到发现OpenClaw千问3.5-9B的组合,才真…...

Windows下OpenClaw安装指南:对接Qwen3-14b_int4_awq模型

Windows下OpenClaw安装指南:对接Qwen3-14b_int4_awq模型 1. 为什么选择OpenClawQwen3组合? 上周我在尝试自动化处理日报周报时,发现常规RPA工具对自然语言理解能力有限。直到同事推荐了OpenClaw这个开源AI智能体框架——它不仅能像人类一样…...

同事在字节干了 6 年,攒了不少钱但身体垮了。体检查出一堆毛病,医生说得休息。请了一个月假,以前觉得赚钱重要,现在觉得活着重要!

最近刷到一个扎心帖子:贴主的前同事在字节干了 6 年,攒下了不少钱,却也熬垮了身体。一次体检查出一堆问题,医生直接下了“必须休息”的最后通牒。他请了一个月长假,在医院躺了几天后彻底想通了:以前觉得赚钱…...

别再只调sklearn了!手把手教你从零用NumPy实现逻辑回归(附完整代码与可视化)

从零构建逻辑回归:用NumPy揭开机器学习算法的数学面纱 在机器学习领域,逻辑回归作为分类任务的基石算法,其重要性不言而喻。但当我们习惯于调用sklearn的几行代码完成训练时,是否曾思考过这个经典算法背后的数学本质?本…...

“同事被炼化”引热议!有人觉得恐怖,有人觉得为时尚早,有人要给 AI 喂屎反击…

4 月 3 日,「同事被炼化了」冲上微博热搜。所谓“炼化”并非玄幻情节,而是 AI 克隆员工现象,引发不少职场人共鸣与恐慌。起因是 GitHub 上一个叫 colleague-skill 的开源项目火了:上传同事的聊天记录、工作文档、代码邮件&#xf…...

Stable Yogi Leather-Dress-Collection行业方案:ACG展会皮衣COS角色快速出图服务

Stable Yogi Leather-Dress-Collection行业方案:ACG展会皮衣COS角色快速出图服务 想象一下,你是一名动漫展会的服装供应商,或者是一个COS社团的负责人。下个月的大型展会就在眼前,你们计划推出一个全新的“赛博朋克机车少女”系列…...

杰理之中控耳机支持通话中进行BLE广播的修改【篇】

修改ESCO和BLE广播的调度策略...

网站推广seo优化公司如何提高网站转化率

网站推广seo优化公司如何提高网站转化率 在当今数字化时代,网站的转化率直接关系到一个企业的成功与否。高转化率意味着更多的访客将成为潜在客户,进而成为实际的客户。对于网站推广seo优化公司而言,如何有效提高网站转化率是其核心业务之一…...

网站社交媒体推广对SEO有什么作用_图片和视频如何优化以提高搜索引擎收录

网站社交媒体推广对SEO有什么作用 在当前数字化时代,网站的SEO(搜索引擎优化)已经成为任何希望提升在线存在感的企业和个人的首要任务。SEO并不仅仅是关于在网站上优化文本内容。如今,社交媒体推广也在这一过程中发挥着越来越重要…...

OpenClaw钉钉机器人集成:Qwen3-14b_int4_awq任务触发与结果反馈

OpenClaw钉钉机器人集成:Qwen3-14b_int4_awq任务触发与结果反馈 1. 为什么选择钉钉机器人作为OpenClaw的交互入口 去年我在团队内部推广自动化工具时,发现最大的阻力不是技术实现,而是使用门槛。当我把一个需要命令行操作的脚本交给产品经理…...

嵌入式系统架构设计与LOP应用实践

1. 嵌入式系统软件架构设计进阶解析在嵌入式系统开发领域,软件架构设计往往决定了项目的成败。作为一名从业十余年的嵌入式系统工程师,我深刻体会到良好的架构设计不仅能提升开发效率,更能显著降低后期维护成本。本文将基于实际项目经验&…...

OpenClaw文件处理实战:Qwen3-14b_int4_awq自动整理桌面文档

OpenClaw文件处理实战:Qwen3-14b_int4_awq自动整理桌面文档 1. 为什么需要自动化文件整理 作为一个长期与各种文档打交道的技术写作者,我的桌面经常在项目周期结束时变成"文档灾难现场"。上周刚经历了一次典型场景:在完成三个技术…...

5个OpenClaw实用技巧:千问3.5-9B高效使用秘籍

5个OpenClaw实用技巧:千问3.5-9B高效使用秘籍 1. 为什么需要优化OpenClaw与千问3.5-9B的配合效率 第一次用OpenClaw对接千问3.5-9B模型时,我遇到了典型的"高成本低效率"问题。一个简单的文件整理任务,模型反复询问操作细节&#…...

OpenClaw镜像体验指南:千问3.5-35B-A3B-FP8云端沙盒快速验证

OpenClaw镜像体验指南:千问3.5-35B-A3B-FP8云端沙盒快速验证 1. 为什么选择云端沙盒验证OpenClaw 去年冬天,当我第一次尝试在本地部署OpenClaw时,整整两天时间都耗在了环境依赖和权限问题上。Node.js版本冲突、Python虚拟环境报错、CUDA驱动…...

WeKnora参数详解:temperature=0.1+top_k=20+context_window优化策略

WeKnora参数详解:temperature0.1top_k20context_window优化策略 1. 项目简介与核心价值 WeKnora是一个基于Ollama框架构建的知识库问答系统,它的核心功能是让用户能够将任意文本作为"即时知识库",然后针对这段文本提出具体问题&a…...

新手避坑指南:如何用MATLAB快速实现EMD/VMD信号分解(含模态分量质量对比)

MATLAB信号分解实战:EMD与VMD算法从入门到调优 信号分解技术作为非平稳信号分析的核心工具,在生物医学、机械故障诊断等领域具有不可替代的价值。本文将带您从零开始掌握MATLAB平台上两种主流算法——经验模态分解(EMD)与变分模态分解(VMD)的完整实现流程…...

FFmpeg 新手必学:5个实用命令搞定视频转码、剪辑与音频提取

FFmpeg 新手必学:5个实用命令搞定视频转码、剪辑与音频提取 第一次接触FFmpeg时,我被这个开源工具的强大功能震撼到了——它几乎能处理所有常见的多媒体格式转换和编辑需求,而且完全免费。作为一款跨平台的命令行工具,FFmpeg在专业…...

lift off工艺中电子束蒸发镀膜的优势与磁控溅射的局限性对比

1. 电子束蒸发与磁控溅射的基本原理对比 在半导体制造领域,lift off工艺是一种常用的图形化金属层制备方法。简单来说,就是先在晶圆表面涂覆光刻胶并曝光显影形成图案,然后沉积金属薄膜,最后通过化学溶剂剥离光刻胶及附着在其上的…...

从零到一:用Electron Builder打造你的首个Windows桌面应用

1. 为什么选择Electron Builder开发Windows应用 如果你是一名前端开发者,想要快速开发一个Windows桌面应用,Electron绝对是你的首选方案。我刚开始接触桌面开发时,尝试过各种技术栈,最终发现Electron是最容易上手的。它最大的优势…...

避坑指南:Pixhawk飞控在F450上校准调试时,90%新手会遇到的5个问题及解决办法

Pixhawk飞控F450装机避坑手册:从校准异常到模式切换的实战解决方案 第一次组装F450机架搭配Pixhawk飞控的体验,就像在玩一场没有存档功能的硬核游戏——每个环节都可能突然跳出"Game Over"提示。上周帮朋友调试一台总在罗盘校准阶段卡死的无人…...

从EMIF到AXI:详解DSP与FPGA通信接口的演进与选型策略

从EMIF到AXI:异构计算平台接口技术演进与工程决策指南 在异构计算架构设计中,DSP与FPGA的高效数据交互始终是系统性能的关键瓶颈。十年前,工程师们还在为EMIF接口的布线优化绞尽脑汁;如今,AXI总线已成为新一代SoC的标配…...

OpenClaw权限控制实战:千问3.5-35B-A3B-FP8敏感操作保护方案

OpenClaw权限控制实战:千问3.5-35B-A3B-FP8敏感操作保护方案 1. 为什么需要权限控制? 上周我在调试OpenClaw自动化脚本时,差点酿成一场"灾难"。当时想让AI助手帮我整理下载文件夹,结果一条模糊指令导致模型误删了三个…...

OpenClaw语音交互扩展:Qwen3-14b_int4_awq对接Whisper实现语音指令

OpenClaw语音交互扩展:Qwen3-14b_int4_awq对接Whisper实现语音指令 1. 为什么需要语音交互能力 作为一个长期依赖键盘输入的开发者,我最初对语音交互持怀疑态度——直到上个月连续加班导致手腕腱鞘炎发作。当连敲空格键都变成折磨时,才意识…...

PP-DocLayoutV3实操手册:批量分析日志统计(平均耗时/类别召回率/置信分布)

PP-DocLayoutV3实操手册:批量分析日志统计(平均耗时/类别召回率/置信分布) 1. 引言:从单张测试到批量分析 如果你已经用上了PP-DocLayoutV3的Web界面,上传几张图片,看着它把文档里的标题、文本、表格一个…...

OpenClaw飞书机器人配置:基于Phi-3-mini-128k-instruct的智能对话

OpenClaw飞书机器人配置:基于Phi-3-mini-128k-instruct的智能对话 1. 为什么选择OpenClaw飞书Phi-3的组合? 去年我负责一个小型远程团队的文档协作项目,每天要处理几十个飞书群消息和文档修改请求。当我在GitHub偶然发现OpenClaw时&#xf…...

Gemma 4推理增强版:专注数学与代码的QLoRA适配器

Gemma 4推理增强版:专注数学与代码的QLoRA适配器 【免费下载链接】gemma4-31b-Opus-4.6-reasoning 项目地址: https://ai.gitcode.com/hf_mirrors/kai-os/gemma4-31b-Opus-4.6-reasoning 导语:Google Gemma 4系列再添新成员,专注数学…...

I.MX6ULL GPIO配置避坑指南:HYS、PUS、DSE这些寄存器位到底怎么设?

I.MX6ULL GPIO配置实战手册:寄存器位场景化解析与避坑策略 如果你正在使用I.MX6ULL开发嵌入式系统,GPIO配置可能是你遇到的第一个"拦路虎"。与常见的STM32不同,I.MX6ULL的GPIO配置寄存器充满了各种缩写——HYS、PUS、PUE、PKE、ODE…...

【MPU6050】从数据融合到姿态解算:互补滤波实战指南

1. MPU6050传感器基础与姿态解算挑战 第一次接触MPU6050时,我被这个小巧的6轴传感器惊艳到了——它集成了三轴加速度计和三轴陀螺仪,尺寸比指甲盖还小。但真正用它做姿态解算时,问题接踵而至:加速度计输出的数据在动态情况下抖动严…...