跳转到正文

基准与期初净值 ​

一次回测使用一条基准曲线。基准在分析器中生成,股票、基金和期货使用同一配置入口;不影响策略下单、账户资金或实际持仓。配置位置为 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必填字段可选字段计算口径
instrumentorder_book_idname,默认标的名称已加载标的日线收益,无交易费用
portfolioweightsname,默认“固定权重组合”每日固定权重加权收益,无交易费用
navname、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"] = frame

DataFrame 有 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 的字符串摘要不能证明内容相同。要保存独立报告时按该组同一基准配置重跑,不在回测结束后只替换结果表的基准曲线。

localquant documentation