量化多头大厂管理人 · 绝对收益修复分析报告
用途与触发
用户提供「净值表 + 周度收益表」,要求判断各管理人在某次大跌后是否"修复"。典型话术:
- "分析大厂量化多头策略的修复情况,只算绝对收益"
- "和先前一样的修复分析,数据更新到 X 月 X 日"
- "输出参照这个 html 的结构和风格"
输入
| 文件 | 形态 | 说明 |
|---|---|---|
| 净值表 xlsx | 首列日期,其余每列一位管理人 | 累计收益的权威来源(基准=首行日期) |
| 周度收益表 xlsx | 首列基金名称,其余列=周日期 | 提供"各周收益序列"与胜率;管理人全名需截短与净值表对齐 |
缺值在 Excel 里表现为字符串 - 或 -%。
判定口径(固定,勿改)
- 基准:暴跌前峰值 = max(累计收益@峰值日1, @峰值日2),默认
7/3、7/10 - 终点:end 日累计收益(默认取净值表最后一个日期)
- 仅算绝对收益,不计算超额收益
| 条件 | 状态 |
|---|---|
| end ≥ 峰值 且 峰值 ≥ 0% | 已修复 |
| 峰值 − end ≤ 2% | 即将修复 |
| 2% < 峰值 − end < 5% | 还需努力 |
| 峰值 − end ≥ 5% | 情况不明 |
> 「剔除暴跌前已深度回撤/深度负超额管理人」条款需要净值回溯至 2025.12.31;若数据仅覆盖当年 7 月,不启用该条款,并在报告"数据说明"里注明。
用法
python scripts/report.py \
--nv "量化多头净值06260904.xlsx" \
--weekly "量化多头周度收益 06260904.xlsx" \
--outdir "C:/Users/.../量化多头9月修复分析_20260913" \
--peak-dates 2026-07-03 2026-07-10 \
--crash 2026-07-10 2026-07-17 \
--title "量化多头9月修复分析"
可选 --end 2026-09-04 指定终点(缺省=净值表最后一个日期)。
产出(outdir/):
{title}报告.html—— 自包含单文件(内联 Chart.js + base64 图片),可直接分享修复判定明细.csv—— 峰值/终点/差距/状态逐列明细assets/—— 4 张静态 PNG(饼图+分布、波动区间、回撤周、排名)
报告结构(务必保持一致)
一 回撤周分析 → 二 收益修复状态(统计卡+名单+饼图)→ 三 修复期变化 →
四 分组累计收益曲线(可交互 Chart.js) → 五 收益波动区间 → 六 周度收益表现 →
七 累计收益排名(统计卡+排名图+四张明细表)→ 八 综合解读 → footer
分组口径:
- 第四部分按最终累计收益分 4 组:≥5% / 0~5% / -5~0% / <-5%
- 第七部分按最终累计收益分 4 档:≥0 / -5~0% / -10~-5% / <-10%
图表规范(务必对齐参考报告,勿自创画法)
配色:遵循 A 股习惯 —— 涨/正收益 红 #E74C3C,跌/负收益 绿 #2ECC71。
| 章节 | 画法 |
|---|---|
| 二 | 总标题 量化多头管理人 · 绝对收益修复状态;左=整圆饼图(外标签 + 内百分比;0 人档不出标签但仍进图例,图例右下),右=直方图(x=0 处红色虚线 + 红字 "反弹:X人 续跌:Y人",左下角 4 档色块图例) |
| 四 | 每组内每位管理人独立配色(黄金角 + 明暗交替,见 palette()),底部图例标注姓名,悬停显示数值、点图例可开关曲线;回撤周红色半透明竖带 + 零轴虚线(自定义 crashBand 插件) |
| 五 | 误差棒式:区间线红(终值≥0)/绿(<0) + 两端竖向端点帽;圆点按终值分档着色(≥0 红 / -5~0 蓝 / -10~-5 橙 / <-10 绿,与第七节分档一致);标题 量化多头管理人 · 收益波动区间(6-26-9-4) |
| 六 | 周度收益热力图(不是条形图):红正绿负发散色 + 格内数值 + 右侧 colorbar 周度收益 (%);按回撤周收益倒序排列;7/17 列红色虚线 + 红框标注 回撤周排序基准,并清空该列轴标签避免重叠 |
| 七 | 标题 量化多头管理人 · 累计绝对收益排名 (6-26-9-4),x 轴 6-26-9-4累计收益 (%),棒端标数值 |
其他要点:
- 静态图用 matplotlib(
Microsoft YaHei,axes.unicode_minus=False);版式取references/template.css,勿改 - 热力图字号需按
fontsize / figure_width控制:图宽 ≈7.9in + 字 7.8pt,才能在 750px 容器里保持可读(图宽 10.6in 时字只剩 ~7px) - 热力图 cmap =
LinearSegmentedColormap(['#1E8449','#fff','#C0392B']),vmin/vmax = ±max(abs),缺失值填 0 且不写字
已知坑
- 净值表缺值是字符串
-,必须pd.to_numeric(errors='coerce') - 周度表管理人为全名(如
明汯空气H-SZS284),须按前缀截短后才能与净值表 join pd.read_excel(..., header=0).columns[0]取首列名做 index,不要硬编码'日期'/'基金名称'- Chart.js 需内联(
assets/chart.umd.min.js)——预览面板按目录起服务,相对路径可能失效 - 少数管理人终点日净值未更新:用最近一期净值代替并在报告中标注
- Windows 下
strftime('%-m/%-d')不可用,需手工取d[5:7]/d[8:10]