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

第二章:从零构建你的首个量化交易策略

1. 初识量化交易与MindGo平台第一次接触量化交易时我完全被那些专业术语吓到了。什么阿尔法因子、多因子模型、高频策略听起来就像天书一样。直到后来发现MindGo这个平台才真正体会到量化交易也可以很亲民。MindGo是同花顺旗下的量化交易平台最大的特点就是对新手极其友好完全不需要你懂什么高深的数学理论会用Python写几行代码就能玩转。这个平台最吸引我的地方在于它把量化交易的门槛降到了最低。你不需要自己搭建回测系统不用操心数据来源更不用租服务器跑策略。所有基础设施都给你准备好了就像用手机点外卖一样简单。我刚开始用的时候最惊喜的是它的分钟级回测速度——一个包含5年历史数据的策略不到10秒就能跑完这在我之前用过的其他平台简直不敢想象。MindGo的数据质量也相当靠谱。它提供的Level-2行情数据包含了每笔交易的详细记录从2014年至今的数据都很完整。我对比过其他收费数据源发现MindGo的数据准确度完全不输专业机构。而且每天早上8点前就会更新前一天的完整数据对于需要盘前做决策的策略特别有帮助。2. 搭建你的第一个策略环境2.1 注册与基础设置第一次登录MindGo时建议直接用同花顺账号登录这样后期做模拟交易时会方便很多。进入平台后你会看到左侧菜单栏有策略研究、模拟交易、数据中心等选项。作为新手我们直接点击策略研究→新建策略就会进入代码编辑界面。这里有个小技巧点击编辑器右上角的主题按钮可以切换代码高亮风格。我习惯用深色背景的Monokai主题长时间写代码眼睛不容易疲劳。另一个实用功能是API文档按钮点开后会在右侧显示所有可用函数的详细说明写代码时随时查阅特别方便。2.2 理解策略框架MindGo的策略代码结构非常清晰主要包含两个核心函数def initialize(account): # 这里写初始化代码 pass def handle_data(account, data): # 这里写交易逻辑 passinitialize函数就像策略的出生证明只在回测开始时执行一次。我通常在这里设置交易股票池、手续费率、滑点等参数。而handle_data函数则是策略的大脑会根据你设置的频率每天或每分钟重复执行。举个例子假设我们要交易贵州茅台初始化部分可以这样写def initialize(account): # 设置交易标的为贵州茅台 account.security 600519.SH # 设置佣金为万分之三 account.commission 0.0003 # 设置滑点为0.1% account.slippage 0.0013. 实现双均线策略3.1 策略逻辑解析双均线策略是量化交易中最经典的入门策略之一。它的核心思想很简单当短期均线比如5日上穿长期均线比如20日时买入当下穿时卖出。这种策略虽然简单但在趋势明显的行情中表现相当不错。我第一次实现这个策略时犯了个典型错误——直接在handle_data里计算均线没有考虑停牌日的处理。结果回测时发现策略在股票停牌期间还在交易导致结果严重失真。后来学会使用history函数时加上skip_pausedTrue参数才解决了这个问题。3.2 完整代码实现下面是一个经过实战检验的双均线策略完整代码def initialize(account): # 设置交易标的 account.security 600519.SH # 设置佣金和滑点 account.commission 0.0003 account.slippage 0.001 # 设置基准为沪深300 account.benchmark 000300.SH def handle_data(account, data): # 获取过去20天的收盘价跳过停牌日 close history(account.security, [close], 20, 1d, skip_pausedTrue, fqpre, is_panel1) # 计算5日和20日均线 MA5 close.values[-5:].mean() MA20 close.values.mean() # 获取当前持仓价值 current_position account.positions_value # 金叉买入逻辑 if MA5 MA20 and current_position 0: # 用全部可用资金买入 order_value(account.security, account.cash) log.info(f{data.current_dt} 买入 {account.security}) # 死叉卖出逻辑 elif MA5 MA20 and current_position 0: # 卖出全部持仓 order_target(account.security, 0) log.info(f{data.current_dt} 卖出 {account.security})这段代码有几个关键点值得注意使用skip_pausedTrue自动跳过停牌日数据fqpre表示使用前复权价格避免除权除息影响通过current_position判断当前是否持仓避免重复交易使用log.info记录交易日志方便后期分析4. 策略回测与优化4.1 运行回测写完策略代码后点击右上角的回测按钮会弹出参数设置窗口。这里有几个重要参数需要配置回测时间建议至少包含一轮完整的牛熊周期比如2018-2023年初始资金根据实际情况设置一般10万起步频率选择双均线策略选择日线即可基准指数默认为沪深300也可以改为中证500等我第一次回测这个策略时发现它在2019-2020年的白酒牛市中表现惊人年化收益超过50%。但在2021年的震荡市中却频繁交易导致手续费损耗严重。这说明任何策略都有其适应的市场环境。4.2 分析回测结果回测完成后MindGo会提供详细的绩效报告包括收益曲线直观展示策略与基准的对比风险指标年化收益、最大回撤、夏普比率等交易明细每笔交易的日期、价格、数量每日持仓可以查看任意一天的持仓情况以我的双均线策略为例2018-2023年的回测结果显示年化收益率18.7%最大回撤-24.3%胜率58.2%年化波动率22.1%这些数据中最需要关注的是最大回撤。24.3%的回撤意味着如果你投入10万元最坏情况下账户会缩水到7.57万元。你能承受这样的波动吗如果不能就需要调整策略参数。4.3 常见优化方向发现策略存在问题后可以从以下几个方向进行优化参数优化尝试不同的均线组合比如10日/30日、20日/60日过滤条件增加成交量过滤只在放量突破时交易仓位管理改为分批建仓而不是一次性全仓进出止损机制加入固定比例止损控制单笔亏损我优化后的版本加入了成交量过滤代码如下def handle_data(account, data): # 获取收盘价和成交量 his_data history(account.security, [close, volume], 20, 1d, skip_pausedTrue, fqpre, is_panel1) close his_data[close] volume his_data[volume] # 计算均线和均量 MA5 close.values[-5:].mean() MA20 close.values.mean() VOL5 volume.values[-5:].mean() VOL20 volume.values.mean() # 金叉且放量 if MA5 MA20 and VOL5 VOL20 and account.positions_value 0: order_value(account.security, account.cash) # 死叉 elif MA5 MA20 and account.positions_value 0: order_target(account.security, 0)这个改进版策略在震荡市中的虚假信号明显减少年化收益提升到21.4%最大回撤降至19.8%。5. 模拟交易实战5.1 开启模拟交易回测满意后点击开启模拟交易按钮选择股票型账户设置初始资金建议与回测一致。这里有个细节要注意模拟交易的撮合规则和实盘非常接近包括涨跌停板限制、T1交易制度等比回测环境更真实。我第一次跑模拟交易时就遇到了回测中没出现过的问题——策略在开盘集合竞价阶段下单但由于茅台开盘涨停订单完全无法成交。这提醒我需要在代码中加入对涨跌停的判断。5.2 监控与调整模拟交易开始后可以在交易明细中实时查看成交情况。MindGo的手机APP还会推送交易信号非常方便。我习惯每天收盘后做三件事检查当日交易是否符合预期对比策略表现与大盘走势记录策略运行中的问题如果发现策略持续跑输大盘就要考虑暂停调整。MindGo允许你直接修改代码并热更新不需要停止策略。这个功能对于长期运行的策略特别重要。5.3 常见问题排查在模拟交易中我遇到过几个典型问题订单未成交可能是因为设置了限价单但价格偏离市价太远。解决方法是用市价单或更宽松的限价。资金不足A股是T1制度卖出股票的资金次日才能用。代码中要加入可用资金检查。停牌处理虽然代码中跳过了停牌日数据但实际持仓可能包含停牌股票。需要特别处理这类特殊情况。针对这些问题我优化后的订单处理逻辑如下def handle_data(account, data): # 获取股票当前状态 current_price data.current(account.security, price) paused data.current(account.security, paused) high_limit data.current(account.security, high_limit) low_limit data.current(account.security, low_limit) # 如果停牌或涨跌停不交易 if paused or current_price high_limit or current_price low_limit: return # 原有交易逻辑...这段代码会在交易前检查股票状态避免在异常情况下下单。这种细节处理正是回测和实盘最大的区别所在。

