时序分解股票数据并部署在微信公众号上
文章目录
目的
将股票价格进行时序分解,得到趋势图、周期图和误差图。然后放到微信公众号上,让用户输入"002581.SZ"等股票代码,即可自动回复以上的图片。
主要思路
- 用tushare获得股票的历史数据。
- 用statsmodels的STL进行时序分解。
- 用matplotlib出趋势图、周期图和误差图 的三合一图片。
- 将以上功能部署到树莓派上。
- 树莓派利用花生壳作内网穿透,对外提供服务。
- 树莓派上部署微信公众号服务器,对用户提供便捷服务。
输出的图片
进度
现在已完成使用tushare获取指定股票历史数据、使用statsmodels进行时序分解、使用matplotlib出三合一图。
但想要接上微信公众号,则必须要有一台公网80端口的服务器。准备用花生壳进行内网穿透,但64位的树莓派4好像装不了花生壳客户端。而经过一晚上实验,发现局域网内必须要有一台电脑运行着花生壳客户端,否则无法解析。
好像在PC上运行花生壳客户端,也只能访问树莓派一会儿,之后还是不行。需要进一步验证,同时验证32位树莓派上同时运行花生壳客户端和服务器程序,能不能稳定解析。
所以接下来准备用之前旧的树莓派搭个32位的arm服务器,把项目迁过去,运行花生壳客户端,同时运行服务器程序。
由于我家是电信光猫的内网ip,光猫只有一个lan口没有wifi,所以只能先接路由器,再接各设备。但这样花生壳的内网穿透会报"域名IP地址指向与转发服务器IP不一致"。解决方案是,先直连光猫,从 http://192.168.1.1/romfile.cfg 上下载配置文件,找到超级管理员telecomadmin和其密码,登上光猫后台,配置DMZ到路由器。然后再上路由器后台,配置DMZ到32位旧树莓派。
在服务器程序的一开始去执行"sudo phddns start"来运行花生壳客户端。另外,可以使用"sudo phddns status"来查看SN号,以此可以在花生壳网页管理台上看客户端在不在线。然后在花生壳网页管理台上配置域名映射。
忙了快一天,花生壳映射终于成功了!
另外,由于树莓派上官方的statsmodels版本太低,所以只能去git clone官方最新代码到本地,然后 python3 setup.py install 。再另外,由于github的速度极慢,所以只能先clone到国内的gitee上,再从gitee上clone到本地。
然后就是微信客户端的流程。应该是收到消息后,取股票数据,时序分解,出图,上传临时图片获取资源ID,发送资源ID给用户完成回复图片。整个流程必须控制在5秒内,否则微信服务器算超时。
使用 re.fullmatch 进行全匹配。
在非交互式后端,若只要matplotlib生成图片不需要显示窗口,需要:
|
|
使用python的dict,作为cache,保存media_id。这样就可以不用每次查询都重新拉数据、出图、上传图片了。
- 使用tushare获取指定股票历史数据
- 使用statsmodels进行时序分解
- 使用matplotlib出三合一图
- 旧树莓派搭建32位的arm服务器,运行花生壳客户端
- 项目迁移至旧树莓派32位的arm服务器,不用定时运行更新公网地址的代码了
- 搭建微信客户端的流程,注意时限
- 使用cache缓存media_id
- 增加定时器去更新day和access_token
微信公众号
该项目已部署至个人微信公众号上,由一台旧32位树莓派充当服务器。
只需把 002581.SZ 这样的股票代码发送至公众号,即可获得该只股票股价的时序分解图,分别是趋势图、周期图和误差图。
代码开源地址
https://github.com/zhangsheng377/stats_stock
docker
目前,已把该树莓派镜像部署至docker,这样就不用screen暴力的在后台运行及监控了。
https://github.com/zhangsheng377/docker/tree/master/stats_stock
打赏
如果各位觉得该项目帮到了您的话,还请不吝打赏,谢谢!