Skill: zhuce1ge/lottery-helper (version 1.0.1)

--- name: lottery-helper description: 彩票开奖查询与推荐助手。查询双色球、大乐透、排列三、排列五、福彩3D、北京快乐8、七乐彩、七星彩的开奖信息，支持最新一期、指定期数或时间段查询；自动将结果导出为 txt/md/xlsx/sqlite；根据历史数据生成推荐号码组合并说明计算依据。触发词：彩票、开奖、查彩、双色球、大乐透、排列三、推荐号码、彩票数据。 --- # 彩票助手 (lottery-helper) ## 支持的彩种 | 彩种 | 代码 | 规则 | |------|------|------| | 双色球 | ssq | 33选6 + 16选1（蓝球） | | 大乐透 | dlt | 35选5（前区） + 12选2（后区） | | 排列三 | pl3 | 10选3（百十个） | | 排列五 | pl5 | 10选5（万千百十个） | | 福彩3D | 3d | 10选3（百十个） | | 北京快乐8 | kl8 | 80选20 | | 七乐彩 | qlc | 30选7（基本号） + 1（特别码） | | 七星彩 | qxc | 10选7（7位） | > ⚠️ 彩票为物理独立随机事件，历史结果不影响未来开奖，推荐仅供娱乐。 ## 核心脚本 ``` scripts/query.py - 查询开奖数据（17500.cn） scripts/export.py - 导出为 txt/md/xlsx/sqlite scripts/recommend.py - 生成推荐号码（含计算依据） ``` ## 标准工作流 ### Step 1：询问查询意图 主动询问： 1. **查询哪些彩种**（可多选） 2. **查询范围**：最近一期 / 最近N期 / 指定日期范围 3. **导出格式**：直接返回 / txt / md / xlsx / sqlite ### Step 2：执行查询 ```python import sys sys.path.insert(0, "<skill目录>/scripts") import query res = query.get_latest({"双色球": 10, "大乐透": 5}) for name, records in res.items(): for rec in records: print(f"[{name}] {rec['formatted']}") ``` ### Step 3：导出（如用户需要） ```python import export # 注意：get_latest() 返回的 key 是中文名，直接传给 export 函数 export.export_txt(res, "输出路径.txt") export.export_md(res, "输出路径.md") export.export_xlsx(res, "输出路径.xlsx") export.export_sqlite(res, "输出路径.db") ``` ### Step 4：询问是否需要推荐 查询结果返回后，**必须**主动询问： > "要不要给你推荐一组号码？" 等待用户确认后再进入推荐流程。 ### Step 5：判断推荐范围 #### 第一步：识别最近的连续彩种查询 "连续"指的是：用户发出查询意图后紧跟着执行查询，两者之间没有其他非查询消息。只看实际执行过 `query.py` 后的彩种，**不**看推荐意图本身。 #### 第二步：三种情况 | 情况 | 行为 | |------|------| | 刚查过 **1 个**彩种 | 直接推荐该彩种 | | 刚查过 **2 个及以上**彩种 | 这几个都推荐 | | **无**连续查询记录 | 列出全部 8 个彩种，让用户选择 | #### 第三步：识别失败时的兜底规则 如果 AI 无法确定最近一次查询的彩种（比如是新会话/历史丢失），**不得随意默认**，必须列出全部 8 个彩种请用户选择： > "请问您想推荐哪种彩票？支持：双色球 / 大乐透 / 排列三 / 排列五 / 福彩3D / 北京快乐8 / 七乐彩 / 七星彩" #### 第三步：执行推荐 ```powershell cd <skill目录>/scripts # ⚠️ PowerShell 注意：--codes 参数必须用引号包裹，否则 3d 会被解析为数字 python recommend.py --codes "<代码>" # 推荐（无回测，约几秒） ``` | 参数 | 说明 | |------|------| | `--codes` | 彩种代码，逗号分隔，**必填**（PowerShell 下必须加引号） | | `--backtest` | 启用回测（约1~2分钟，默认关闭） | | `--recent` | 回测期数（默认200，仅在 --backtest 时生效） | > **PowerShell 陷阱**：`3d` 会被解析为 `[decimal]3`。务必使用 `--codes "ssq,dlt,3d"` 而非 `--codes ssq,dlt,3d`。 ### Step 6：询问是否需要回测 推荐返回后，主动询问： > "需要我跑一下历史回测吗？会验证这个策略在最近 ~200 期的命中率，但需要约 1~2 分钟。" - **同意**：追加 `--backtest` 重新执行 - **拒绝**：结束 #### 算法核心（多因子蒙特卡洛混合策略） 1. **频率统计**：全量历史 + 近100期，分别统计各号码出现频次 2. **热冷温分类**：高频35%=热号、中频35%=温号、低频30%=冷号 3. **蒙特卡洛采样**：每期生成3万组候选组合，按均衡约束过滤 4. **均衡约束**：奇偶比接近1:1、大小号均衡、和值在合理区间 5. **组合打分**：综合频率 + 位置合规 + 奇偶平衡 + 和值接近度 6. **多样性**：输出最优组合 + 2个备选 ### Step 7：返回结果 - 推荐结果包含号码分析（热/温/冷、历史出现率、备选组合） - 必须包含免责声明段落 - 提醒：理性购彩，量力而行 ## 数据接口 详见 `references/apis.md`（数据源：`https://data.17500.cn/{code}_{asc|desc}.txt`） ## 中奖率详细数据 详见 `references/odds.md` ## 注意事项 - 查询接口每分钟可请求多次，无需额外限速 - 快乐8 每期 20 个号码，xlsx 字段较多 - 推荐算法仅供参考，不代表任何中奖承诺 ## PowerShell 特殊说明 **必须加引号**：在 PowerShell 中执行 `recommend.py` 时，`--codes` 参数的值必须用双引号包裹： ```powershell # ❌ 错误：3d 会被解析为 [decimal]3，变成 "3" python recommend.py --codes ssq,dlt,3d # ✅ 正确：完整保留字符串 python recommend.py --codes "ssq,dlt,3d" ``` 原因：PowerShell 的 `d` 是 decimal 类型后缀，`3d` = `[decimal]3`。引号内按字符串原样传递。

