# 设计方案调整
## 20260402
1. WeightBacktest 中的 dfw 参数名称改成 data,同时支持三种类型的输入
- pd.DataFrame
- pl.DataFrame / pl.LazyFrame
- file 路径(csv/feather/parquet/xlsx 四种常见格式)
2. 评估指标的优化(三大类:收益、风险、特质)
收益指标:
- 绝对收益
- 年化收益
- 夏普比率
- 卡玛比率
- 新高占比
- 单笔盈亏比 - 用pairs计算
- 单笔收益 - 用pairs计算
- 日胜率
- 周胜率
- 月胜率
- 季胜率
- 年胜率 - 细节:当年交易天数不到 yearly days 的一半,不计算这一年
风险指标:
- 最大回撤
- 年化波动率
- 下行波动率
- 新高间隔
特质指标:
- 交易次数 - 用pairs计算
- 年化交易次数 - 用pairs计算
- 持仓K线数 - 用pairs计算
- 交易胜率 - 用pairs计算
- 多头占比 - 用weight计算
- 空头占比 - 用weight计算
stats - 多空综合的评估指标
long_stats - 只看多头部分的评估指标
short_stats - 只看空头部分的评估指标
3. 新增 segment_stats 函数
s = segment_stats(sdt="20170101", edt="20190101", kind="多头/空头/多空")
按 sdt 和 edt 分别过滤 dailys 和 pairs,然后计算出 2 种的所有指标
4. 新增 long_alpha_stats 函数
将多头的日收益和基准的日收益,按目标年化波动率20%调整后,多头累计 - 基准累计 = 多头超额;
用 daily_performance 在多头超额上面计算指标
5. python/wbt 下面新增 plotting 模块,根据 weight backtest 的输出数据格式,绘制各种可视化图表
画图仅依赖 plotly
参考 czsc 库下面的 svc 模块和 utils/plotting 模块,需要仔细甑别哪些绘图函数是针对回测场景有效的。
可以先统一数据格式,然后根据统一的格式来绘制图表
## 20260403
1. 所有涉及到 stats 输出的函数,输出的字段顺序都按照以下方式(包括字段名称),这样人工可读性强
{'绝对收益': -8.9528,
'年化收益': -0.4117,
'夏普比率': -2.9296,
'卡玛比率': -0.0455,
'新高占比': 0.0011,
'单笔盈亏比': 0.927,
'单笔收益': -1.98,
'日胜率': 0.4226,
'周胜率': 0.3406,
'月胜率': 0.2541,
'季胜率': 0.0984,
'年胜率': 0.0,
'最大回撤': 9.0425,
'年化波动率': 0.1405,
'下行波动率': 0.0907,
'新高间隔': 2.0,
'交易次数': 7497492,
'年化交易次数': 344775.18,
'持仓K线数': 3.77,
'交易胜率': 0.5078,
'多头占比': 0.1575,
'空头占比': 0.84,
'品种数量': 5,
'开始日期': '2010-01-01',
'结束日期': '2025-01-01'}
2. segment_stats 中 sdt 和 edt 参数应该以 str 为主,兼容 timestamp 之类的格式,不要用 int
3. 在 wbt\python\scripts\quick_start.ipynb 中提供 plotting 函数的使用案例,并直接运行出来