gs-quant 量化金融回测实战一段脚本跑通均值回归策略看懂 5 个核心指标【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quantgs-quant 是 Python 量化金融工具包内置回测引擎、触发器与绩效指标体系。本文用它回测一个价差均值回归策略一段可运行的脚本从取数、定规则到输出指标10 分钟走完全程。先看结果跑完一次回测你能拿到什么先给结论。跑完后你会得到一个BackTest对象它能吐出三样东西每日净值的 DataFrame、逐笔交易台账、一揽子绩效指标。示意如下数值仅为说明含义实际以你的运行结果为准指标示意值一句话含义Sharpe Ratio夏普比率0.8每承担一份波动换到的年化收益Max Drawdown最大回撤-7%净值从最高点跌下来的最大幅度Total Trades交易次数12一年里进出场了多少次% Positive Days盈利天数占比55%有多少个交易日是赚钱的倒推一下要产出这张表需要解决三件事数据从哪来价格序列、何时动手进出场规则、怎么算账引擎逐日定价并计成本。下面按顺序解决。原理速览把价差想象成一根橡皮筋两只走势相关的股票价格之比价差就像一根被反复拉长的橡皮筋多数时候在常态长度附近晃动偶尔被消息拉到很长然后弹回去。策略的全部逻辑就是等它拉过头下注它回弹。三个关键概念价差比率Spread RatioA 价格 / B 价格 - 1衡量两只标的谁相对更贵均值回归Mean Reversion偏离常态的价差有弹回常态的倾向Z 分数Z-Score当前价差偏离近 N 日均值多少个标准差等于橡皮筋被拉出去几格整个回测就是一条循环gs-quant 把这条循环拆成三个可插拔部件DataSource喂数据、Trigger判断何时动手、Action动手做什么回测引擎逐日推动它们运行。3 分钟装好环境认证只需一行安装一条命令pip install gs-quant --upgrade--upgrade保证拿到最新版本与依赖需 Python 3.8pandas 等常用库请自行装好。登录一行首次会提示输入 developer key注册 gs-quant 账号即可获取import gs_quant as gs gs.login() # 认证信息本地保存之后无需重复一次跑通完整脚本与分段注解下面是可整段复制的脚本按功能分三段。演示用两只同板块大票 AAPL 与 MSFT实际使用请换成相关性更高的配对。拉取价格并构造价差信号这一步取两只标的的收盘价算出价差比率与 Z 分数再包装成引擎可读的数据源import datetime as dt from gs_quant.markets import Stock from gs_quant.backtests.data_sources import GenericDataSource, MissingDataStrategy start, end dt.date(2022, 1, 3), dt.date(2025, 1, 3) a Stock(AAPL).history(price, start_datestart, end_dateend) # 标的A价格 b Stock(MSFT).history(price, start_datestart, end_dateend) # 标的B价格 spread a / b - 1 # 价差比率 z (spread - spread.rolling(60).mean()) / spread.rolling(60).std() # 60日Z分数 signal GenericDataSource(z.dropna(), MissingDataStrategy.fill_forward) # 引擎可读信号两个关键参数rolling(60)是平滑窗口60 个交易日MissingDataStrategy.fill_forward决定缺值日前向填充而不是中断。数据源实现见 gs_quant/backtests/data_sources.py。定义进出场规则这一步声明两个触发器Z 分数上穿 2 开仓、下穿 1 平仓每次交易记 200 美元固定成本from gs_quant.markets.portfolio import Portfolio from gs_quant.backtests.actions import AddTradeAction, ExitAllPositionsAction, ConstantTransactionModel from gs_quant.backtests.triggers import MktTrigger, MktTriggerRequirements, TriggerDirection pair Portfolio([(Stock(AAPL), -1), (Stock(MSFT), 1)], namepair) # 做空A做多B enter MktTrigger( MktTriggerRequirements(signal, 2.0, TriggerDirection.ABOVE), # Z2价差拉过头 AddTradeAction(pair, 60d, namepair_entry, transaction_costConstantTransactionModel(200))) # 每笔固定成本 exit_pos MktTrigger( MktTriggerRequirements(signal, 1.0, TriggerDirection.BELOW), # Z回落到1以下平仓 ExitAllPositionsAction(namepair_exit)) # 想做对称方向再加一个 z-2 进入、z-1 离开的触发器即可关键参数是2.0 / 1.0两个阈值与60d持仓上限触发器与动作的完整家族含内置的MeanReversionTrigger实现在 gs_quant/backtests/triggers.py。启动回测引擎这一步把策略交给引擎逐日推进定价、成交与结算from gs_quant.backtests.strategy import Strategy from gs_quant.backtests import GenericEngine strategy Strategy(None, [enter, exit_pos]) # 第一个参数为初始持仓None 表示空仓起跑 engine GenericEngine() backtest engine.run(start, end, strategy) # 返回 BackTest 对象引擎如何把触发器与动作串成完整回测见 gs_quant/backtests/generic_engine.py。读懂结果回测指标怎么看拿到backtest对象后指标、净值曲线、交易台账各一行取出stats backtest.summary_stats() # 一揽子绩效指标 print(stats[[Sharpe Ratio, Max Drawdown, Total Trades, % Positive Days]]) backtest.result_summary[Total].plot() # 组合净值曲线 backtest.trade_ledger().tail() # 逐笔开平仓与盈亏台账这 20 余项指标的计算逻辑集中在 gs_quant/backtests/backtest_objects.py。挑三个最常看的讲看什么、怎么判好坏Sharpe Ratio像汽车油耗衡量每单位颠簸换多少里程。大于 1 算健康低于 0.5 说明收益大多被波动吃掉Max Drawdown净值水位从高点回落到谷底的深度。均值回归靠小赢很多次回撤过深往往意味着配对失效而不是耐心不够Total Trades一年 10 次上下符合低频等回弹的定位翻到几十次就先怀疑阈值太松上图为 gs-quant 文档中的一张分周期组合图柱状是各周期收益、折线是累计值。回测净值曲线与trade_ledger()台账也是同样的分块 累计读法。调参与避坑跑之前的四个检查项**现象毛收益不【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考