任何策略,在没有通过盲测之前,都不准自称"有效"。

这是一个用真实开奖数据持续检验"选号策略是否真的比随机数强"的公开实验平台——不是预测工具,是概率科普实验。

数据集截至 2026-09-12 回测区间 第25005~26104期 共251期 Walk-Forward 回测期数 151 蒙特卡洛 5000 次独立模拟 盲测集封存于第26075期起(当前30期)
用 251 期真实开奖数据,让选号玄学、统计策略接受同一个残酷的对手:大数定律。

本项目为统计与算法科普实验,不提供售彩、代购、充值、返利等任何服务;页面上出现的任何号码都只用于回测展示,不构成购彩建议。彩票开奖是独立随机事件,历史数据不影响未来结果——这句话本身就是本实验想反复验证、而不是想反驳的前提。

数据与方法

历史开奖数据来自 gudaoxuri/lottery_history(GitHub 公开镜像),当前版本共 251 期(25005 ~ 26104)。诚实说明:这个仓库名称在公开搜索里暂时没能被独立核实——不确认它是否真实存在、是否还在维护,按方案的风险对策,这属于"未经验证的第三方数据源",在核实清楚或替换为已验证来源之前,本页数字仅供算法/统计方法本身的演示,数据来源这一环还不能算已尽职核实。这也是 V0 版本已知的限制:还没有接入更长的历史区间,也还没有做多数据源交叉核对——按方案规则,一旦发现数据源不一致,后续版本会暂停自动发布并报警,而不是随便选一个继续跑。

回测采用 Walk-Forward 滚动预测:预测第 t+1 期时,策略只能看到第 1~t 期的数据,绝不使用未来信息。本版本 minTrainSize = 100,即前 100 期只作为初始训练数据,从第 101 期开始才正式计入回测成绩,实际参与评分的有 151 期。

随机基准和蒙特卡洛模拟都使用「期号 + 策略名」做种子的伪随机数,保证同一份数据永远得到同一份排行榜——回测模式下完全不使用 Math.random()

排行榜

三个策略:随机基准(完全不看历史,仅作对照)、热号(近50期出现频率最高的号码)、冷号(遗漏期数最长的号码)。理论期望值 1.0909 是红球 33 选 6 在均匀随机假设下的数学期望(6 × 6/33),独立于任何策略。

策略 均命中(红) 理论期望 95% 置信区间 蓝球命中率 跑赢随机分布 ≥4/≥5/6红次数 配对检验显著
随机基准 1.0596 1.0909 [0.933, 1.186] 4.0% (理论 6.3%) 34.1% 0 / 0 / 0
热号 1.1987 1.0909 [1.062, 1.335] 4.6% (理论 6.3%) 93.9% 1 / 0 / 0
冷号 0.9735 1.0909 [0.841, 1.106] 5.3% (理论 6.3%) 4.6% 1 / 0 / 0

随机基准:均命中 1.0596(理论期望 1.0909)。它的表现落在随机分布的中段(跑赢 34.1% 的随机策略),和"随便选"没有可辨识的差别。

热号:均命中 1.1987(理论期望 1.0909)。本期它跑赢了 93.9% 的独立随机策略,看起来很唬人——但这本质上只是恰好落在了随机波动分布里较高的一侧,配对差值检验并未达到统计显著。按照本站的北极星原则:没有通过盲测之前,不能说它"有效"。

冷号:均命中 0.9735(理论期望 1.0909)。本期它只跑赢了 4.6% 的独立随机策略,表现落后于大多数随机对照——这同样只是正常的随机波动,不代表这个策略"更差",样本量还太小,不足以下结论。

训练 / 验证 / 盲测:三段式分割(V0.5 新增)

上一节的排行榜是训练集、验证集、盲测集合并在一起算出来的整体成绩——这正是 V0 版本"这是开发集成绩,不是盲测成绩"的局限。从这一版开始,回测数据被切成三段固定期号区间,边界写死,不随以后追加新数据而移动

关于当前 30 期盲测集的诚实说明:这是这个项目第一次跑盲测,样本量还很小,任何一个策略在这里的表现——无论好看还是难看——统计上都不可靠,只是"账本翻开的第一页"。它的意义不在于现在这个数字,而在于:从今往后,"盲测集"和"开发集"会被严格分开展示,不会因为开发集算出来的数字好看,就把它包装成盲测结论。

策略 开发集(训练+验证,第25105~26074期) 盲测集(第26075~26104期)
均命中(红) 95% CI 跑赢随机分布 均命中(红) 95% CI 跑赢随机分布
随机基准 1.0826 [0.936, 1.229] 47.7% 0.9667 [0.727, 1.206] 25.1%
热号 1.1818 [1.026, 1.338] 89.4% 1.2667 [0.986, 1.548] 88.1%
冷号 0.9421 [0.798, 1.086] 3.1% 1.1000 [0.770, 1.430] 55.7%

