---
title: stock808-cn
canonical_url: "https://www.modelscope.cn/studios/tianyumo94/stock808-cn"
md_url: "https://www.modelscope.cn/studios/tianyumo94/stock808-cn.md"
repository: tianyumo94/stock808-cn
chinese_name: "每日股票研究候选"
last_updated: 2026-10-24
sdk_type: streamlit
downloads: 0
stars: 3
---

# stock808-cn

> stock808-cn - tianyumo94 在 ModelScope 创建的在线 Demo。项目现已包含一套不替换原有规则策略的 A 股量化研究管线：

tianyumo94/stock808-cn 是 ModelScope 魔搭社区上的在线可交互 Demo（创空间），基于 streamlit 构建，中文名为「每日股票研究候选」。

- **Repository**: tianyumo94/stock808-cn
- **SDK**: streamlit
- **Downloads**: 0
- **Stars**: 3
- **Last updated**: 2026-10-24

Source: https://www.modelscope.cn/studios/tianyumo94/stock808-cn

---

# 每日股票信号 Dashboard

## Stock808 量化核心（正式推荐）

项目现已包含一套不替换原有规则策略的 A 股量化研究管线：

- `src/quant/`：时间可用性数据契约、因子注册、LightGBM T+5/T+20 模型、A股交易约束回测、模型与推荐服务。
- `scripts/quant_pipeline.py`：统一执行数据湖、因子、滚动样本外训练、正式推荐、月度回溯及 Qlib 数据导出。
- `requirements-quant.txt`：离线研究环境依赖；Streamlit 运行时不强制安装 Qlib。
- `/api/quant/recommendations/latest`、`/api/quant/validation`、`/api/quant/status`：统一量化接口。

首次构建可先用抽样数据验证环境，再执行全市场训练：

```bash
python scripts/quant_pipeline.py --stage all --max-symbols 100 --max-per-date 100
python scripts/quant_pipeline.py --stage all --max-per-date 600
```

日常行情文件更新后只刷新数据、因子和正式名单，不重复训练模型：

```bash
python scripts/quant_pipeline.py --stage refresh --top 20
```

正式上线前可回溯最近 22 个交易日并生成逐日 T+5/T+20 Top20；回溯模型固定在窗口开始前训练，避免未来数据泄漏：

```bash
python scripts/quant_pipeline.py --stage promote --backfill-days 22 --top 20
```

全市场数据和新鲜度检查仍是正式名单的硬门槛。近期回溯为负时名单继续展示，但自动标记为“风险降级”，验证页同步展示失效证据。

导出自有 Tushare 数据供 Qlib 研究环境使用：

```bash
python scripts/quant_pipeline.py --stage qlib
```

再使用 Qlib 官方 `dump_bin.py` 将 `data/quant/qlib_export/csv` 转为二进制 provider，随后运行：

```bash
python scripts/run_qlib_research.py --provider-uri /path/to/qlib_data/cn_data --horizon 5
python scripts/run_qlib_research.py --provider-uri /path/to/qlib_data/cn_data --horizon 20
```

Qlib 负责离线实验记录、信号分析和模型对照；每日网站继续读取轻量的统一推荐文件，不依赖 Qlib 服务常驻。

财务数据必须包含真实公告日 `ann_date` 或 `f_ann_date`；缺少公告日的数据会被拒绝进入历史回测，避免使用未来信息。

## 当前策略版本

当前版本为 `CN-V2-short-reversal`，定位为 **T+1～T+5 短线超跌反弹候选**：

- CD 固定奖励由 V1 的 `0.30` 降为 `0.08`
- 资金/时点共振、趋势确认分别加分
- 高回撤且趋势下行时强制降为“观察”
- 输出 A/B/C/观察等级、风险等级和失效条件
- 历史统计按独立机会事件去重，并显示各周期可计算样本数
- V1 历史业绩不会被标记成 V2 业绩；V2 从启用日起单独积累

本地版本标签：

```text
v1-baseline  V2 修改前的完整基线
v2-short-reversal  V2 短线反弹策略与看板
```

查看版本差异：

```bash
git diff v1-baseline..v2-short-reversal
```

安全回退建议先创建回退分支，不覆盖当前工作：

```bash
git switch -c rollback-v1 v1-baseline
```