相关文章:

第二章:从零构建你的首个量化交易策略

1. 初识量化交易与MindGo平台 第一次接触量化交易时,我完全被那些专业术语吓到了。什么"阿尔法因子"、"多因子模型"、"高频策略",听起来就像天书一样。直到后来发现MindGo这个平台,才真正体会到量化交易也可以…...

告别‘选择困难症’:用Envelope Q-Learning让AI学会在《超级马里奥》里权衡金币与速度

告别‘选择困难症’:用Envelope Q-Learning让AI学会在《超级马里奥》里权衡金币与速度 想象一下,你正在玩《超级马里奥》,面对前方闪闪发光的金币和即将关闭的关卡大门,必须在"快速通关"和"收集财富"之间做出…...

EF Core 拦截器实战:SaveChangesInterceptor、CommandInterceptor 与审计落地衷

一、背景与问题缘起 MySQL 5.6.51 版本下 2000 万行核心业务表开展新增字段操作,需求为新增BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释(因业务实际需要存储大数值关联字段)。 表的核心特性为Java 多线程密集读写,业务请求持续高…...

告别盲调!用逻辑分析仪抓取STM32F429 TIM1的PWM波形,一步步教你分析频率、占空比和死区

从代码到波形:STM32F429 TIM1 PWM硬件验证全流程实战 调试PWM输出时最令人头疼的莫过于代码看似正确,但硬件端却毫无反应——引脚电压纹丝不动,或者波形完全不符合预期。这种"软件配置正确,硬件行为未知"的困境&#xf…...

