小白量化彩票实战彩票号码快速生成组合及利用数据库生成彩票号码组合

Posted 荷蒲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小白量化彩票实战彩票号码快速生成组合及利用数据库生成彩票号码组合相关的知识,希望对你有一定的参考价值。

小白量化彩票实战(5)彩票号码快速生成组合及利用数据库生成彩票号码组合
我写彩票的博客,不是鼓励大家去买彩票,读者要以学习编程娱乐的思想来看待。兴趣是学习最大的动力!
我们继续以双色球6+1为例,介绍33选6的生成全部号码组合。
组合就是每注号码,只能出现33号的一个,不能重复。我们可以用多重循环来生成号码。

import pandas as pd  
import numpy  as np
import time

print('开始生成全部号码.')
t=time.time()

#双色球336全部红号组合
m=33
hm=[]
for a  in range(1, m-4):
    for b  in range(a+1, m+1):
        for c  in range(b+1, m+1):
            for d  in range(c+1, m+1):
                for e  in range(d+1, m+1):
                    for f  in range(e+1, m+1):
                        hm.append([a,b,c,d,e,f])
t=time.time()-t
print('号码生成结束,生成%d注,耗时 %f 秒。'%(len(hm),t))

print(hm[-20:])  #输出最后20注号码

程序运行结果:

开始生成全部号码.
号码生成结束,生成1107568注,耗时 1.185000 秒。
[[26, 27, 28, 30, 32, 33], [26, 27, 28, 31, 32, 33], [26, 27, 29, 30, 31, 32], [26, 27, 29, 30, 31, 33], [26, 27, 29, 30, 32, 33], [26, 27, 29, 31, 32, 33], [26, 27, 30, 31, 32, 33], [26, 28, 29, 30, 31, 32], [26, 28, 29, 30, 31, 33], [26, 28, 29, 30, 32, 33], [26, 28, 29, 31, 32, 33], [26, 28, 30, 31, 32, 33], [26, 29, 30, 31, 32, 33], [27, 28, 29, 30, 31, 32], [27, 28, 29, 30, 31, 33], [27, 28, 29, 30, 32, 33], [27, 28, 29, 31, 32, 33], [27, 28, 30, 31, 32, 33], [27, 29, 30, 31, 32, 33], [28, 29, 30, 31, 32, 33]]

根据上面代码,我们不难生成其他组合,例如大乐透红区35选5等。
排列型彩票全排列如何生成呢?我们以双色球3D为例,可以用下面代码快速生成。

t=time.time()
m=3
hm=[]
for i  in range(10**m):
    hm.append(str(i).zfill(3))  #转换为字符串,前面补0 
t=time.time()-t
print('号码生成结束,生成%d注,耗时 %f 秒。'%(len(hm),t))
print('输出前10注号码',hm[:10])  #输出前10注号码
print('输出后10注号码',hm[-10:])  #输出后10注号码

程序输出结果:

开始生成全部号码.
号码生成结束,生成1000注,耗时 0.000000 秒。
输出前10注号码 ['000', '001', '002', '003', '004', '005', '006', '007', '008', '009']
输出后10注号码 ['990', '991', '992', '993', '994', '995', '996', '997', '998', '999']

有了这些全组合或全排列,我们可以利用前面介绍的特征分析及自编仿通达信公式对生成全部组合或全部排列的号篮中数据进行选出提取号码或过滤删除掉不满足特征要求的号码。

我在利用Visual FoxPro 9.0(简称VFP)开发彩票软件时,由于这个软件的限制,不能生成太大的数组,因此数据太多要以DBF格式文件来处理,文件处理读写速度很慢,因此用循环生成双色球的110万组合,需要30分钟以上。为提高速度,我采用VFP9的SQL-T命令,利用cursor来,快速生成双色球110万全部组合号码。VFP9程序如下:

