概述
通过本地的定时轮训,结合本地建议数据库。检查股票可转债价格的同事,进行策略化提醒
详细
前言
为什么会有这么个东西出来呢,主要是因为炒股软件虽然有推送,但是设置了价格之后,看到推送也未必那么及时,毕竟正常的超贵软件推送是很多的。所以我们利用简单的接口,来实现跟踪几个特别在意的股票,再进行简单的策略定制,用发邮件的方式提醒,毕竟。。一般人是不会有太多邮件进来的。会比较重视
详细
一. Shares
简介
如上图所示,我们的 Shares
功能主要有
- 初始化
- 创建相关的用户数据库
createUserDB
- 创建股票数据库
createSharesDB
- 登录一个用户,用户名就是要接受邮件的邮箱
createUser
,这个方法的返回值,就是当前用户的 uid。其他接口要用到这个参数 - 购买股票
- 卖出股票
- 检查接口,会定时触发(这里,可以根据用户自己的需求,进行价格触发策略上的定制)
- 获取股票/可转债信息的接口
这里因为需求对数据库的要求很低,所以直接使用了最简单 Sqlite3 ,是不需要额外设置什么东西,就会在脚本的同级目录产生一个名为
testShares.sqlite
的数据库文件。可见最下方运行的效果图
检查接口设置
ret = self.cursor.execute("select code,uid,averagePrice,targetReturn,allowEmail,lastSendEmailTime from shares").fetchall()if len(ret) > 0:codeArray = []for temp in ret:code = temp[0]codeArray.append(code)messageDict = {}codeInfoDict = self.getShareInfo(codeArray)for temp in ret:code = temp[0]uid = temp[1]avaPrice = temp[2]targetReturn = temp[3]allowEmail = temp[4]lastSendEmailTime = temp[5]if allowEmail < 1:continueinfo = codeInfoDict[code]# print(info)name = info[1]newPrice = info[2]message = ""if newPrice < avaPrice*0.95:message = "请注意加仓 "+name+str(code)+"\n现价相对持仓成本 跌幅已经超过 5%"elif newPrice > avaPrice*(1+targetReturn):message = "请注意止盈 "+name + \str(code)+"\n现价已经打到目标收益"+" 当前收益率" + \str((newPrice-avaPrice)/avaPrice)
使用方法
s = Shares()# 创建用户 用来接收提醒邮件的邮箱uid = s.createUser("12345678@qq.com")print("uid",uid)# 由于每次运行,都会根据 buy 和 sell 接口,操作本地的数据库。所以,在运行过一次之后,请自行把已经记录下来的 buy 和 sell 操作注释掉,以免影响 check 函数的运行# buy# 记录当前用户买入 128062 亚药转债 ,价格 96.8 20 股s.buyShares(uid,"128062",96.8,20) # 亚药转债# sell# 记录当前用户卖出 10 股 128062s.sellShares(uid,"128062", 10)
二. EmailSender
一个用来发送邮件的类,需要进行配置STMP服务,我们以 QQ邮箱为例。获取STMP服务的授权码
登录完成后,点击 设置
-账户
-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
。
帮助系统
其他类型的邮箱也是差不多的操作,不再赘述。
使用
content = '''崔东山玩笑道:“陪了你这么久的小铜板儿、小碎银子和神仙钱,你舍得它们离开你的香囊小窝儿?这么一离别分开,可能就这辈子都再也见不着它们面儿了,不心疼?不伤心?”'''# 设置发件人邮箱地址EmailSender.sender = "" # 邮箱的 smtp 授权码EmailSender.pwd = ""# 设置 要发送邮件的 标题,文本正文,收件人地址列表ret = EmailSender().sendEmail("第六百零一章 裴钱的小钱袋子", content,["******@qq.com"])
三. 运行
要正常运行 Demo,需要正常配置好 邮箱名
、授权码
(虽然不配置邮箱也能运行,但是不会有提醒的邮件发出去)。至少记录买入一只可转债/股票。然后运行 autoSharesAdvice.py
文件即可
下面是一个以 128062 亚药转债,进行的测试,出于隐私考虑,并没有设置邮箱和授权码,还请谅解。
s = Shares()# 创建用户 用来接收提醒邮件的邮箱uid = s.createUser("11111111test@qq.com")print("uid",uid)# buys.buyShares(uid,"128062",96.832,20) # 亚药转债# 开盘时间内每 1 min 检查一次while True:timeF = float(time.strftime("%H.%M"))print("time ", timeF)if 9.25 < timeF < 11.31 or 13.00 <= timeF <= 15.00:s.check()time.sleep(60)
设置完成之后,执行 python3 autoSharesAdvice.py