历史跟踪数据在本地计算后发布到云端：

```bash
python3 scripts/export_recommendation_performance.py
```

把现有每日邮件推荐结果沉淀成本地文件，并用 Streamlit 打开一个可筛选、可看图的网页。当前版本已经按 `GitHub Private + Streamlit Community Cloud` 的上线方式整理过仓库结构，适合先做一个稳定的 MVP 云端只读看板。

## 运行方式

```bash
python3 -m pip install -r requirements.txt
python3 scripts/generate_latest_cn_signals.py --target-date 2026-06-14
streamlit run app.py
```

如果只想把已有 `signals.json` 转成 Dashboard 标准文件，也可以单独执行：

```bash
python3 scripts/export_daily_report.py
```

打开页面后可以看到：

- 今日市场总览
- 推荐股票列表与筛选
- 个股详情
- K线、成交量、INST / big_money 曲线、CD 信号点
- 筹码分布：优先展示 Tushare `cyq_chips` 真实筹码明细，缺失时回退近似筹码峰
- 数据状态检查
- 历史表现页：T+1 / T+3 / T+5 / T+10 / T+20 前瞻收益、胜率、分组表现
- 历史推荐文件列表
- 推荐后收益跟踪的预留模块
- A股大盘见顶风险仪表盘：分别展示整体市场与科技主线风险、市场宽度、科技成交拥挤度及数据覆盖状态

见顶风险快照可单独生成：

```bash
python3 scripts/generate_market_top_risk.py
```

`run_dashboard_update_cn.sh` 会在每日 Dashboard 更新时自动刷新该快照。当前核心版使用本地全市场行情和
Tushare `daily_basic`；尚未接入的两融、新开户、基金/IPO及美股半导体指标会显示为“待接入”，不会按零分计入风险分。

## 仓库提交约定

为了兼容 GitHub 和 Streamlit Cloud，当前仓库建议只提交轻量运行必需文件：

- `app.py`
- `requirements.txt`
- `src/`
- `scripts/`
- `data/processed/recommend_YYYYMMDD.csv`
- `data/processed/recommend_YYYYMMDD.json`
- `data/lightweight/daily/*.csv`

以下内容不建议提交：

- `.env`
- `.streamlit/secrets.toml`
- `data/daily/`
- `data/weekly/`
- `data/monthly/`
- `backend/data/cache/`
- 个人日志、缓存、回测中间产物

## 数据约定

Dashboard 优先读取：

```text
data/processed/recommend_YYYYMMDD.csv
data/processed/recommend_YYYYMMDD.json
```

如果没有标准文件，会回退读取坚果云里的 `TradingSignals/signals.json`；再没有则尝试读取本项目已有的回测交易文件作为展示数据。

在 Streamlit Cloud 这类云环境里，通常只有仓库里的 `data/processed/recommend_*.csv/json`。如果没有坚果云路径、也没有全量本地行情缓存，页面会友好降级：

- 推荐列表仍可显示已提交的推荐产物
- `latest_price`、`volume`、历史收益等缺失字段显示为“待接入”
- 个股详情图表如果缺少本地行情文件，会显示提示而不是报错

如果希望云端也能展示个股 K 线、成交量、CD / INST 等图表，可以额外提交一份轻量历史行情样本：

```text
data/lightweight/daily/<ts_code>.csv
```

这类样本只保留当前推荐股票最近约 240 个交易日的必要字段，适合云端图表展示，不需要把整套 `data/daily/` 上传到仓库。

标准推荐文件会补齐以下价格字段：

- `recommend_price`：信号日期对应的最近交易日收盘价
- `latest_price`：本地行情中的最近交易日收盘价
- `close`：行情表原始收盘价，当前版本等同最近交易日收盘价

页面顶部日期字段分别表示：

- 信号日期
- 行情数据截止日期
- 报告生成时间

历史表现页读取 `data/processed/recommend_*.csv`，结合 `data/daily/*.csv` 计算：

- `return_t1`
- `return_t3`
- `return_t5`
- `return_t10`
- `return_t20`
- `hit_t5`
- `hit_t10`
- `hit_t20`
- `max_drawdown_after_signal_20d`

如果行情数据不足，记录状态会显示为 `pending`，页面不会报错。

