MoFin 初始提交

完整数据采集+分析管道:
- market_watch.py:90行业板块采集(同花顺/东方财富)
- 市场精选推荐 cron:全市场分析+候选池+星级推荐
- price_monitor.py:持仓/自选高频价格监控
- refresh_mtf_cache.py:多周期K线缓存
- 策略评估/知识萃取管道

文档:docs/ 含完整需求+架构设计
注意:尚未配置 git remote,笑笑接手后自行配置
This commit is contained in:
知微 (MoFin)
2026-06-20 12:04:21 +08:00
commit aa0f740381
950 changed files with 189006 additions and 0 deletions
+187
View File
@@ -0,0 +1,187 @@
# 全市场潜力股挖掘系统设计
## 目标
打破持仓和自选的局限,从全 A 股市场挖掘新投资标的,附带入场策略和动态星级评分。
## 整体架构(两层式)
```
市场数据(market.json)
│ 每30分更新
┌──────────────────────────────────────┐
│ 第一层:小果本地LLM · 高频低耗 │
│ │
│ 每轮1-2个板块,积少成多覆盖全市场 │
│ → 分析板块趋势 │
│ → 筛选成分股 │
│ → 给出初步评分+策略 │
│ → 写入候选池(candidate_pool.json) │
└──────────────────┬───────────────────┘
┌──────────────────────────────────────┐
│ 第二层:知微(主模型)· 低频高质 │
│ │
│ 每日收盘后 │
│ → 读候选池 │
│ → 用技术分析+策略引擎验证 │
│ → 确认星级(5/4.5/4/3.5/3) │
│ → 输出最终推荐+推送 │
│ → 已推荐的标记 promoted │
└──────────────────────────────────────┘
```
## 候选池设计
### candidate_pool.json 结构
```json
{
"last_updated": "2026-06-19 15:30",
"total_candidates": 12,
"sectors_analyzed_today": ["半导体", "消费电子", "汽车零部件"],
"candidates": [
{
"code": "600000",
"name": "XX股份",
"sector": "半导体",
"added_at": "2026-06-19 10:30",
"last_updated": "2026-06-19 15:30",
"num_observations": 3,
"xiaoguo_score": 8.2,
"xiaoguo_reason": "放量突破前高,板块龙头",
"xiaoguo_strategy": {
"entry_range": "18.5~19.2",
"stop_loss": "17.5",
"target": "22.0"
},
"score_history": [
{"date": "2026-06-19 10:30", "score": 7.5},
{"date": "2026-06-19 11:00", "score": 8.0},
{"date": "2026-06-19 15:30", "score": 8.2}
],
"zhiwei_star": null,
"zhiwei_reviewed": false,
"zhiwei_reviewed_at": null,
"promoted": false,
"promoted_at": null,
"dropped": false,
"drop_reason": null
}
]
}
```
### 候选池治理规则
- 评分历程 >= 3 次且均分 < 5 → 自动淘汰
- 连续 3 次评分下降 → 标记预警,下轮淘汰
- 超过 7 天未评分 → 标记过期待重评
- 已 promoted(确认推荐)→ 保留供回顾,不重复推
## 第一层:小果筛选(no_agent 脚本)
### 文件:market_screener.py
**触发频率:** 每 60 分钟(跟随 market_watch 节奏,间隔一次执行)
**每轮流程:**
1. 读 market.json → 取行业板块涨幅排名
2. 选择本轮分析的板块:
- 优先级:涨幅前 10 中「累计分析次数最少」的板块
- 确保一周内覆盖所有活跃板块
- 每轮分析 2 个板块
3. 对每个板块:
a. `ak.stock_board_industry_cons_ths()` → 取成分股
b. 基础过滤:涨幅 > 0、价格 3~100 元、有成交量
c. 取前 5~8 只候选
d. 调小果 LLM API 分析 → 返回评分+策略
4. 更新 candidate_pool.json(新增候选 + 刷新已有候选的评分)
**小果 LLM Prompt**
```
你是一位A股市场分析助手。分析以下板块和个股,筛选潜力候选股。
板块:{sector_name}
板块涨幅:{change}%
上涨/总家数:{up_count}/{total_count}
资金净流入:{net_inflow}亿
领涨股:{lead_stock} +{lead_stock_change}%
成分股(涨幅前8):
代码 | 名称 | 现价 | 涨跌幅 | 换手率
{a} | {b} | {c} | {d} | {e}
判断标准:
1. 板块是真强势还是短期反弹?看量价配合和领涨股持续性
2. 个股:量价配合好、趋势健康、不是单纯跟涨
3. 给出 1-10 分(7分以上才值得关注)
输出JSON
{
"sector_judgment": "强势|中性|弱势",
"sector_reason": "一句话理由",
"candidates": [
{
"code": "600xxx",
"name": "名称",
"score": 8.5,
"reason": "选股理由含技术面特征",
"entry_range": "18.5~19.2",
"stop_loss": "17.5",
"target": "22.0"
}
]
}
```
**代码注意事项:**
- 小果 API 调用超时设 120s(27B 模型较慢)
- 调用失败时跳过该板块,下次重试
- 输出只写文件,不输出到 stdout(no_agent 静默模式)
## 第二层:知微精选(LLM cron)
**触发时间:** 每日 16:00(收盘后)
**流程:**
1. 读 candidate_pool.json → 取未 reviewed 且评分 >= 7 的候选
2. 对每个候选用我的技术分析工具验证
3. 综合打分 → 星级(5/4.5/4/3.5/3
4. 输出最终 2-3 只推荐(含完整策略)
5. 写入 market.json 的 potential_stocks 字段
6. 标记 promoted
**星级标准:**
- 5.0:强趋势+板块强势+技术面完美+入场时机佳
- 4.5:趋势健康+板块向好+技术面良好+有安全边际
- 4.0:板块和个股都OK,但缺明确催化剂
- 3.5:有逻辑但需要等待更好入场点
- 3.0以下:不推荐
## 时序与 cron 设计
| 时间 | 组件 | 类型 | 频率 | 说明 |
|------|------|------|------|------|
| 9:00~15:30 | market_watch | no_agent | 每30分 | 已有,采集板块数据 |
| 9:30~15:30 | market_screener | no_agent | 每60分 | 新脚本,小果筛股 |
| 16:00 | 市场精选推荐 | LLM | 每日 | 新cron,我出最终推荐 |
## 文件清单
| 文件 | 类型 | 说明 |
|------|------|------|
| /home/hmo/web-dashboard/market_screener.py | 新脚本 | 小果筛选引擎 |
| /home/hmo/web-dashboard/data/candidate_pool.json | 新数据 | 候选池 |
| /home/hmo/web-dashboard/market_insight.py | 废弃 | 被替换 |
| /home/hmo/web-dashboard/inject_xiaoguo_insight.py | 保留 | 仍需要注入情感到market.json |
## 关联修改
1. market_insight.py 停用(cron 改为新脚本)
2. 新 cron job:市场精选推荐(LLM16:00
3. 小果筛选 cronmarket_screener.pyno_agent,每60分)