** 独狼荷蒲qq:2886002 / 2886002
** 百度独狼VFP
** 这段程序能够在Visual FoxPro 9.0(简称VFP)上cursor快速生成数百万条彩票组合号
** 下面是VFP群号
** VFP应用程序算法 12787940
** 振兴VFP(老车).. 691863737
** 振兴VFP(老车).. 914539613
** 振兴VFP(老车).. 1033136324
** VFP软件开发学习  328329074
** 我的FLL  312802882
** Visual FoxPro(VFP) 初级群 248423

** 独狼荷蒲qq:2886002 / 2886002
** 小白量化彩票软件开发群:712300766
** 小白量化PythonTkinter软件开发群:524949939
** 小白量化MT5群:556894446
** tkinter,pyqt,gui,Python交流2:517029284
** 手机微信: 18578755056


** 双色球336,大乐透红区355,蓝区122
**球号q=33
q=33
**选择xj个号
xj=6
lsql="select * from "
create cursor tmp (id N(2))
for i=1 to q
insert into tmp (id) value (i)
ENDFOR
FOR j=1to xj
IF j<xj
lsql=lsql+"tmp t"+ALLTRIM(STR(j))+","
ELSE
lsql=lsql+"tmp t"+ALLTRIM(STR(j))+" "
endif
ENDFOR
lsql=lsql+"where "
FOR k=1 TO xj-1
IF k<xj-1
lsql=lsql+"t"+ALLTRIM(STR(k))+'.id<'+"t"+ALLTRIM(STR(k+1))+'.id '+"and "
else
lsql=lsql+"t"+ALLTRIM(STR(k))+'.id<'+"t"+ALLTRIM(STR(k+1))+'.id'
endif
ENDFOR
lsql=lsql+" into cursor lszhb"
&lsql
use
RETURN

VFP9在我的电脑运行0.34秒,生成110万组双色球数据。速度提高了很多。我现在根据这段程序算法,移植到了Python中,读者可以了解Python中如何用数据库来生成全部组合号码。
我们以SQLite为列,这段程序展示了数据库的写入和读取操作,其他数据库也是类似。程序代码如下:

#购买<零基础搭建量化投资系统>正版书,送小白量化软件源代码。
# https://item.jd.com/61567375505.html
#独狼荷蒲qq:2775205
#小白量化彩票软件开发群:712300766
#小白量化PythonTkinter软件开发群:524949939
#电话微信:18578755056
#微信公众号:独狼股票分析
import math
import datetime as dt
import pandas as pd  
import numpy  as np
import matplotlib.pyplot as plt
from sqlalchemy import create_engine
import time

# 初始化数据库连接:
engine= create_engine('sqlite:///ssq.db')#连接数据

#sqlalchemy 数据库操作演示
conn = engine.connect()

sql2='drop table IF EXISTS tmp'
conn.execute(sql2)#执行 sql 语句据

sql2='drop table IF EXISTS cp2'
conn.execute(sql2)#执行 sql 语句据

sql2='CREATE TABLE tmp (id int)'
conn.execute(sql2) #执行 sql 语句

for i in range(1,33+1):
    sql='insert into tmp (id) values (%d)'%i
    a=conn.execute(sql) #执行 sql 语句

for i in range(6):
    sql2='drop table IF EXISTS t%d'%(i+1)
    conn.execute(sql2)#执行 sql 语句据
    sql="CREATE TABLE t%d AS select * from tmp"%(i+1)
    a=conn.execute(sql) #执行 sql 语句

sql="CREATE TABLE cp2 AS select "
sql2=" from "
sql3="  where "

xj=6
for i in range(1,xj+1):
    if i<(xj):
        sql=sql+" t%d.id t%d"%(i,i)+" ,"
        sql2=sql2+'t%d'%i+" ,"
        sql3=sql3+"t%d.id<t%d.id"%(i,i+1)+' and '
    else:
        sql=sql+" t%d.id t%d"%(i,i)
        sql2=sql2+'t%d'%i
        sql3=sql3+"t%d.id>0"%i