## 筹码分布

个股详情页已接入筹码分布模块。当前版本优先调用 Tushare `cyq_chips` 获取 A 股真实筹码明细：

- 每个价格档的筹码占比
- 当前价、平均成本、成本中位数
- 获利筹码占比
- 70%/90% 成本区间

如果 Tushare 暂无当日数据、非 A 股、云端未配置 token，或接口调用失败，页面会自动回退到本地轻量近似模型。近似模型基于本地或云端轻量行情里的最近交易日 OHLCV 数据估算：

- 每日成交量按当日高低价区间分摊
- 较早成交量按时间衰减

页面会在说明文字里标注当前展示的是 `Tushare cyq_chips` 真实筹码分布，还是近似回退结果。

## Tushare Token

真实 token 只放在本机 `.env`：

```text
TUSHARE_TOKEN=
TS_TOKEN=
```

`.env` 已被忽略，不要把真实 token 写入源码、README 或 `.env.example`。

部署到 Streamlit Community Cloud 时，不要上传 `.env`。请在应用后台的 `Secrets` 里配置：

```toml
TUSHARE_TOKEN="你的真实 token"
TS_TOKEN="你的真实 token"
```

说明：

- `TUSHARE_TOKEN` 是当前推荐使用的变量名
- `TS_TOKEN` 只是为了兼容旧代码，可以不填第二个，但填上最省心

## 部署到 GitHub Private + Streamlit Community Cloud

### 基础上线要求（必须同时完成）

每次发布都必须同步上线两个目标，缺少任意一个都不算发布完成：

1. 原 Streamlit 站：将主看板代码与轻量数据推送到 `daily-stock-signal-dashboard` 的 `main` 分支，确认 `https://stock808.streamlit.app/` 已更新。
2. Sites 镜像站：同步 `dashboard_live.json`、`market_top_risk.json`、`sector_etf_scores.json` 到 `public-site/public/data/`，完成构建并发布新的 Sites 版本。

发布后必须分别检查两个线上地址；不能以其中一个成功代替另一个。

### 1. 本地初始化 git

当前项目已经适配好 `.gitignore`，会自动排除 `.env` 和大行情缓存。首次初始化可以直接执行：

```bash
git init
git add .
git commit -m "Prepare Streamlit dashboard for cloud deployment"
```

### 2. 推送到 GitHub 私有仓库

在 GitHub 创建一个 `Private` 仓库后，把远端地址替换成你的仓库：

```bash
git remote add origin git@github.com:<your-account>/<your-repo>.git
git branch -M main
git push -u origin main
```

也可以改用 HTTPS 远端：

```bash
git remote add origin https://github.com/<your-account>/<your-repo>.git
git branch -M main
git push -u origin main
```

### 3. 在 Streamlit Community Cloud 创建应用

在 Streamlit Community Cloud 控制台中：

1. 连接 GitHub 账号
2. 选择刚创建的私有仓库
3. 选择分支 `main`
4. Main file path 填 `app.py`
5. 在 `Secrets` 中填入 `TUSHARE_TOKEN`，可选再填 `TS_TOKEN`
6. 点击部署

### 4. 线上数据更新方式

第一版默认采用手动更新方案，不在这一步引入定时任务：

1. 本地更新行情数据
2. 本地重新生成 `data/processed/recommend_YYYYMMDD.csv/json`
3. 如需云端图表，同时执行 `python3 scripts/export_lightweight_price_samples.py`
4. 提交并推送这些轻量产物到 GitHub
5. Streamlit Cloud 会自动重新部署

这种方式的优点是简单、稳定、容易排查。等 MVP 跑稳后，再考虑加自动调度。

## 本地验证

建议在推送前至少跑这几步：

```bash
python3 -m py_compile app.py src/services/report_service.py src/services/performance_service.py
python3 scripts/generate_latest_cn_signals.py --target-date 2026-06-14
python3 scripts/export_lightweight_price_samples.py
streamlit run app.py
```

重点检查：

- 页面顶部日期是否清晰
- 今日信号页是否正常
- 历史表现页是否能打开
- 无本地行情时是否降级为友好提示
- 页面不暴露完整本地路径

## 风险提示

本项目仅用于个人研究和复盘，不构成任何投资建议。
