炒股盯盘很累?想自动获取每日某股票的交易信息?想实时监控某只股票?本文“自制炒股盯盘神器”帮你实现!前面笔者已经总结了如何获取股票信息,如何处理股票数据以及如果股票发生较大的波动如何提醒我们这些问题,本文就来解决最后一个问题:如何让这个“神器”时时刻刻帮我们“盯”着股票······
前面三节的链接也放到下面,方便大家浏览:
第一节、获取股票信息第二节、处理股票数据第三节、股票波动提醒 要实现上面说的“盯”这个功能,其实也不难,就让程序一直运行就可以了。但是问题就在于,程序是在计算机上运行的,如果程序要一直运行那就得让计算机一直开机,这肯定不是权宜之计啊!那该如何让程序一直运行呢?用网络服务器!当然,再买个服务器注册什么的肯定不现实啊(股票跌的那么厉害,估计赚的钱还付不起一个服务器的钱呢!当然,如果是有钱的大佬请不要往下读了,下面是给像笔者这样想省钱的读者准备的),所以我们可以租一个很小的、但足以满足我们需求的云服务器来运行程序。所谓云服务器,用笔者的话来解释,就是别人租给你一个虚拟的服务器帮你一直跑着你写的程序,从而完成某些网络服务功能(如果不晓得服务器是干嘛用的,就去百度吧,笔者表达能力有限,就不再解释了)。
目前,国内提供云服务器产品的企业有很多,为避免做广告之嫌,笔者就不再点它们的名字了。不过,笔者推荐大厂的产品,因为稳定、安全啊!云服务器租借不是一个技术问题,笔者不再阐述其中的细节,只给一些个人建议供大家参考吧:
- 如果是个人使用的话,租借的时候真的不需要太高的配置(就像选电脑一样),最低配就绰绰有余了;
- 除了前面提到的优先租借大厂的产品以外,本文的python代码是在Windows系统上测试的,云服务器的操作系统最好与测试环境相匹配;
- 如果是商用,请不要参考此文!
读到这里,笔者就默认你已经解决好了服务器的事情了,剩下的工作就是把前面三节讲的内容汇总起来,做成一个完整的“盯盘神器”!以上证50为例,代码如下:
import tushare as ts #包含库
import pandas as pd
import datetime as dt
import smtplib
from email.mime.text import MIMEText
import numpy as np
#pd.set_option('display.max_columns',None) #调试使用
user = '131xxxxxx83@163.com'
pwd = 'codexx'
to = '16xxxxxx30@qq.com'
last_min = 0 #辅助变量,用于定时发邮件使用
now_min = 0
while True:
date = dt.datetime.now().strftime("%F") #调取日期信息
time = dt.datetime.now().strftime("%T") #调取时间信息
now_min = int(time[3:5]) #将分钟数转化为整型变量
if now_min != last_min : #如果分钟数更新,即每隔1分钟执行一次
share = ts.get_index() #获取指数信息,这里可以参考第一节的内容,改为任意一个你感兴趣的股票,添加上股票代码即可
sz50 = share[['name','change']][8:9] #获取上证50的变化
sz50['date'] = date #获取日期和时间
sz50['time'] = time
last_min = now_min #更新上一次的分钟数,保证每分钟只执行一次
chg_sz50 = np.array(sz50) #数据类型转换,便于得到指数变化的数值信息
if chg_sz50[0][1] > 1.0 or chg_sz50[0][1] < -1.0: #如果涨幅超过1.0%或者跌幅超过-1.0%,注意这里的涨跌幅度都是针对今日开盘时的水平来计算的
msg = MIMEText('Warning: fluctuating fiercely!') #警告:波动剧烈
msg['Subject'] = 'Monotor Report' #发送文本邮件,第三节已经讲过
msg['from'] = user
msg['To'] = to
s = smtplib.SMTP_SSL('smtp.163.com',465)
s.login(user,pwd)
s.send_message(msg)
s.quit()
print("send done!") #调试使用,实际应用中可以注释掉
elif now_min%5 == 0 : #如果不满足上面的振荡较厉害的条件,那么默认每5分钟汇报一次情况
msg = MIMEText('Attention: here is an email for monitoring regularly.') #创建邮件对象
msg['Subject'] = 'Monotor Report' #发送邮件
msg['from'] = user
msg['To'] = to
s = smtplib.SMTP_SSL('smtp.163.com',465)
s.login(user,pwd)
s.send_message(msg)
s.quit()
print("send done!") #调试使用,实际应用中可以注释掉
运行结果展示: