背景
需要一个通用的基金/ETF 历史回撤可视化工具,直观展示某只标的自上市以来「水下曲线」(drawdown)的演化,并标注历次大幅回撤的时点与幅度。
改动
新建 plots/fund_drawdown.py:
- 读取
fund_quote_adjusted/{code}.parquet(前复权,避免分红制造假回撤)
- 峰值 = 截至当日为止的历史最高价(
cummax(high))
- 回撤 = 当日最低价 / 历史最高价 − 1
- 上下两栏:
- 上栏:前复权收盘价(蓝线)+ 历史最高价线(灰虚线,单调递增)
- 下栏:每日回撤水下曲线(红色填充),标注深于 −15% 的谷值(日期 + 幅度),最大回撤标
(max)
- 用历史新高分段算法找各段最深谷值,避免相邻新高把同一段回撤切碎
--code 可换任意基金/ETF(默认 512890),--adjusted-dir / --output 可覆盖路径
- 中文基金名因系统无中文字体不写入图标题(只用 code),避免 tofu
用法
uv run python plots/fund_drawdown.py # 默认 512890
uv run python plots/fund_drawdown.py --code 510300 # 沪深300ETF
uv run python plots/fund_drawdown.py --code 159915 --output /tmp/dd.png
验证(512890 红利LV)
- 2019-01-18 ~ 2026-06-15,1792 个交易日
- 最大回撤 −18.27%(2020-03-19 新冠)
- 标注谷值:2020-03-19 −18.27%、2021-11-10 −17.38%、2022-03-16 −16.89%、2025-04-07 −15.97%
背景
需要一个通用的基金/ETF 历史回撤可视化工具,直观展示某只标的自上市以来「水下曲线」(drawdown)的演化,并标注历次大幅回撤的时点与幅度。
改动
新建
plots/fund_drawdown.py:fund_quote_adjusted/{code}.parquet(前复权,避免分红制造假回撤)cummax(high))(max)--code可换任意基金/ETF(默认 512890),--adjusted-dir/--output可覆盖路径用法
验证(512890 红利LV)