股票量化监控系统
文章目录
背景
一直都想去搭一个量化交易的平台。从一开始搭建的 與情预测股票系统 ,锻炼了爬虫技术、数据库技术和机器学习技术;到后来的 股票价格时序分解系统 锻炼了出图、docker部署、内网穿透和微信公众号后台技术。到现在,搭建出了一个 可以实时对股票进行量化指标监控,并通过微信公众号提醒的系统。
流程图
简单说来就是:
- 爬虫模块,监控数据库里存储的订阅股票信息,采用多线程的方式爬取所有订阅的股票数据,并把数据存储到数据库里,同时缓存一份当天的数据到redis里;并作为生产者,把股票数据更新的消息发送至mq。
- 其中,数据库采取简单工厂设计模式提供生成接口,支持不同的数据库后端,在前端提供一致的服务。具体的后端数据库,包括 mongodb和sqlite等。
- 算法策略模块作为mq的消费者,收到股票的更新消息后,会从redis中读取股票数据,并用每一种算法策略进行处理。若策略结果有更新,则将结果缓存进redis,同时作为生产者,将策略结果更新的消息发送至mq。
- 推送模块从mq监听策略结果的更新,若有,则从redis读取策略结果,以及所有订阅该股票和该算法策略的用户,取出他们的微信id,主动发送报警。而报警信息中会利用该股票的历史数据,以及历史报警信息,画出图像,并存储至七牛云图床,让微信用户在打开该报警信息时,可以从最近的七牛云cdn访问到图片。
- 另外,还部署了微信服务器程序,负责处理微信用户发来的消息,包括绑定微信号、订阅股票、取消订阅股票、查询股票、查询已订阅的股票等功能。
- 以上这些模块全部使用docker部署,并且为了统一管理,编写了docker-compose.xml,并采用portainer,来进行统一部署和管理。
感想
其实,原来我的这个项目,为了图省事,是采用定时器轮询的方式,消息都是存在redis里。。。直到最近,才改成了用消息队列来传递。
这一改,最大的感受就是,变得微服务化了。消息队列带来的,不光是一个组件,或是交互方式上的改进,更多的,是编程思想的改变。
自从微服务化了,每个组件都只聚焦于自身的业务逻辑,代码也变得更简洁了。(再也不需要之前的一堆带锁定时器,代码相互调用,深耦合了)