SSQ 高频红球统计工具 - 技术文档
技术架构
1. 核心模块
| 模块名称 | 主要功能 | 文件位置 | 技术实现 |
|---|---|---|---|
| 数据获取模块 | 从网络拉取开奖数据 | data_fetcher.py | requests 库,支持重试和编码自动检测 |
| 数据管理模块 | 本地 CSV 读写与校验 | data_manager.py | pandas 库,数据处理和存储 |
| 红球统计模块 | 频率统计、连号分析、回测 | red_ball_stats.py | pandas + numpy,统计分析 |
| 注册管理模块 | 试用期和授权管理 | registration/ | RSA 加密,硬件 ID 生成 |
| GUI 界面模块 | 用户界面和交互 | main.py | Tkinter,7 个选项卡 |
| 数据导出模块 | 导出 Excel/CSV | excel_exporter.py | openpyxl / pandas |
2. 数据流
网络数据源 ([数据源地址已隐藏])
│
▼
DataFetcher ──拉取+解析──▶ DataManager ──存储──▶ data/ssq_data.csv
│
▼
RedBallStats (统计分析)
│
┌───────────────────────┼───────────────────────┐
▼ ▼ ▼
频率统计 连号分析 回测引擎
(功能页1-4) (功能页5-6) (功能页7)
│ │ │
└───────────────────────┼───────────────────────┘
▼
GUI 界面展示 (main.py)
技术实现细节
1. 数据获取
- 数据源:`[数据源地址已隐藏]
- 重试机制:最多重试 3 次,每次间隔 2 秒
- 编码检测:自动检测 UTF-8/GBK 编码
- 数据解析:按固定格式解析开奖数据(期号、日期、红1-红6、蓝球)
- 缓存机制:保存到
data/ssq_data.csv,网络不可用时使用缓存
2. 红球频率统计
核心函数:calc_red_frequency(df) → 返回 DataFrame[排名, 号码, 出现次数, 出现频率(%)]
- 遍历 6 列红球数据,统计 1-33 每个号码的出现次数
- 按出现次数降序排列(使用
kind='stable'保证同频号码按号码升序排列) - TOP20 高频红球提取:
get_top20_high_freq_reds(df)
3. 连号统计分析(功能页 5)
核心函数:
extract_consecutive_segments(numbers, consecutive_type)— 从已排序号码列表中提取指定长度的连续号码段- 例如
[1,2,3,4,8,9,10],3 连号 →[[1,2,3], [2,3,4], [8,9,10]] - 4 连号 →
[[1,2,3,4]] calc_consecutive_stats(df)— 统计 3/4/5/6 连号的出现期数和占比calc_draw_consecutive_info(df)— 为每期标注连号类型和详情find_consecutive_groups_in_top(top20, n_type)— 从 TOP20 热码中找出 N 连号组
4. 组合条件智能推荐(功能页 6)
核心函数:generate_consecutive_recommendations(...)
算法流程:
- 获取当前 TOP20 热码
- 从 TOP20 中提取指定类型(3/4/5/6)的所有连号组
- 以每个连号组为基础,从热码中随机选取补充号码至 6 个红球
- 确保热码数量在用户设定范围内(min-max)
- 为每个组合自动附加蓝球(从最近 100 期蓝球 TOP10 随机选择)
- 去重、排序、输出
5. 连号回测分析(功能页 7)
5.1 回测原理
对每一期开奖 i(i >= min_past_periods),使用第 0 ~ i-1 期作为历史数据:
- 分别用不同期数范围(全部期数 / 最近 200 / 100 / 50 / 自定义)计算 TOP20 热码
- 从 TOP20 中提取 N 连号组(N = 3/4/5/6)
- 提取第 i 期实际开奖中的 N 连号段
- 检查实际连号段是否出现在 TOP20 的 N 连号组中
- 统计命中率 = 命中次数 / 实际出现次数
5.2 性能优化:增量更新算法
问题:原始实现每期都重新遍历前 i 期全部数据计算频率,复杂度 O(n²),500 期数据需 70 秒。
解决方案:_RollingFreqCounter 滚动窗口频率计数器
class _RollingFreqCounter:
"""增量更新频率计数器"""
def __init__(self, window_size):
self.counts = np.zeros(34, dtype=np.int64) # 索引1-33
self._queue = [] # 滑动窗口数据
def add_period(self, reds):
# 增量加入一期的6个红球
for n in reds:
self.counts[n] += 1
self._queue.append(reds)
# 滑动窗口:超长时移除最早的一期
if len(self._queue) > self.window_size:
old = self._queue.pop(0)
for n in old:
self.counts[n] -= 1
def get_top20(self):
# numpy argsort 实现 O(33) 排序
order = np.argsort(-self.counts[1:34], kind='stable')
return [i + 1 for i in order[:20]]
优化效果:
| 指标 | 旧版 | 优化版 | 提升 |
|------|------|--------|------|
| 算法复杂度 | O(n²) | O(n) | n 倍 |
| 500 期耗时 | 70 秒 | 0.22 秒 | 320 倍 |
| 计算次数 | 汇总+明细各算一遍 | 合并为一次 | 2 倍 |
5.3 核心函数
run_consecutive_backtest_combined(df, ...)— 优化版主函数,一次计算同时返回汇总表和明细表run_consecutive_backtest(df, ...)— 旧版汇总回测(保留兼容)run_consecutive_backtest_detail(df, ...)— 旧版明细回测(保留兼容)
5.4 后台线程
回测在 threading.Thread(daemon=True) 中执行,通过 self.root.after(0, callback) 回到 Tkinter 主线程更新 UI,避免界面冻结。
6. 号码推荐实现(功能页 4)
- 算法原理:基于 TOP20 高频红球,结合分区分布、冷热温比例、连号/重号/邻号规则和 AC 值筛选
- 生成逻辑:
- 随机选择 3-5 个高频号码
- 按分区分布补充非高频号码
- 添加 1 组两连号
- 保留 1-2 个上期号码作为重号
- 考虑上期号码 +/-1 的邻号
- 计算并筛选 AC 值(5-10)
- 从最近 100 期蓝号 TOP10 随机选择蓝号
7. 注册系统实现
- 硬件 ID 生成:基于 MAC 地址、主板 UUID、CPU ID 等生成唯一设备 ID
- 试用期管理:7 天试用期,通过本地文件和隐藏标记文件记录
- RSA 加密:使用 2048 位 RSA 密钥对授权文件进行签名和验证
- FTP 验证:通过 FTP 服务器同步注册信息,确保授权真实性
GUI 界面实现
- 布局:Tkinter Notebook 选项卡,7 个功能页
- 表格:Treeview 组件展示表格数据
- 交互:按钮、输入框、复选框、单选按钮、对话框
- 颜色标记:Treeview tag 配置实现行/单元格背景色区分
- 后台计算:threading.Thread + root.after 模式避免 UI 冻结
技术栈
| 类别 | 技术 | 用途 |
|---|---|---|
| 开发语言 | Python 3.8+ | — |
| GUI | Tkinter | 界面开发 |
| 数据处理 | pandas | CSV 读写、数据统计 |
| 数值计算 | numpy | 频率计数、快速排序 |
| 网络请求 | requests | 开奖数据拉取 |
| 加密 | cryptography | RSA 授权验证 |
| FTP | ftplib | 授权服务器验证 |
| 打包 | PyInstaller | 生成可执行文件 |
性能优化
- 数据缓存:本地 CSV 缓存,减少网络请求
- 批量处理:pandas 向量化操作,提高数据处理效率
- 增量更新:回测使用滚动窗口计数器,避免重复遍历
- 后台线程:耗时计算(回测)在 daemon 线程执行,不阻塞 UI
- 预提取数据:回测前一次性提取全部红球到 numpy 数组,避免循环中反复访问 DataFrame
- 异常处理:完善的异常处理机制,确保软件稳定性
安全性
- RSA 加密:非对称加密验证授权文件
- 硬件绑定:授权与设备 ID 绑定,防止授权文件被复制
- 服务器验证:通过 FTP 服务器验证授权状态,防止伪造
- 错误处理:避免敏感信息泄露
部署说明
开发环境
- 安装 Python 3.8+
- 安装依赖:
pip install -r requirements.txt - 运行主程序:
python main.py
打包部署
- 使用 PyInstaller 打包:
pyinstaller --onefile --windowed main.py - 生成的可执行文件位于
dist目录 - 打包时需包含
registration目录和config.py等配置文件
版本历史
| 版本 | 日期 | 主要更新 |
|---|---|---|
| 1.2.0 | 2026-08-18 | 新增连号回测分析(功能页7),增量更新算法优化,后台线程防 UI 冻结 |
| 1.1.7 | 2026-03-05 | 新增组合条件智能推荐(功能页6),连号统计分析(功能页5) |
| 1.0.3 | 2026-03-05 | 添加蓝号推荐功能,更新推荐号码格式为"红球+蓝号" |
| 1.0.2 | 2026-03-04 | 调整 AC 值范围,优化推荐号码算法 |
| 1.0.1 | 2026-03-02 | 优化推荐号码算法,添加详细特征分析 |
| 1.0.0 | 2026-03-01 | 初始版本,包含核心功能 |
技术支持
- 作者:摸球校尉陈八七
- 微信:moqiuxiaowei
⚠️ 重要风险提示(必看)
核心风险声明
彩票本质:双色球开奖结果为独立随机事件,每一期开奖概率均等,无固定规律可循
系统能力边界:本系统仅能对历史数据进行转换、统计、展示,无法预测未来开奖结果,无任何中奖承诺,所有输出仅为数据探索结果,非购彩建议
理性购彩指南
- 彩票是娱乐方式,非投资手段
- 量力而行,禁止大额、非理性、借贷购彩
- 不依赖任何分析工具、公式、规律作为购彩依据
- 遵守国家彩票管理条例,通过官方渠道购彩
责任声明
- 本系统仅提供数据统计服务
- 因使用本系统进行购彩决策产生的任何损失,由使用者自行承担
- 开发者与版权方不承担任何法律责任