尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
gs-quant 价差均值回归策略实战:从安装、写信号到回测解读
gs-quant 价差均值回归策略实战从安装、写信号到回测解读【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant发现10年期与2年期利率互换的价差连续两周被拉高直觉上它会缩回来——但何时进场、何时离场靠感觉总不准。用 gs-quant 的均值回归触发器和回测引擎你可以把偏离均值2个标准差就交易写成规则几分钟跑完一年回测拿到净值曲线和夏普比率。快速上手安装 gs-quant 并完成会话认证先让环境可用后面所有代码都依赖这两步。安装只需一行pip install gs-quant --upgrade认证用你向 Marquee 开发者平台申请到的 client_id 与 client_secret写入会话即可不需要额外配置文件from gs_quant.session import GsSession # 换成你申请到的凭据需要哪些数据权限由 scopes 参数决定 GsSession.use(client_idyour-client-id, client_secretyour-client-secret)会话初始化逻辑位于 gs_quant/session.py。策略机制价差均值回归到底在判断什么一句话公式Z (当前价差 − 近30日均值) / 近30日标准差Z 超过 2 做空价差低于 −2 做多价差价差回到均值就平仓。这和商品期货的跨期套利是同一类思路只是把标的换成了利率互换的期限价差。打个比方价差像一根橡皮筋均值是它的自然长度。正常抖动你不管一旦被拉出去超过 2 个常见波动幅度标准差你就赌它回弹。三个术语先说清楚价差两个相关价格之差本文取 10 年期减 2 年期互换利率衡量长端相对短端贵不贵均值回归序列围绕某个中心波动、偏离久了有拉回倾向的统计特性Z分数当前值偏离均值几个标准差是偏离有多夸张的统一量尺本策略入场阈值取 ±2。整个策略每个交易日只回答一个问题今天的价差越界了吗这套逻辑 gs-quant 已内置为MeanReversionTrigger你不用自己写状态机它每天自动算滚动均值、标准差和 Z 分数越界时按方向下单价差回归均值时自动平仓。触发语义实现位于 gs_quant/backtests/triggers.py。分步实现取数据、算信号、定规则、跑回测下面是一个标准的 python 量化回测流程四小节按依赖顺序排列。拉取利率数据并构造价差序列这段代码从 SWAPRATES_STANDARD 数据集取一段区间的利率用 tenor 列筛出两条期限后相减得到价差序列。from datetime import date from gs_quant.data import Dataset start_date date(2023, 1, 1) end_date date.today() ds Dataset(SWAPRATES_STANDARD) # assetId 换成你有权限的资产下面用的是官方示例里的那一个 df ds.get_data(start_date, end_date, assetId[MA5WM2QWRVMYKDK0]) # 10y 减 2y两条曲线同一日期索引直接相减得到价差 spread df[df[tenor] 10y][rate] - df[df[tenor] 2y][rate]数据访问入口位于 gs_quant/data/dataset.py。用 Z 分数刻画偏离程度这段代码把价差相对滚动均值的偏离换算成 Z 分数先看见信号长什么样再交给触发器执行。# pandas 滚动窗口即可30 日均值与 30 日标准差 rolling_mean spread.rolling(30).mean() rolling_std spread.rolling(30).std() z_scores (spread - rolling_mean) / rolling_std z_scores.plot(figsize(10, 4), title10y-2y spread Z-score)提示触发器在回测内部会以完全相同的口径重算滚动均值、标准差和 Z 分数见 triggers.py 中has_triggered方法这里只是预览不算重复劳动。定义交易规则与入场动作这段代码定义三件事交易什么10 年期 EUR 利率互换、何时进场Z 分数越界 ±2、进场做什么按方向加仓。from gs_quant.common import Currency, PayReceive from gs_quant.instrument import IRSwap from gs_quant.backtests.actions import AddTradeAction from gs_quant.backtests.data_sources import GenericDataSource, MissingDataStrategy from gs_quant.backtests.triggers import MeanReversionTrigger, MeanReversionTriggerRequirements # 策略标的10 年期、付固定收浮动的 EUR 利率互换 swap IRSwap( pay_or_receivePayReceive.Pay, termination_date10y, notional_currencyCurrency.EUR, notional_amount1e4, fixed_rateATM, nameswap_10y, ) # 把价差序列喂给触发器缺失值用前值填充 data_source GenericDataSource(spread, MissingDataStrategy.fill_forward) # 越界阈值 ±2滚动窗口 30 日多空方向由触发器自动判断 trig_req MeanReversionTriggerRequirements( data_sourcedata_source, z_score_bound2, rolling_mean_window30, rolling_std_window30, ) trigger MeanReversionTrigger(trig_req, AddTradeAction(swap))进场与平仓的判定逻辑写在MeanReversionTriggerRequirements.has_triggered中交易动作与仓位命名位于 gs_quant/backtests/actions.py。运行回测并导出结果这段代码把触发器装进策略用通用引擎按每个交易日检查一次的频率跑完全程并打印成交台账与逐日结果。from gs_quant.backtests.strategy import Strategy from gs_quant.backtests.generic_engine import GenericEngine strategy Strategy(None, trigger) # 初始空仓 engine GenericEngine() backtest engine.run_backtest( strategy, startstart_date, endend_date, frequency1b, show_progressTrue # 1b 每个交易日一个状态点 ) backtest.trade_ledger() # 每笔成交日期、方向、数量 backtest.result_summary # 逐日汇总盯市价值、累计现金等策略对象定义在 gs_quant/backtests/strategy.py逐日推进的引擎实现在 gs_quant/backtests/generic_engine.py。结果解读净值曲线和三个关键指标怎么看 回测跑完先画净值曲线再读指标。净值 盯市价值 累计现金两者都在result_summary里。import pandas as pd from gs_quant.risk import Price from gs_quant.timeseries.econometrics import sharpe_ratio, max_drawdown # 净值曲线横轴是日期纵轴是账户总价值 nav backtest.result_summary[Price] backtest.result_summary[Cumulative Cash] nav.plot(figsize(10, 6), titlePortfolio value)曲线怎么读关注锯齿的宽度和台阶的位置——锯齿宽说明单笔波动大台阶出现在 Z 分数触发平仓的附近才符合策略预期一条几乎直线上升的曲线反而要警惕说明回测假设可能过于理想。三个指标各回答一个问题指标回答什么怎么读年化收益一年平均赚多少与同期无风险利率比较溢价部分才是策略贡献夏普比率每承担一份波动换回多少收益经验上大于1算合格跨策略比较时口径必须一致都用日频年化最大回撤最惨时从高点跌了多少决定你能不能拿得住均值回归策略的回撤大多发生在价差继续扩大阶段计算可直接用现成函数sharpe_ratio(nav, Currency.USD)会把价格序列自动年化max_drawdown(nav)输出回撤序列实现位于 gs_quant/timeseries/econometrics.py。调优与风控三个最实用的方向动态调整触发阈值问题固定 ±2 在波动放大的阶段容易频繁打脸在平静阶段又几乎不开仓。做法同时调z_score_bound和滚动窗口——高波动期把阈值放大、窗口拉长用参数扫描代替拍脑袋。trig_req MeanReversionTriggerRequirements(data_source, 2.5, 60, 60) # 更严的入场 更慢的信号加入交易成本问题均值回归策略换手不低零成本回测会系统性高估收益。做法给入场动作挂一个固定成本模型每次成交扣一笔现金。from gs_quant.backtests.backtest_objects import ConstantTransactionModel # 每次成交成本 100 美元 trigger MeanReversionTrigger(trig_req, AddTradeAction(swap, transaction_costConstantTransactionModel(100)))成本模型定义在 gs_quant/backtests/backtest_objects.py。设置强制止损问题价差可能长期不回归趋势行情只靠回到均值平仓会扛住大亏。做法再挂一个基于风险度量的触发器组合价值跌破阈值时清掉全部仓位风险度量选你引擎实际输出的那一项。from gs_quant.common import RiskMeasure from gs_quant.backtests.actions import ExitAllPositionsAction from gs_quant.backtests.triggers import StrategyRiskTrigger, RiskTriggerRequirements, TriggerDirection stop_trigger StrategyRiskTrigger( RiskTriggerRequirements(riskRiskMeasure.PnL, trigger_level-5000, directionTriggerDirection.BELOW), ExitAllPositionsAction(namestop_loss), # 亏损超过 5000 美元即清仓 ) strategy Strategy(None, [trigger, stop_trigger])小结与延伸阅读均值回归策略 一个价差序列 一个 Z 分数阈值 一个内置触发器状态机部分 gs-quant 已全部封装。先画 Z 分数和净值曲线看再读年化、夏普、回撤信指标口径一致才可比。阈值、窗口、成本是最值得先扫的三个参数止损触发器负责兜住极端行情。仓库内参考入口官方文档docs/index.rst回测模块源码gs_quant/backtests/均值回归官方示例gs_quant/documentation/04_backtesting/examples/03_GenericEngine/040304_strategy_mean_reversion.ipynb回测示例目录gs_quant/documentation/04_backtesting/examples/时序函数库gs_quant/timeseries/风险提示本文示例仅用于说明方法参数取自公开示例数据实盘前请自行验证流动性、交易成本与极端行情下的表现。【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Pipecat 部署全解:从本地调试到生产上线的完整清单

Pipecat 部署全解:从本地调试到生产上线的完整清单

Pipecat 部署全解:从本地调试到生产上线的完整清单 【免费下载链接】pipecat Open Source framework for voice agents, multimodal apps, and realtime AI. Maintained by Daily and the community. 项目地址: https://gitcode.com/GitHub_Trending/pi/pipecat …

📅 2026/9/13 3:49:00
PDF解除限制3步搞定:免费去除复制、打印限制完整指南

PDF解除限制3步搞定:免费去除复制、打印限制完整指南

PDF解除限制3步搞定:免费去除复制、打印限制完整指南 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 项目地址: https://git…

📅 2026/9/13 3:49:00
树莓派Pico呼吸灯:MicroPython硬件PWM与伽马校正实战

树莓派Pico呼吸灯:MicroPython硬件PWM与伽马校正实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/13 3:44:00
MORE NEWS

更多资讯

📰

边缘计算与工业控制融合:从PLC到边缘自治的架构演进与实践

这几年跑智能制造项目,我最大的感受是:工业控制这行,正在经历一轮从“集中式大脑”到“边缘自治”的架构转变。以前我们聊工业自动化,绕不开PLC、SCADA、伺服驱动这些老牌设备,但如今客户问得最多的词变成了“边缘计算…

📰

