trading: 日内T/长桥/六合彩文档与脚本 + quant-factor-mining 新目录

This commit is contained in:
2026-09-25 01:25:38 +08:00
parent 734b168082
commit 3f17a4eb1f
23 changed files with 1821 additions and 376 deletions
@@ -0,0 +1,137 @@
# 候选数稀疏诊断 + 实装 fix (2026-08-20 v1.4.0)
## 触发
`lottery_特码_cron.sh` cron 推送出现以下信号:
- "🏆 特码候选" 表只有 2-3 行(而非 5 行)
- 用户问 "号码就这么两个吗?" / "候选号能不能多几个?"
## 用户偏好(2026-08-20 实锤)
用户原话: **"可以 4-5 个号合适"**
之前 (2026-08-20 上午) skill 建议是"尊重数据稀疏,不要硬凑"。用户直接说不要这个, 要 4-5 个号。**实装 flip**:
| 旧哲学 (尊重数据) | 新哲学 (v1.4.0 实装, 用户向) |
|---|---|
| 推送末尾加"⚠️ 今天稀疏" | 直接补到 5 个, 末尾标"兜底占位" |
| 不动 most_common(8) | 显式补足 `top.append((n, 0))` |
| 不解码 火烧/六肖 | 解码本年生肖号, +1/+2 |
**不要重新回去 "尊重数据" 那套** — 用户否决过。
## 根因(参考, 已不再是阻断)
`get_te_ma_candidates()` 用 `weights = Counter()`, 最终候选数 = Counter 实际条数, 由 sol.2344a.cc 挂牌页决定:
| 字段 | 权重 | 命中率 |
|---|---|---|
| `正版彩图挂` (彩图挂直接给号) | +5 | ~50% (常只有 1-2 个号) |
| `另版挂` | +3 | ~30% |
| `尾数 X尾` | +2 (本) / +1 (+10/+20/+30) | ~70% |
| `六肖 / 出肖 / 火烧` | **v1.4.0 起解码本年生肖号 (+1 / +2)** | 100% |
| 玄机诗诗象 `(NN)` | +3 | ~60% |
| 三一玄数 | +2 (硬编码 3/1/13/31) | 100% |
| 六信红字 "大数偏多" | +1 (25-49 全加) | 100% |
**常见稀疏组合**: 当天挂牌帖只发了 `正版彩图挂 = 2, 9` 两个号 → weights = {2:5, 9:5} → 2 个候选。
## 实装的 fix (3 改动一起)
### 1. 挂牌页抓取放宽
`lottery_特码.py::get_te_ma_candidates()` 第 198 行:
```python
# ❌ 旧
gua_links = re.findall(...)[:3]
# ✅ 新 (v1.4.0)
gua_links = re.findall(...)[:8]
```
多抓几页挂牌, 挂牌稀疏时也有足够数据源。
### 2. 火烧/六肖 解码本年生肖号
之前 `火烧` / `六肖` / `出肖` 字段**只记录不直接给号**。现在加生肖→本数映射:
```python
SX_TO_BENSHENG = {
'鼠': 23, '牛': 22, '虎': 21, '兔': 20, '龙': 19, '蛇': 18,
'马': 17, '羊': 16, '猴': 15, '鸡': 14, '狗': 13, '猪': 12,
}
# 火烧 命中某生肖 → 该号 +2 (本年生肖权重高)
# 六肖/出肖 每命中一个生肖 → 该号 +1
```
**示例**: 091 期挂牌 `火烧=鸡` → 加 14 (+2 权重); `六肖=兔狗龙鼠牛蛇` → 加 20, 19, 22 (各 +1)。
### 3. format_te_ma_result 兜底
候选数 < 4 时, `weights.most_common(8)` + 显式补足到 5 个:
```python
top = weights.most_common(8)
if len(top) < 4:
need = 5 - len(top)
existing = {n for n, _ in top}
for n in range(1, 50):
if n not in existing:
top.append((n, 0)) # 权重 0 = 占位, 排最后
existing.add(n)
if len(top) >= 5:
break
```
**关键**: `most_common()` 不返回权重 0 的号, 必须用 `top.append((n, 0))` 显式扩展。
来源标记也得变 — `get_src(num, w)` 在 `w == 0` 时返回 `"兜底占位 (挂牌稀疏)"`, 不再是 fallback `"其他挂牌提示"`。
## 验证 (2026-08-20 Nq=091 期)
跑 `bash ~/.hermes/scripts/lottery_特码_cron.sh` 输出 8 候选, 重点分配 5 个 ¥15=5/4/3/2/1:
| 排序 | 特码 | 权重 | 来源 |
|---|---|---|---|
| 🥇 | 35 | 4 | 挂牌 另版挂 (35) + 挂牌 尾数 5尾 (+30) |
| 🥈 | 2 | 2 | 挂牌 尾数 2尾 (本) |
| 🥉 | 22 | 2 | 挂牌 尾数 2尾 (+20) + 挂牌 六肖 牛=22 |
| 4 | 5 | 2 | 挂牌 尾数 5尾 (本) |
| 5 | 14 | 2 | 挂牌 火烧 鸡=14 (本年生肖) |
| 6 | 12 | 1 | 挂牌 尾数 2尾 (+10) |
| 7 | 32 | 1 | 挂牌 尾数 2尾 (+30) |
| 8 | 15 | 1 | 挂牌 尾数 5尾 (+10) |
## 配套 wrapper 修复: cron Qi→Nq 二次修正
`lottery_特码_cron.sh` 第 9-19 行之前取 Qi (已开期), cron 推的是已开期 (无前瞻意义)。**这次硬规则**: `d['Nq']` + fallback `'088'`。
```bash
# ❌ 旧
QI=$(... d['Qi'] ...)
# ✅ 新 (v1.4.0)
TARGET=$(... d['Nq'] ...)
```
**改这两文件后必须 grep "Qi" 确认 runtime 路径全用 Nq**。
## 配套 cron schedule 修复: verify_lottery 14:30→22:30
`668dcf3ec54d lottery-draw-result` 之前 `schedule=30 14 * * 0,2,4` (= 北京 22:00, **开彩前 30 分钟**), v_xg.json 还停在 Qi=089, 无 090 期数据 → verify 报"未找到分析文件"。**改 `30 22 * * 0,2,4`** (北京 22:30, 开彩后 1 小时), 等 v_xg.json 更新到 Qi 后再跑。
## 回退条件
如果用户明确说 "不要兜底, 太离谱了" / "不要解码生肖, 玄学污染":
- 删除 `format_te_ma_result` 里的 `if len(top) < 4` 块
- 保留 (1) 挂牌抓 3→8 + (2) 火烧/六肖 解码本年生肖号
- 保留 (3) cron wrapper Qi→Nq + verify schedule 修正 (这两个跟候选数无关)
## 跟单场景的类比
**`okx-auto-position`** 信号源缺失闸 (2026-08-18 v4.5.53) 是同种"数据告诉你没有就跳过"模式:
- trader='未知' → 跳过,推"信号源未知", **不要硬凑 trader**
**两个 skill 区别**:
- lottery 候选: 用户明确要"补到 4-5 个号" → 兜底 ✅
- okx 跟单 trader: 数据告诉你没有 trader → 跳过 ✅
判断标准:**用户原话**, 不是哲学一致性。