Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/digoal/skills --skill fund-quant-backtest명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
| name | fund-quant-backtest |
| description | A 股指数/基金估值定投与择时策略的可运行回测脚手架。 |
| version | 0.1.0 |
| author | Hermes Agent (curator-managed) |
| license | MIT |
| metadata | {"hermes":{"tags":["finance","backtest","a-stock","dca","valuation"],"related_skills":["retail-trading-manual-writer","a-stock-prediction","finance-core-analysis"]}} |
触发词 (任一即用): 回测、定投算法、估值定投、智能定投、年化对比、分位算法、复现一遍、对比普通定投。
典型场景:
不要用本 skill:
retail-trading-manual-writera-stock-prediction / us-stock-predictionfinancial-report-analysisindustry-deep-explainer本 skill 提供 可运行的 Python 回测脚手架,用于在 A 股指数/基金上验证估值定投 / 择时类策略。核心交付物是:
/root/new/tmp/<task>/<date>/backtest_*.py, 跑出结论 + CSV输入: 指数或基金代码 + 回测区间 + 策略档位(分位阈值 + 倍率) + 基础定投金额。 输出: 各策略的总投入 / 总份额 / 终值 / 年化 / 买入月数 / 最大回撤 + 关键时间点的决策明细。
触发词: 回测、定投算法、估值定投、智能定投、年化对比、分位算法、复现一遍。
明确边界: 本 skill 不负责以下任务, 请跳转其他 skill:
retail-trading-manual-writera-stock-prediction / us-stock-predictionfinancial-report-analysisindustry-deep-explainerak.stock_zh_index_hist_csindex(symbol="H00300", start_date="...", end_date="...")
输出列含 收盘 和 滚动市盈率, 无需二次拼接 PE 数据。H00300H00905H00922H00016H03900H02021WIN = 1252 # 5 年 ~ 1252 个交易日
df['pe_pct'] = df['pe_ttm'].rolling(WIN, min_periods=252).apply(
lambda x: np.sum(x[:-1] <= x[-1]) / len(x[:-1]),
raw=True
)
df['ym'] = df['日期'].dt.to_period('M')
month_first = df.groupby('ym').first().reset_index()
for s in ['s1_naive', 's2_zhifubao', 's3_v1', 's4_v2']:
month_first[] = month_first[s] * BASE_AMT
month_first[] = month_first[] / month_first[]
total_invest = month_first[].()
total_shares = month_first[].()
final_value = total_shares * df[].iloc[-]
cagr = (final_value / total_invest) ** (/years) - total_invest >
默认提供的策略档位(可改):
| 策略名 | 触发条件 | 扣款 |
|---|---|---|
s1_naive | 不论分位 | 1.0x |
s2_zhifubao | PE 分位 < 30% | 1.0x, 否则 0 |
s3_v1_middle_buy | 三指标任一触发低估 | 1.5x, 30-70% 区间 0.5x, > 70% 0 |
s4_v2_final | < 30% → 1.5x, 30-50% → 0.5x, > 50% → 0 | (主人最终采纳版, 单 PE 信号) |
s5_v4_three_indicators | PE 分位 + 股债比 + 60月均线趋势 | 1.5x / 0.5x / 0 / 极低估 3x + 趋势折扣 (主人首选, 三指标版) |
s6_extreme | PE 分位 < 15% AND PB 分位 < 15% | 3.0x |
两版并存的关系:
s4_v2_final: 单 PE 信号 + 主人档位偏好。简单, 透明度最高, 主人最初拍板的版本。s5_v4_three_indicators: PE 分位 + 股债比 (1/PE / 10Y 国债) + 60月均线趋势过滤。这是 2026-08-27 主人进一步要求的版本, 也是回测下来"绝对收益 + 资金利用率"双优的版本。默认推荐用这个。回测验证 (沪深300, 2014-2026-08, 152 个月, 投入 1000/月):
| 策略 | 终值 | CAGR | 买入月数 |
|---|---|---|---|
| 普通定投 | 220,452 | 2.98% | 152/152 |
| 支付宝风 (PE<30%才买) | 147,660 | 4.08% | 89/152 |
| v2 简化 (PE分位单指标) | 181,009 | 3.72% | 110/152 |
| v4 三指标 + 趋势 | 207,698 | 3.51% | 111/152 |
沪深300 全收益指数同期 2602 → 6799, 涨幅 161.3% (年化 7.9%)。
v4 不是 CAGR 最高, 是绝对收益最高 + 资金利用率最高 —— 这正是主人的偏好: 总收益才是真收益, 年化是给营销看的。后续新对话如果主人再调, 务必 patch 这个表, 不要在脚本里悄悄改。
默认 2014-2024 跑完一轮后, 主人会再问"扩到 2026 看近期" —— 直接加分段表:
| 段 | 时长 | 普通定投 CAGR | v4 CAGR | v4 优势 |
|---|---|---|---|---|
| 慢牛 (2019-2020) | 24 月 | 14.57% | 20.37% | +5.8 pp |
| 阴跌 (2021-2023) | 36 月 | -5.90% | -2.84% | +3.1 pp |
| 反弹 (2024-2026) | 32 月 | 6.33% | 12.38% | +6.0 pp |
核心洞察: v4 在三种不同行情下都跑赢普通定投, 阴跌段损失减半、反弹段收益翻倍。这是估值信号的真正价值, 不是只看 CAGR 能看出来的。后续回答主人"为什么用 v4"时, 直接引用这段话。
最近 12 个月 (2025-09 ~ 2026-08) v4 决策 = 全部 0.0 (PE 分位 73-96%) —— 这就是 v4 在贵市里的"沉默期", 用来回答"算法是不是死了"质疑的最佳证据。
df['pe'].rolling().rank(pct=True) —— 那给的是滚动百分位, 不是历史分位, 含义不同。x[:-1] <= x[-1], 防止前视偏差。Cannot connect to proxy)—— 用 curl --socks5-hostname host.docker.internal:11112, 或重试一次, 不要无限重试。回测结论最好落地为一张图: X 轴时间, Y 轴累计投入 / 累计市值, 多策略叠加。
推荐 matplotlib + fill_between, 例:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(12, 6))
for s in ['s1', 's2', 's3', 's4']:
cum_value = (month_first[f'{s}_share'].cumsum() * month_first['close']).values
ax.plot(month_first['日期'], cum_value, label=s)
ax.legend()
ax.grid(alpha=0.3)
图存到 /root/new/tmp/<task>/<date>/fig_*.png, 在对话里直接引用路径。
实战中主人明确表达的偏好, 后续回测必须满足, 不要替主人切档位:
ak.stock_zh_index_value_csindex (中证指数估值) 返回的 xls URL (oss-ch.csindex.com.cn/static/html/...) 已 404, 实际是占位 JPEG 图片。不要用这个接口拿历史 PE/PB/股息率。直接走 stock_zh_index_hist_csindex。ak.bond_zh_us_rate(), 含 1990-2026 全历史, 列名 中国国债收益率10年。akshare 的 bond_china_yield() 只覆盖到 2021, 别用。ak.stock_index_pe_lg): 挂了 csrf, 直接放弃, 别尝试。雪球 PE 也有 csrf / 反爬, 不推荐。回测结论跑通 + 主人明确说"落 cron"后, 进入此阶段。默认推荐用 --script + --no-agent 纯脚本模式, 不是 agentic 模式:
hermes-cron-orchestrator 描述的 agentic 模式是浪费 (那 skill 主要服务"数据 + LLM 解读"型 cron)完整模板 / 部署流程 / 时区换算 / 7 步走 / 踩坑速查表, 看 references/production-deployment.md。关键提醒:
/root/.hermes/profiles/digoal/scripts/ (per-profile, 不是全局)--script 参数用纯文件名 (不要绝对路径)/root/new/work/digoal/ 下references/akshare-pe-data-sources.md: 中证 / 乐咕乐股 / 雪球 / 万得 各源对比, 哪个能用、哪个有 csrf、字段含义。references/valuation-strategy-design-notes.md: 估值定投档位选择背后的依据, 三指标 / 趋势过滤 / EPS 一致预期修正等高级条件的取舍逻辑。references/production-deployment.md: 回测结论跑通后的生产化部署模式 (hermes cron + script + no-agent), 包括 wrapper.sh 模板、workdir 布局、history.json 格式、常见踩坑。scripts/dca_backtest_template.py: 一个可直接 copy 修改的回测模板。