FPGA JESD204B链路调试实战:从时钟配置到同步状态解析

1. JESD204B接口基础:关键参数解析 第一次接触JESD204B接口时,我被那一堆参数搞得晕头转向。M、N、N、F、K这些字母组合看起来像密码一样,但理解它们对后续调试至关重要。让我用最直白的语言帮你梳理清楚。 M代表转换器数量,这个最…...

告别虚拟机!在Windows 11上零配置搭建Masm汇编实验环境(附保姆级图文教程)

在Windows 11上零配置搭建Masm汇编实验环境的完整指南 对于计算机专业的学生和汇编语言初学者来说,搭建一个可用的实验环境往往是第一道门槛。传统方法要么需要配置复杂的虚拟机,要么依赖过时的DOS模拟器,这些方案不仅占用系统资源&#xff0…...

深入解析MIPI RFFE接口:从寄存器操作到实战技巧

1. MIPI RFFE接口基础入门 第一次接触MIPI RFFE接口时,我也被它简单的两根线设计给"骗"了。表面上看就是个普通的串行接口,但实际开发中遇到的坑可不少。RFFE全称RF Front-End Control Interface,是MIPI联盟专门为射频前端模块设计…...

基于STM32LXXX的数字电位器(MAX5402EUA+T)驱动应用程序设计

一、简介: MAX5402EUA+T 是Maxim Integrated(现Analog Devices)推出的一款256抽头、低漂移数字电位器,采用MAX-8封装。 二、主要技术特性: 参数 值 抽头数 256个 端到端电阻 10kΩ 每级步进电阻 39.2Ω (10kΩ/255) 接口类型 SPI兼容,3线串行 电源电压 2.7V ~ 5.5V 温度…...

在昇腾Atlas 800I A2上,用vLLM-Ascend 0.9.1-dev部署Qwen2.5-7B的保姆级避坑指南

昇腾Atlas 800I A2实战:vLLM-Ascend部署Qwen2.5-7B的深度避坑手册 当你在Atlas 800I A2服务器上首次尝试用vLLM-Ascend部署Qwen2.5-7B模型时,可能会遇到各种官方文档未曾提及的"暗礁"。本文将从实战角度,拆解那些让开发者夜不能寐的…...

