Files
simon fce725e13c 初始提交:高股息策略研究与回测系统
从 Point-in-Time 股票筛选到统一 Web 前端的完整链路:
筛选 → 画像 → 策略 → 回测 → Walk-forward → 绩效分析 → 报告/前端。

架构
- 数据层与策略层分离;策略代码不写 SQL,只经 data/repo.py 取数
- 所有业务阈值集中在 config/*.yml,代码零硬编码(字段写错直接报错)
- 报告只做「run_id → SQL → 渲染」,不做任何计算,数字可追溯
- 前后端分离:output/ 静态站点 + hdiv web 提供的 REST API

数据安全
- 只增不删:SQL 钩子拦截 DELETE/DROP/TRUNCATE,并有源码扫描测试守护
- qlib 原有表只读,本项目数据写入 hd_ 前缀表
- 回补使用 INSERT IGNORE,保证既有行零改动
- .env 存密钥且已 gitignore;output/、logs/、.venv/ 不入库

交付物
- 30 张 hd_* 表、7 个 YAML 配置、283 项自动化测试
- 统一 Web 前端(hash 路由 SPA)+ nginx 部署配置与 launchd 托管脚本

如实声明的限制
- 策略缺少稳定的样本外超额收益(Walk-forward 7 窗口均值 -0.95%,
  基准 +2.29%);其价值体现在回撤控制,而非超额收益
- 涨跌停/停牌约束仅覆盖 2019 年起;index_weight 尚未填充
- AI Agent 层(plan.md 第四版 P8)未实现

详见 docs/user-guide.md 与 docs/implementation-status.md。
2026-10-03 13:54:56 +08:00

84 lines
4.3 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{% extends "base.html" %}
{% block content %}
<div class="kpi-grid">
<div class="kpi"><div class="label">报告总数</div><div class="value">{{ total }}</div>
<div class="note">{{ groups|length }} 个类型</div></div>
<div class="kpi"><div class="label">最新报告</div><div class="value">{{ latest_count }}</div>
<div class="note">每个类型的首份</div></div>
<div class="kpi"><div class="label">离线资源</div>
<div class="value" style="font-size:15px" class="mono">{{ asset_hint }}</div>
<div class="note">图表库必须与本页同级目录一起部署</div></div>
</div>
{% if hidden %}
<div class="callout">
另有 <strong>{{ hidden }}</strong> 份 Walk-forward 子运行报告(各窗口的训练/测试段)
未在此列出 —— 它们是可下钻的原始证据而非独立交付物,文件仍在
<code class="mono">output/</code> 下,可在 <code class="mono">hd_report</code> 表中按 run_id 找到。
</div>
{% endif %}
{% if missing %}
<div class="callout fail">
<strong>有 {{ missing }} 份登记的报告文件在磁盘上不存在</strong> ——
索引中的链接会失效。请重新生成对应报告,或整体重新部署 <code class="mono">output/</code> 目录。
</div>
{% endif %}
<div class="callout warn">
<strong>部署须知:图表依赖本地资源。</strong>
报告通过相对路径引用 <code class="mono">assets/echarts.min.js</code>。
若你把报告发布到 <code class="mono">/ggx/</code> 这样的路径下,
<strong>必须同时部署 <code class="mono">output/assets/</code> 目录</strong>,
使其可通过 <code class="mono">/ggx/assets/echarts.min.js</code> 访问;
否则页面能打开但<strong>所有图表都不会显示</strong>。
如无法部署该目录,可把 <code class="mono">config/report.yml</code> 的
<code class="mono">asset_mode</code> 改为 <code class="mono">inline</code>
重新生成,让每份 HTML 自带图表库(体积由约 10MB 增至约 79MB)。
</div>
{% for g in groups %}
<div class="card">
<h2>{{ g.label }} <span class="badge info">{{ g.reports|length }}</span></h2>
<div class="report-list">
{% for it in g.reports %}
<a class="report-item" href="{{ it.path }}" {% if not it.exists %}style="opacity:.5"{% endif %}>
<div class="t">
{% if it.is_latest %}<span class="badge OK">最新</span> {% endif %}
{{ it.title }}
</div>
<div class="m mono">{{ it.path }}</div>
<div class="m">{{ it.size }} · {{ it.generated_at }}
{% if not it.exists %} · <span style="color:#DC2626">文件缺失</span>{% endif %}
</div>
</a>
{% endfor %}
</div>
</div>
{% endfor %}
<div class="card">
<h2>系统说明</h2>
<div class="table-scroll">
<table class="data">
<thead><tr><th style="text-align:left">项</th><th style="text-align:left">说明</th></tr></thead>
<tbody>
<tr><td style="text-align:left">数据源</td><td style="text-align:left">本机 MariaDB <code class="mono">127.0.0.1:3306/qlib</code>(与 qlib 平台共用)+ Tushare Pro</td></tr>
<tr><td style="text-align:left">配置</td><td style="text-align:left">全部阈值来自 <code class="mono">config/*.yml</code>,代码零硬编码</td></tr>
<tr><td style="text-align:left">结果</td><td style="text-align:left">优先写入数据库 <code class="mono">hd_*</code> 表;HTML 仅作呈现</td></tr>
<tr><td style="text-align:left">数据安全</td><td style="text-align:left">只增不删:所有 SQL 经安全钩子拦截 <code class="mono">DELETE/DROP/TRUNCATE</code></td></tr>
<tr><td style="text-align:left">离线</td><td style="text-align:left">不依赖任何 CDN;图表库本地提供</td></tr>
<tr><td style="text-align:left">报告时效</td><td style="text-align:left">同一类型的多份报告是<strong>历史运行</strong>,请以标注「最新」的为准</td></tr>
<tr><td style="text-align:left">使用文档</td><td style="text-align:left">
<code class="mono">docs/user-guide.md</code> 使用手册(安装/配置/命令/报告解读/故障排查)<br>
<code class="mono">docs/implementation-status.md</code> 实施状态(含<strong>实测结论与已知限制</strong>)
</td></tr>
</tbody>
</table>
</div>
</div>
{% endblock %}