sql=sql+sql2+sql3

print('开始生成全部号码.')
t=time.time()
a=conn.execute(sql) #执行 sql 语句
t=time.time()-t
print('号码生成结束,耗时 %f 秒。'%t)

df3=pd.read_sql('cp2',engine) #读取数据库,保存到 df3 中.
print(df3)

程序运行结果:

开始生成全部号码.
号码生成结束,耗时 2.019000 秒。
         t1  t2  t3  t4  t5  t6
0         1   2   3   4   5   6
1         1   2   3   4   5   7
2         1   2   3   4   6   7
3         1   2   3   5   6   7
4         1   2   4   5   6   7
     ..  ..  ..  ..  ..  ..
1107563  27  28  29  30  32  33
1107564  27  28  29  31  32  33
1107565  27  28  30  31  32  33
1107566  27  29  30  31  32  33
1107567  28  29  30  31  32  33

[1107568 rows x 6 columns]

菜(全部号码组合)有了,调料(号码特征分析技术)有了,剩下就等你自己做菜(开发出彩票软件)了。

我计划下一篇介绍号码缩水原理。
假如我选择了7个号码:1、2、3、4、5、6、7,其中1、2、3、4、5、7是中奖号。
如果这7号包含6个奖号,我们想中大奖,即6个奖号在一起,必须全部组合都要买。
[1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 7],
[1, 2, 3, 4, 6, 7],
[1, 2, 3, 5, 6, 7],
[1, 2, 4, 5, 6, 7],
[1, 3, 4, 5, 6, 7],
[2, 3, 4, 5, 6, 7]
要买上面7注号码。
能选中6个号码,是运气问题,如果我们放弃6个号码在一组情况(不要大奖),要保证5个号码在一起的情况(只要中奖),我们需要买几注?我们需要买上面任意一注都符合要求,这就是“中六保五”策略。
因此7个号码在“中六保五”策略下只需买一注。
你可能说你傻啊,哪有7个号码会出1、2、3、4、5、6、7。其实我们可以把这个连续号码看作数组下标。这样可以替换为任意7个号码。
采用“中六保五”策略,7个号码只需要买一注,那么我们原先要买7注,现在只需要买1注就可以了,剩下6组我们是不是能再选7个号码组合,来采用“中六保五”策略。总体上讲,是不是提高了中奖概率。
如果我们选择[1, 2, 3, 5, 6, 7]号码这一注刚好是大奖号,你走了狗屎运。因此采用“中六保五”策略,仍有中大奖的机会。
假定我们选择11个号码,全组合有462注,采用采用“中六保五”策略只须34 注,采用“中六保四”策略买的注数更少。
如果你认为某些号码“肯定”会出现,你可以采取胆托方式组号,托号部分也可以采用中M保N方式缩水。

购买《零基础搭建量化投资系统――以Python为工具》(https://item.jd.com/61567375505.html)一书,就能得到小白量化第二代全部源代码。其中包括完整的HP_cp模块。

#独狼荷蒲qq:2775205 /2886002
#小白量化彩票软件开发群:712300766
#小白量化PythonTkinter软件开发群:524949939
#电话微信:18578755056
#微信公众号:独狼股票分析

请点赞本文,你的鼓励是我写作的动力!
请持续关注我的博客,我的进步,就是你的进步!

以上是关于小白量化彩票实战彩票号码快速生成组合及利用数据库生成彩票号码组合的主要内容,如果未能解决你的问题,请参考以下文章

小白量化彩票实战彩票号码中六保五缩水和旋转矩阵

小白量化彩票实战用sklearn神经网络预测彩票号码和特征

java的彩票

试探算法_随机生成彩票号码

python随机彩票号码生成器游戏

带有 tkinter gui 的彩票号码生成器和检查器