基于STM32LXXX的数字电位器(MCP4661-103E/ST)驱动应用程序设计

一、简介: MCP4661-103E/ST 是 Microchip 推出的双通道、8位(256抽头)数字电位器,采用 I2C 接口,阻值为10kΩ,内置 EEPROM 可掉电保存配置。 二、主要技术特性: 参数 值 通道数 2 (双通道) 电阻值 10 kΩ 抽头数 257 (8位分辨率,256步进) 接口类型 IC,标准模式100kHz…...

抖音无水印下载器终极指南:免费批量保存视频、图集与直播回放

抖音无水印下载器终极指南:免费批量保存视频、图集与直播回放 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallbac…...

LLM的“小bug”:聊聊幻觉是什么,以及如何有效规避免

不管是日常使用ChatGPT、文心一言,还是接触各类开源LLM,你大概率都遇到过这样的情况:模型一本正经地给你讲一个知识点、报一组数据、提一个引用,说得头头是道、逻辑通顺,可你事后查证才发现,这些内容全是假…...

如何用TranslucentTB打造终极Windows透明任务栏:新手完整指南

如何用TranslucentTB打造终极Windows透明任务栏:新手完整指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否厌倦了Wi…...

告别模拟器!手把手教你将Flutter App部署到树莓派4B(ARM64 Linux实战)

告别模拟器!手把手教你将Flutter App部署到树莓派4B(ARM64 Linux实战) 在物联网和边缘计算蓬勃发展的今天,开发者越来越需要将现代UI框架的能力延伸到资源受限的嵌入式设备。树莓派4B作为一款性价比极高的ARM64开发板,…...

番茄小说下载器:打造你的个人离线图书馆,随时随地畅享阅读

番茄小说下载器:打造你的个人离线图书馆,随时随地畅享阅读 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否曾因网络信号不佳而错过精彩的小说章节…...

英语地点介词(in/on/at)的使用

一、核心原则介词核心逻辑就像……at一个具体的坐标点地图上的图钉 📍on一个表面/平面/线贴在墙上的一张纸 📄in一个有边界的立体空间装在盒子里的玩具 📦记忆口诀: at 是点,on 是面,in 是空间里面。二、具…...

ESP-Meshed:面向ESP32/ESP8266的轻量级分布式应用框架

1. ESP-Meshed 框架深度解析:面向 ESP32/ESP8266 的轻量级分布式应用构建框架1.1 框架定位与工程价值ESP-Meshed 并非 Espressif 官方 ESP-MESH 协议栈的替代品,而是一个面向嵌入式应用层的轻量级分布式框架。其核心设计哲学是:在不侵入底层网…...

别再只调参了!深入理解PCL网格化:从Delaunay三角剖分到法线一致性的底层原理

深入解析PCL网格化:从Delaunay三角剖分到法线一致性的工程实践 在三维重建领域,点云网格化是将离散采样点转化为连续表面的关键技术。许多开发者虽然能够调用PCL库完成基础网格生成,但当面对setNormalConsistency、setMaximumSurfaceAngle等参…...

Figma中文界面革新:突破语言壁垒的全攻略

Figma中文界面革新:突破语言壁垒的全攻略 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN Figma作为主流设计工具,其英文界面长期困扰中文用户。FigmaCN插件通过设…...

AI时代,网络安全为何是人类最后壁垒?网安专业究竟有多重要?

网络安全专业:AI时代唯一被AI“反向增强”的人类堡垒 核心论断:网络安全不是AI的替代对象,而是AI的校准器、约束阀与免疫系统。当AI在其他领域扮演“执行者”,它在网络空间中必须是“被监管者”——而监管它的,只能是具…...

联合注入及布尔型盲注基础流程(手注sqli-labs-master)

SQL 注入的核心原理:一句话概括 攻击者通过在输入框或 URL 参数中,输入恶意的 SQL 代码,让数据库“误以为”这是正常的指令并执行,从而泄露数据。 联合注入(UNION-based Injection) 联合注入是 SQL 注入中最常见、也最容易理解…...