path: references/apis.md
content: # 彩票数据接口（17500.cn）

## URL 总览

所有接口：`https://data.17500.cn/{code}_{asc|desc}.txt`
- `_desc.txt` = 最新在前
- `_asc.txt` = 历史升序

| 彩种 | 代码 | URL |
|------|------|-----|
| 双色球 | ssq | https://data.17500.cn/ssq_{asc\|desc}.txt |
| 大乐透 | dlt | https://data.17500.cn/dlt_{asc\|desc}.txt |
| 排列三 | pl3 | https://data.17500.cn/pl3_{asc\|desc}.txt |
| 排列五 | pl5 | https://data.17500.cn/pl5_{asc\|desc}.txt |
| 福彩3D | fc3d | https://data.17500.cn/3d_{asc\|desc}.txt |
| 北京快乐8 | kl8 | https://data.17500.cn/kl8_{asc\|desc}.txt |
| 七乐彩 | qlc | https://data.17500.cn/7lc_{asc\|desc}.txt |
| 七星彩 | qxc | https://data.17500.cn/7xc_{asc\|desc}.txt |

## 数据格式

### 双色球（ssq）
```
期号 日期 红1 红2 红3 红4 红5 红6 蓝球 出球顺序(6红+1蓝) 投注总额 奖池金额 [各奖级...]
```
示例：`2026039 2026-04-09 08 17 18 21 25 30 05 18 21 25 17 08 30 393444014 1934981238 ...`

### 大乐透（dlt）
```
期号 日期 前区1-5 后区1-2 前区出球顺序 后区出球顺序 投注总额 奖池金额 [各奖级...]
```
示例：`26038 2026-04-11 08 17 21 33 35 06 07 21 17 35 33 08 06 07 343632778 ...`

### 排列三/3D（pl3 / fc3d）
```
期号 日期 百 十 个 投注总额 直选注数 直选金额 组三注数 组三金额 组六注数 组六金额
```
### 排列五（pl5）
```
期号 日期 万 千 百 十 个 投注总额 直选注数 直选金额
```

### 北京快乐8（kl8）
```
期号 日期 号码1-20 投注总额 奖池金额 [各奖级...]
```
每期从 01-80 中开 20 个号码。

### 七乐彩（qlc）
```
期号 日期 基本号1-7 特别码 投注总额 [一等奖...各等奖]
```
从 01-30 中开 7 个基本号 + 1 个特别码。

### 七星彩（qxc）
```
期号 日期 位1-7 投注总额 奖池金额 [各等奖...]
```
从 0-9 中选 7 位。

## 查询示例

```python
import urllib.request

def fetch_latest(code, n=1):
    url = f"https://data.17500.cn/{code}_desc.txt"
    req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
    with urllib.request.urlopen(req, timeout=15) as r:
        return r.read().decode("utf-8").strip().split("\n")[:n]
```

```python
def fetch_range(code, start_date, end_date):
    url = f"https://data.17500.cn/{code}_asc.txt"
    req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
    with urllib.request.urlopen(req, timeout=15) as r:
        lines = r.read().decode("utf-8").strip().split("\n")
    return [l for l in lines if start_date <= l.split()[1] <= end_date]
```


path: references/odds.md
content: # 彩票一等奖中奖率

> 数据截至 2026 年 4 月，基于各彩种官方规则计算。

## 一等奖中奖率

| 彩种 | 一等奖概率 |
|------|-----------|
| 排列三/3D 直选 | 1/1,000 ≈ 0.1% |
| 排列五 | 1/100,000 = 0.001% |
| 七星彩 | 1/10,000,000 = 0.00001% |
| 七乐彩 | 1/2,035,800 ≈ 0.000049% |
| 双色球 | 1/17,721,088 ≈ 0.0000056% |
| 大乐透 | 1/21,425,712 ≈ 0.0000047% |
| 北京快乐8 | 1/C(80,20) ≈ 2.8×10⁻¹⁹ % |

## 详细概率

### 双色球
一等奖 = C(33,6) × C(16,1) = 17,721,088 → 约 1/17,721,088

### 大乐透
一等奖 = C(35,5) × C(12,2) = 21,425,712 → 约 1/21,425,712

### 排列三/3D
直选：10³ = 1,000 → 1/1,000（组三/组六概率更高）

### 七乐彩
一等奖 = C(30,7) = 2,035,800 → 约 1/2,035,800

### 七星彩
一等奖 = 10⁷ = 10,000,000 → 1/10,000,000

### 北京快乐8（选20）
一等奖 = C(80,20) ≈ 3.5×10¹⁸ → 约 1/3.5×10¹⁸

## 重要提醒

- **彩票开奖在物理上是独立随机事件**，历史开奖结果不影响未来开奖
- 任何"选号策略"均无法改变数学上的中奖概率
- 推荐号码仅供娱乐，不作为购彩建议


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)