Haystack Builders 组件实战指南:AnswerBuilder、PromptBuilder 与 ChatPromptBuilder 的完整使用与源码解析

Haystack Builders 组件实战指南:AnswerBuilder、PromptBuilder 与 ChatPromptBuilder 的完整使用与源码解析 【免费下载链接】haystack Open-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modu…

📰

直流稳压电源与可编程电源的本质区别

1. 从实验室抽屉里翻出的两台“黑盒子”:稳压电源和可编程电源的真实面目去年整理实验室旧设备,我拉开最底层抽屉,摸出两台蒙尘的电源:一台是上世纪90年代产的直流稳压电源,绿色表盘、旋钮粗大、电压电流双指针&#x…

📰

Android Activity转场动画从入门到进阶:共享元素、主题动画与性能调优

从老项目换到新项目之后,我一直觉得App的“质感”差那么点意思。功能都齐全,界面也不算丑,但用起来就是觉得生硬。后来仔细复盘了一下,问题大半出在转场上:页面切换就是冷冰冰的“咔”一下直接换屏,毫无过渡…

📰

WPF UI组件库选型指南:VS2022+.NET 8时代五大主流库深度对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Typer 多值 CLI Option 实战:用 tuple 类型声明固定数量、混合类型的多个值

Typer 多值 CLI Option 实战:用 tuple 类型声明固定数量、混合类型的多个值 【免费下载链接】typer Typer, build great CLIs. Easy to code. Based on Python type hints. 项目地址: https://gitcode.com/GitHub_Trending/ty/typer 导读 在命令行应用中&am…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