亚马逊,TEMU平台针对电动泵美国站的UL778标准

‌UL778是电动泵的安全标准‌,主要用于规范在日常使用场景下的潜水或非潜水电泵的安全性能,确保产品在北美市场的准入合规 。一、适用产品范围以下类型的电泵通常适用于UL778标准:‌潜水泵‌:电机可完全浸入水中运行的泵。‌非潜水…...

深入解析POODLE漏洞:SSL3.0的CBC模式安全隐患与防御策略

1. POODLE漏洞的前世今生 第一次听说POODLE漏洞时,我还以为是什么可爱的狗狗品种。后来才发现,这个听起来萌萌的名字背后,隐藏着一个足以让整个互联网颤抖的安全威胁。POODLE全称Padding Oracle On Downgraded Legacy Encryption,…...

YOLO+SAM微调做工业缺陷分割:年省28万的实战案例

YOLOSAM微调做工业缺陷分割:年省28万的实战案例一、问题 PCB质检标注员手动勾勒缺陷边界8分钟/张。YOLO框不准,SAM水土不服。 二、方案 LoRA微调SAM:只改2%参数,速度3倍,显存降到8GB。 DiceFocal损失:边界贴…...

从体素到三维模型:解析Volumetric Method在复杂场景重建中的核心算法

1. 什么是Volumetric Method?从体素到三维世界的魔法 第一次接触三维重建时,我被那些从照片变成立体模型的演示惊呆了。后来才知道,这背后藏着一种叫Volumetric Method的技术,它就像用乐高积木搭建世界——把空间切成无数小方块&a…...

AI 编程盛行的时代,为什么 “『DC- WFW』” 仍然具有必要性?了

这&#xff0c;是一个采用C精灵库编写的程序&#xff0c;它画了一幅漂亮的图形&#xff1a; 复制代码 #include "sprites.h" //包含C精灵库 Sprite turtle; //建立角色叫turtle void draw(int d){for(int i0;i<5;i)turtle.fd(d).left(72); } int main(){ …...

YOLO+SAM工业缺陷检测:从理论到落地的完整方案

YOLOSAM工业缺陷检测&#xff1a;从理论到落地的完整方案一、痛点 PCB质检中&#xff0c;人工标注缺陷边界8分钟/张。YOLO框不准&#xff0c;SAM对工业缺陷水土不服。 二、解决方案 LoRA微调SAM&#xff1a;只改2%参数&#xff0c;速度3倍提升&#xff0c;显存24GB→8GB。 Dice…...

银河麒麟V10 SP1安全基线配置踩坑记:为什么pam_wheel.so的group=wheel参数不生效?

银河麒麟V10 SP1安全基线配置实战&#xff1a;pam_wheel.so参数差异深度解析 第一次在银河麒麟V10 SP1服务器上配置安全基线时&#xff0c;我遇到了一个令人费解的问题。按照行业标准做法&#xff0c;我在/etc/pam.d/su文件中添加了auth required pam_wheel.so groupwheel配置&…...

EnCase vs FTK vs 取证大师:三大取证工具实战横评与选型指南(2024版)

EnCase vs FTK vs 取证大师&#xff1a;2024年电子取证工具深度横评与实战选型指南 当一起涉及企业数据泄露的案件摆在面前时&#xff0c;取证专家小李面对着三台装载不同软件的设备犹豫不决——EnCase的专业深度、FTK的全面覆盖&#xff0c;还是取证大师的本土化优势&#xf…...

轴向磁通电机仿真避坑指南:ANSYS Maxwell 3D建模时气隙与对称性的7个关键设置

轴向磁通电机3D仿真进阶指南&#xff1a;从参数校准到高效求解的实战技巧 轴向磁通电机因其紧凑结构和高效能特性&#xff0c;正在新能源车、航空航天等领域获得广泛应用。但不同于传统径向电机&#xff0c;其三维电磁场分布的复杂性使得仿真过程常成为工程师的"噩梦"…...