导言
最近股市有点牛市的味道,没有投资股票的朋友,一般也会投资基金,那一般是定投的吧。
定投的好处就是不需要额外的时间去管理,自动扣款就好了。
然而基金投资有一句话叫做:“越低越投”,基金定投有一个不好的地方就是,如果某一天基金净值大跌了,但恰好这一天又不是你的定投日,那么这个时候加点仓也许是个不错的选择,比如上这周的周五(2020-07-24),大部分基金净值跌了超过 4% ,以这个为例。
那么,我们是否可以写一个程序,在交易日的时候自动采集基金的涨跌情况,设定阈值,然后通知我们,我们再手动决定是否加仓或者卖出
笔者尝试了一下,所以形成了这篇文章,文末有本文代码获取的方法,或者大家可以留言告诉我你想关注的基金代码和你的邮箱(留言我会在后台看到,不会展示出来!),我会在交易日每天 14.50 的时候发邮件提醒你。
下面开始我的表演~~~~
邮箱配置
想要使用自动发邮件的功能,那么就必须有一个发件方,这个发件方的配置信息可以在 邮箱设置中进行配置(这里使用的是 QQ 邮箱,其他邮箱的配置类似)
配置过程如下所示:
生成授权码后复制下来,后面会用到
这里说一个 QQ 邮箱的使用技巧,QQ 邮箱是可以一邮多号的,什么意思呢?就是同一个邮箱可以有不同的账号,但是最终收件的地方都是同一个,大家可以在 QQ 邮箱 / 设置 / 账户中进行配置,我就是 @qq.com
和 @foxmail.com
配合使用的,非常方便。
基金信息获取
配置好邮箱后,我们就来获取我们想要的信息,我们想要每天监控某个基金的涨跌幅信息,可以从基金网站上用爬虫获取,我们使用的是天天基金网 (https://fund.eastmoney.com/)
我们按 F12
进行调试,我们只需要涨跌幅信息,所以爬取起来也比较简单
但是笔者用爬虫抓取的时候,发现解析后中文信息会出现乱码
所以我们只在这个网站上 https://fund.eastmoney.com/ 抓取基金的涨跌幅信息,要获取基金的其他信息,如基金的具体名称的话,我们使用这个网站:http://fund.eastmoney.com/js/fundcode_search.js ,里面涵盖大部分基金的文本信息
代码实现
代码的基本思路是,抓取若干个基金(可以进行配置)的涨跌幅信息,然后设置一个阈值(如涨或者跌超过 1%)就提醒我们。
文末获取本文代码。
服务器部署
写好程序后,我们自然想让他自动操作,所以,我们就把他部署到服务器中,在指定时间给我们发邮件就好了。
笔者本来打算使用 Docker 镜像进行部署的,但是基本的 Python 环境的 Dockers 镜像都好几百 M,运行我们这个程序实在有点浪费,再者,我们程序所用到的包都是基本的 Python 包,不会对我们的环境产生影响,所以,我们就只单纯的使用 Linux 命令来配置程序的定时运行。
笔者使用的是腾讯云服务器,本以为把程序上传到服务器运行就可以了,但是,发现自己还是太年轻 但笔者把程序放到服务器时,发现根本发不了邮件,找了一下原因,是因为发邮件的端口(25)被腾讯封了,如果要使用邮件系统的话,必须解封,其次,腾讯要求不能使用云主机之间 SMTP 发邮件,否则就永久封禁 25 端口,这不就是告诉大家不准在本地架邮件服务器吗。。。。
为了之前那么辛苦调试程序,我决定拿出我的另外一台服务器,秒秒钟解决问题
其实我们的部署步骤非常的简单,只需要在服务器上设置在 周一到周五 14.50 左右运行一下程序即可 (周一到周五才有交易,且 15 前交易为当天的净值)
首先,需要安装一下基本的 Python 包
pip install requests
pip install bs4
其次,我们需要设置一下定时任务,使用到的命令是:crontab
一些基本命令如下
export EDITOR="/usr/bin/vim" # 设置 Linux 环境下使用 vim 编辑器编辑 crontab 文件
crontab -e # 创建定时任务
crontab -l # 查看定时任务
service cron restart # 重启crontab 定时任务
sudo /etc/init.d/cron start # 开启定时任务
sudo /etc/init.d/cron stop # 停止定时任务
service cron status # 查看定时任务状态
创建定时任务
crontab -e
然后修改下面的信息
50 14 * * 1-5 bash /root/fund/fund_code.sh > /root/fund/log.txt 2>&1 # 这句话的意思是 每周一到周五14点50运行一下脚本程序,并把输入写入 log 文件中
其中 fund_code.sh
是脚本命令,内容如下, fund_code.py
是我们爬取信息发邮件的程序,/root/anaconda3/bin/python3 的意思是使用 anaconda 的 python 环境来运行我们的程序
注意:设计脚本的时候,涉及到路径的,最好使用绝对路径
上面程序中 50 14 * * 1-5
每个值的含义如下:
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
同时我们也可以使用 网站 https://crontab.guru/ 来帮助我们设计合适的时间
重启一下定时任务
service cron restart
注意:笔者在调试的时候,遇到定时任务不执行,大家如果也遇到,首先看看 python 程序是否正确,还是不行的话,可以参考:https://blog.csdn.net/qfikh/article/details/78202449 进行解决
在公众号后台回复『基金』获取本文代码
喜欢的朋友给个三连啊
参考:
https://www.runoob.com/python/python-email.html https://www.liaoxuefeng.com/wiki/1016959663602400/1019273143120480 https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html https://crontab.guru/ https://blog.csdn.net/qfikh/article/details/78202449
机器视觉 CV
与你分享 AI 和 CV 的乐趣
分享数据集、电子书、免费GPU
长按二维码关注我们