外观
基准与期初净值
一次回测使用一条基准曲线。基准在分析器中生成,股票、基金和期货使用同一配置入口;不影响策略下单、账户资金或实际持仓。配置位置为 mod.sys_analyser.benchmark,默认 None 表示无基准,任何资产都不会自动选择基准。
按策略选择基准
下表是策略研究与模板的推荐口径,选定后须显式配置,不是框架自动采用的默认值。用户已指定基准时按用户口径;未指定时,根据策略的标的范围和交易方式选择,不将“股票基金”或“期货”视为只有一种基准的资产类别。
| 策略类型 | 推荐基准 | 比较目的 |
|---|---|---|
| 通用 A 股选股 | 沪深300,000300.SH | 相对股票市场参照的表现 |
| 明确偏小盘、行业或红利风格的股票策略 | 与该风格对应的指数 | 减少策略风格与基准不匹配的影响 |
| 单只 ETF/LOF 择时 | 该基金自身的后复权净值 | 与持有该基金的收益比较;需要计入买入费用时另行构造净值 |
| 股票型 ETF 轮动 | 沪深300作为通用起点;明确风格时选择对应指数 | 衡量轮动相对所研究股票市场的表现 |
| 跨股票、债券、黄金等资产的轮动 | 预先定义权重的资产组合 | 与同一资产范围的配置方案比较 |
| 多品种商品期货 | 南华综合指数,NHCI.NH | 作为商品市场整体表现的参照 |
| 单品种或单板块商品期货 | 对应单品种或板块指数 | 与同一品种或板块的市场走势比较 |
| 股指期货、国债期货 | 对应股指或国债期货指数 | 使用与交易标的匹配的金融市场参照 |
| 多空趋势、套利、市场中性策略 | 现金,或预先定义风险预算与交易规则的对照策略净值 | 观察绝对收益,或比较相同研究条件下的策略表现 |
| 普通可转债选券 | 中证可转换债券指数,官方代码 000832 | 可转债市场整体参照 |
| 同时投资可转债与可交换债 | 中证可转债及可交换债券指数,官方代码 931078 | 与同一债券范围的市场表现比较 |
商品与金融期货应分别选择参照,南华商品指数提供综合、分类和单品种参照,具体定义以南华官方编制规则为准。期货指数与策略账户的方向、杠杆、仓位及移仓规则可能不同,跑赢指数不等于取得了同风险水平下的超额收益。商品与金融期货混合策略可使用预先定义的组合或对照策略净值。
可转债市场范围分别见中证转债说明与中证转债及可交换债说明。指数的净价、税后、利息再投资等版本不能混为同一口径。双低、低价、小余额等选券策略可采用预先定义的同类标的池等权组合,评估筛选规则的贡献。这里的基准建议不表示框架已支持可转债交易,交易支持范围见指南首页。
基准在研究前确定,不根据回测结果挑选。一次运行只选择一条曲线;固定权重理论组合使用 portfolio,动态权重、定期调仓、计入费用或特定风险预算的对照使用 nav。现金 CASH 的收益为零,仅用于零收益比较,其 beta 等依赖基准波动的指标可能无定义。选定基准后,在策略逻辑中记录名称、选择理由及收益口径。
选择基准来源
benchmark 使用带 type 的完整字典。配置覆盖时整个 benchmark 替换,不将不同来源的字段或两组权重合并。
| type | 必填字段 | 可选字段 | 计算口径 |
|---|---|---|---|
instrument | order_book_id | name,默认标的名称 | 已加载标的日线收益,无交易费用 |
portfolio | weights | name,默认“固定权重组合” | 每日固定权重加权收益,无交易费用 |
nav | name、data | 无 | 使用提供者的净值口径,不额外复权或扣费 |
关闭基准显式设为 None。未知字段、来源不明、缺少必填字段均报错。HTML 绩效总览显示名称和计算口径;结果中保存 benchmark_metadata,重新导出时无需重新读取基准文件。
单标的基准
python
config["mod"]["sys_analyser"]["benchmark"] = {
"type": "instrument",
"order_book_id": "510300.SH",
"name": "沪深300 ETF",
}先通过正确数据入口加载标的:股票或纯基金放 codes,股票账户附加基金放 etf_codes,指数放 index_codes。填写代码不会自动加载行情。
股票基金使用后复权收盘,指数使用供应商提供的指数点位,期货系列使用后复权日线,真实月合约使用原始价格。价格指数不会自动变为全收益指数;期货价格收益也不会自动变成含保证金杠杆、手续费与账户移仓的资金收益。需要其他口径时提供外部净值。
行情必须有期初锚点和首日价格。股票基金后续无日线按停牌持平并告警,这是该链路的模型约定;指数和期货缺日线直接报错。所有使用到的价格须为正的有限数。
固定权重组合
python
config["mod"]["sys_analyser"]["benchmark"] = {
"type": "portfolio",
"name": "半仓 ETF 基准",
"weights": {"510300.SH": 0.5, "CASH": 0.5},
}权重必须非负、有限、合计为 1,合计误差允许 1e-10;框架不自动归一化,也不自动把剩余权重补成现金。CASH 为零收益现金腿,不计国债利息;{"CASH": 1} 可作纯现金基准。零权重标的不参与计算,无须为它额外加载数据。
每日组合收益为 Σ(权重 × 当日标的收益),再按日复利生成净值。权重每天固定,相当于每日再平衡的无摩擦理论组合。它不同于买入后放任权重漂移的持有组合;每月调仓、动态权重、扣费组合等使用外部净值表达。
CSV、Series 和 DataFrame
python
config["mod"]["sys_analyser"]["benchmark"] = {
"type": "nav",
"name": "我的组合基准",
"data": "data/benchmark.csv",
}CSV 使用 UTF-8,至少包含 date、unit_net_value 两列;路径也可传 pathlib.Path,相对路径以启动目录为准:
csv
date,unit_net_value
2024-05-31,2.000
2024-06-03,2.020
2024-06-04,2.010同一 data 字段还接受:
python
import pandas as pd
# Series:日期索引,值为净值。
nav = pd.Series(
[2.000, 2.020, 2.010],
index=pd.to_datetime(["2024-05-31", "2024-06-03", "2024-06-04"]),
)
config["mod"]["sys_analyser"]["benchmark"]["data"] = nav
# DataFrame:unit_net_value 列,日期来自 date 列或日期索引。
frame = nav.rename("unit_net_value").rename_axis("date").to_frame()
config["mod"]["sys_analyser"]["benchmark"]["data"] = frameDataFrame 有 date 列时使用该列,否则使用索引;其他数据列不参与基准。字段名固定,不自动猜测 nav、close 等别名。
日期必须是无时区的日日期,不能含盘中时间或重复日期。净值必须有限且大于零。输入顺序可乱序,框架按日期对齐,不修改调用方的 Series/DataFrame。
基准应提供处理过申赎资金流影响的单位净值;不能直接把包含追加资金的总资产当作收益曲线。费用、分红、杠杆和调仓方式均由提供者决定,框架按输入原样计算收益。
区间与首日收益
以最终实际回测交易日历为准,输入必须覆盖:回测首日前一交易日 + 全部实际回测交易日。可以提供更长历史或其他日期,框架选取所需日期;所需日期缺失直接报错,不前向填充、不插值、不用缺数据来裁剪回测区间。
日频与分钟均使用日终基准,期货按交易日而非夜盘自然日期对齐。需要不同市场休市期间持平的比较时,由提供者明确生成相应交易日净值。
正式回测从 2024-06-03 开始时,以上输入的归一化结果为:
| 日期 | 含义 | 展示净值 |
|---|---|---|
| 2024-05-31 | 期初锚点 | 1.000 |
| 2024-06-03 | 首日结束 | 1.010 |
| 2024-06-04 | 次日结束 | 1.005 |
归一化除以期初锚点净值 2.000,不除以首日结束净值。首日基准收益为 1%,完整计入总收益和风险指标。输入无需从 1 开始,单位缩放不改变结果。
HTML 曲线从哪里开始
策略、基准和几何超额净值曲线共享回测首日前一交易日的期初点,净值均为 1,回撤均为 0。首次调仓或首次成交日期不决定起点;首日亏损时,其日终净值可以小于 1,首日回撤也保留。
期初点只加入图表展示,不增加回测交易日数,不生成持仓或成交明细,不参与收益样本计算。新回测在运行前要求日历包含该期初日,缺失会报错。每日结果表只记录正式回测区间;绘图通过 summary.inception_date 添加期初点。
将另一场回测的 portfolio.unit_net_value 用作本次基准时,仍要满足上述覆盖要求。同起点的结果表不含期初行,可以按该结果的 summary.inception_date 显式补入净值 1;不能把首个日终净值改成 1。
结果与参数优化
benchmark_portfolio 保存正式区间归一化净值,portfolio 中的基准、超额列,summary 中的基准收益、alpha、beta 等指标,以及 HTML、Excel 使用同一份基准数据。benchmark_metadata 保存来源、名称、期初日期,以及组合权重/每日再平衡口径,或外部输入的期初值和文件路径。
优化时共享只读净值数据。构造运行身份时把实际净值 DataFrame 放入 datasets;只有 CSV 文件路径或 DataFrame 的字符串摘要不能证明内容相同。要保存独立报告时按该组同一基准配置重跑,不在回测结束后只替换结果表的基准曲线。