随机基准:盲测集里它落在随机分布中段(跑赢 25.1%),和随手选一注没有可辨识的差别。

热号:盲测集里它跑赢了 88.1% 的独立随机策略——看起来亮眼,但样本只有 30 期,这个量级的波动完全在随机噪声范围内。按北极星原则:这不构成"有效"的证据,只是给这个策略记上了它盲测账本的第一笔。

冷号:盲测集里它落在随机分布中段(跑赢 55.7%),和随手选一注没有可辨识的差别。

近期短线表现(近10/30/100期)

只是一个直观的"最近手感"数字,不做置信区间、不做显著性判断——短期波动是这类项目里最容易被误读成"策略突然变强/变弱"的地方,这里刻意不给任何结论性文案。

策略 近10期均命中 近30期均命中 近100期均命中
随机基准 1.0000 0.9667 1.0900
热号 1.3000 1.2667 1.2400
冷号 0.8000 1.1000 1.0000

我的策略(V1 新增):调权重,亲手体验一次"数据窥探"

拖动下面三个滑块,实时生成一组"加权策略"号码——权重只决定热号频率 / 冷号遗漏 / 随机扰动三者在打分里的相对占比,同一组权重 + 同一份历史数据,永远算出同一组号码,不是每次刷新都变的抽奖。

刻意的设计:你可以随便拖动滑块,把下面的"历史回测成绩(开发集)"调到很好看——这正是本节想让你亲手体验的东西:只要允许反复调参、挑一个好看的数字,几乎总能"调"出一个看起来不错的策略,这不代表你发现了规律,只是数据窥探的一种用户端形式。真正说明问题的是下面被默认隐藏的盲测成绩——一段调参过程中始终看不到、拿不来调整的历史区间,点击按钮才会揭晓。

50
20
30
历史回测成绩(开发集,均命中)
95% 置信区间
跑赢随机分布

以上三个数字仅供娱乐——它们是你可以一直看着、反复调参数改进的"开发集"成绩,不作为策略有效性的证据

盲测成绩(第26075期起,均命中)
95% 置信区间
跑赢随机分布

这才是相对公平的检验——你调参时完全看不到这段区间的表现。样本量还很小,任何数字(好看或难看)都不构成"有效"或"无效"的结论,只是诚实地把两个口径分开摆出来。

附:韭菜模拟器——按当前权重结算的资金曲线(近似示意)

假设从第一次能预测的那一期起,每期都固定花 2 元买一注当前权重算出来的号码,按官方奖级规则结算(一/二等奖用历史近似平均值估算,非精算数据)。这条曲线接的是开发集+盲测集的完整时间线——钱不需要防"数据窥探",展示它只是想把"长期负期望"从一句话变成一条看得见往下走的线。

累计投入
当前净值(近似)

收敛曲线

每个策略"累计平均命中数"随回测期数推进的变化过程。虚线是理论期望值——不是说曲线一定会贴上去,而是长期来看,样本均值和理论期望之间的差异应当落在正常波动范围内,而不是持续、系统性地偏离。

随机基准 热号 冷号
-0.160.220.610.991.381.76第1期第76期第151期(最新)理论期望 1.0909

蒙特卡洛随机分布

固定住真实开奖序列不变,生成 5000 条相互独立的"随机选号策略",让它们都跑一遍同样的 Walk-Forward 流程,得到下面这条经验分布(均值 1.0916,标准差 0.0696)。三条虚线标出了随机基准、热号、冷号各自的均命中数落在分布里的位置——这比单纯说"跑赢了多少随机策略"更直观:如果一个策略的位置和随机基准挤在分布中间的同一堆里,那它就没有跳出"运气"的范畴。

0.820.911.001.091.181.271.36随机基准热号冷号

资金曲线(近似示意,非精算数据)

假设每期固定买 1 注(2 元),按官方奖级规则结算,一二等奖用历史近似平均值估算(不是精确的奖池分配结果)。这条曲线不是这个项目的重点结论,只是把"长期负期望"从一个抽象数字变成一条看得见的曲线。

随机基准 热号 冷号
-299.20-233.92-168.64-103.36-38.0827.20第1期第76期第151期收支平衡线

一/二等奖按历史近似平均值估算,非官方精算数据,仅用于示意长期负期望现象。

这是 V1:还没做的事

这一版加上了"我的策略"权重滑块和对应的资金曲线,把开发集/盲测集的分离从"排行榜上的一张表"变成了用户可以亲手体验的交互。还没有做的,留给下一版: