用python实时监控A股股票的波动并发送预警邮件
这几天对量化交易颇感兴趣,所以就鼓捣了一下,网上搜索一波发现,Tushare是一个开源的股票信息来源,可以轻松地获取股票信息,Tushare主页:http://tushare.org/ ,目前主要是通过Tushare的实时分笔来获取当前时间的股票信息,主要是用来实时监控特定股票出现日内暴跌和日内较开盘价大幅下跌,后期还会添加更多内容。废话不多说,直接上代码。
import tushare as ts#导入tushare模块
import datetime
import time
#导入纯文本邮件发送模块
import my_email as me
#实时监测函数,code为6位数字代码字符串组成的数组,监测在10分钟内跌幅大于5%和实时跌幅较开盘价大于10%时,发送邮件通知
#time_mins为跌速时间,change_mins_max为跌速深度,change_max为较开盘跌幅
def monitor(code,time_mins = 10,change_mins_max = 5,change_max = 10):data_today = []#储存采集回来的数据n = 1#记录从循环次数while 1:try:now_time = datetime.datetime.strptime(datetime.datetime.strftime(datetime.datetime.now(),'%H:%M:%S'),'%H:%M:%S')#now_time为记录当前时间,由于从Tushare取回的实时分笔数据只有时间,#没有日期,所以用上面的操作把现在的时间的日期换成1900:1:1日,方便计算时间差rest_time = now_time - datetime.datetime.strptime('11:30:00','%H:%M:%S')#用来计算当前时间和中午11:30休市时间的差值if rest_time.days == 0 and rest_time.seconds > 0 and rest_time.seconds < 5400:#中午11:30~13:00为中午休市时间,时长5400 secondsprint('中午休市时间')while rest_time.days == 0 and rest_time.seconds > 0 and rest_time.seconds < 5400:now_time = datetime.datetime.strptime(datetime.datetime.strftime(datetime.datetime.now(),'%H:%M:%S'),'%H:%M:%S')rest_time = now_time - datetime.datetime.strptime('11:30:00','%H:%M:%S')time.sleep(2)#time sleep 2秒,循环等待中午休市时间的结束if rest_time.days == 0 and rest_time.seconds > 12600:#下午15:00结束交易,与11:30的时间差为12600 seconds,关闭程序print('交易时间已结束!')breakflag = 0#旗帜,flag==1则说明出现预警print('第%s次抓取数据'%n)n = n + 1#每循环一次 ,n + 1change_max = change_maxrealtime_qutoes = ts.get_realtime_quotes(code)#从tushare采集实时分笔数据last_time = datetime.datetime.strptime(realtime_qutoes.loc[0][31],'%H:%M:%S')#last_time记录从Tushare得到数据里的时间,realtime_qutoes.loc[0][31]为时间,存储格式为字符串'%H:%M:%S'if (last_time - now_time).days == 0 and (last_time - now_time).seconds > 10:#如果从realtime_qutoes得到的时间大于当前实际时间,那么说明,当前市场未在交易,#得到的数据为上一交易日最后一笔交易数据,为避免交易所时间和本地时间不一致,设置10 seconds误差print('今天不是交易日或者未到交易时间!')breakprint('数据抓取成功!')data_today.insert(0,realtime_qutoes)#储存入数组if len(data_today) > 100*time_mins:for i in range(0,60*time_mins):#为了避免data_day数组过长,增加内存占用,所以当长度大于一定程度时,删除一部分del data_today[len(data_today) - 1]if len(data_today) > 30*time_mins:#只需要对应时长的数组time_len = 30*time_minselse:time_len = len(data_today)#如果股票刚开始交易,分笔数据没有那么多,就全部作为需要的使用for i in range(0,len(code)):if (float(data_today[0].loc[i][2]) - float(data_today[time_len-1].loc[i][2])) < -1*change_mins_max:#短时间下跌幅的确定flag = 1#改变旗帜的值text_add = '%s 分钟跌幅超%s%%'%(time_mins,change_mins_max)#text_add作为邮件提醒的部分文本,当一只股票达到预警值时,结束继续查找其它股票情况,立即发送邮件提醒breakif (float(data_today[0].loc[i][2]) - float(data_today[time_len-1].loc[i][2])) > change_mins_max:#短时间上涨幅的确定flag = 1#改变旗帜的值text_add = '%s 分钟涨幅超%s%%'%(time_mins,change_mins_max)#text_add作为邮件提醒的部分文本,当一只股票达到预警值时,结束继续查找其它股票情况,立即发送邮件提醒breakif 100*(float(data_today[0].loc[i][3]) - float(data_today[0].loc[i][1]))/float(data_today[0].loc[i][2]) < -1*change_max:change = 100*(float(data_today[0].loc[i][3]) - float(data_today[0].loc[i][1]))/float(data_today[0].loc[i][2])#如果当前股价较开盘价跌幅较大,也发送提醒flag = 1text_add = '较开盘价跌%s %%'%(str(change)[:5])breakif 100*(float(data_today[0].loc[i][3]) - float(data_today[0].loc[i][1]))/float(data_today[0].loc[i][2]) > change_max:change = 100*(float(data_today[0].loc[i][3]) - float(data_today[0].loc[i][1]))/float(data_today[0].loc[i][2])#如果当前股价较开盘价涨幅较大,也发送提醒flag = 1text_add = '较开盘价涨%s %%'%(str(change)[:5])breakprint(i)if flag == 1:del code[i]#一只股票达到预警后将该只股票剔除,代码数组code_text = realtime_qutoes.loc[i][32]#股票6位数字代码name = realtime_qutoes.loc[i][0]#股票名字open_price = realtime_qutoes.loc[i][1]#股票开盘价now_change = ((float(realtime_qutoes.loc[i][3]) - float(realtime_qutoes.loc[i][2]))/float(realtime_qutoes.loc[i][2]))*100#股票当前涨跌幅price = realtime_qutoes.loc[i][3] #当前股价high = realtime_qutoes.loc[i][4]#当日最高价low = realtime_qutoes.loc[i][5]#当日最低价amount = str(float(realtime_qutoes.loc[i][9])/1e8)[:4]#当日成交金额,单位亿,有效数字为3位time_text = realtime_qutoes.loc[i][31] #采集到数据的分笔时间text = '%s %s %s 当前涨跌幅%s%% 开盘价%s 当前价格%s 最高价%s 最低价%s 总金额%s亿 时间%s' \%(code_text,name,text_add,str(now_change)[:5],open_price,price,high,low,amount,time_text)#邮件要发送的文本信息me.email(text)#发送邮件if len(code) == 0:#如果代码数组没有东西了,就结束程序breakexcept Exception as e:print('error:',e)time.sleep(2)time.sleep(2)#休息2秒,避免频繁请求造成各种问题
if __name__ == '__main__':code = ['000958','002384','000063','000810','000988']monitor(code)
用python实时监控A股股票的波动并发送预警邮件相关推荐
- 用python监控A股股票波动并发送预警邮件_V3
随着中国金融市场的发展,越来越多的中国人拥有了股票,特别是一些高收入的程序员和高级白领,往往都持有一定数量的股票,但是每时每刻人工盯盘还是很困难的,而且会被罚工资...... 而且随着量化交易的流行, ...
- python实时监控_python实时监控cpu小工具
本文实例为大家分享了python实时监控cpu的工具,供大家参考,具体内容如下 虽然写的很不完善,但是当练手吧,对于实时监控cpu还是有点用处的,虽然android studio已经提供了一样的功能, ...
- python实时监控文件目录_教你三种方法,用 Python实时监控文件
原标题:教你三种方法,用 Python实时监控文件 在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决 ...
- python实时监控文件大小_python实现实时监控文件的方法
在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决,比如要监控nginx的$request_time和 ...
- python实时监控电脑运行信息(邮件预警)
直接上代码 python在学习阶段,存在多出冗余代码 应用场景 实时监控电脑本地系统运行情况,或某个进程 内存占用过大,指定时间内,进行邮件警示,发送信息于指定运维人员 流程 程序运行 --> ...
- 树莓派3B+ python 实时监控(USB摄像头)并显示
~~ 如果有什么问题可以在我的个人博客留言 ,我会及时回复.欢迎来访交流 ~~ 首先 看效果 先是安装 一个小工具 叫 fswebcam sudo apt-get install fswebcam ...
- python实现监控URL的一个值小于规定的值--邮件报警
监控URL的一个值小于规定的值--邮件报警 #!/usr/bin/env python #-*- coding:utf-8 -*- __author__ = 'liudong' import urll ...
- 监控服务(新增)错误日志脚本并发送DingDing|邮件通知模板
文章目录 1.监控模板 2.使用脚本 3.效果 4.如何安装DingDing和邮件服务器 5.拓展 1.监控模板 该模板支持 (1)DingDing告警与邮件告警 (2)自定义监控日志的黑名单与白名单 ...
- 如何用python实时监控股票,并且持续扫描大盘?
推荐好文: ①程序员用Python爬虫做副业半个月就赚了3W ②程序员别瞎学,这几门语言要被淘汰了- 对于金融分析来说,获取数据是第一步.Python的一个强大功能之一就是数据获取(爬虫).但是对于没 ...
最新文章
- Nginx负载均衡与配置Nginx的ssl
- C++类与new和delete操作符
- boost::type_erasure::deduced相关的测试程序
- Linux 下如何处理包含空格和特殊字符的文件名
- ToolStrip和ToolStripButton的用法
- mq幂等mysql_膜拜!看完这篇你还不懂RocketMQ算我输
- oracle19c监听服务启动失败,Oracle19c安装(有失败成功记录)
- DDD专家张逸:构建领域驱动设计知识体系
- Stanford机器学习---第五讲. 神经网络的学习 Neural Networks learning
- Android进阶——Android无障碍服务之AccessibilityService实现微信抢红包插件
- 多路增广 Dinic算法
- 内存数据库将数据保存在计算机内存,内存数据库
- app注册如何集成语音验证码功能?
- 数据仓库指北(文末附PDF下载)
- 信息安全体系建设☞数据完整性检查--信息安全开源工具分享
- Python发送多附件邮件的方法
- 面试磕磕碰碰,辛得蚂蚁高级工程师的技术笔记指导,终获P7岗offer
- 公众号资源分享欢迎关注
- springmvc的工作原理
- ios获取磁力计信息
热门文章
- 支付宝转账到银行卡链接制作并隐藏部分卡号
- 债务人不愿腾房是否能拍卖
- 立体字3D字体数字设计|造型艺术字,灵感来源,速码!
- Telerik UI for Winforms 2023 R1
- 【C++】spdlog--log4cxx有点笨重,试一试spdlog
- 卖座项目需要注意的点
- android虚线边框_android 绘制虚线效果
- 带你读AI论文丨RAID2020 Cyber Threat Intelligence Modeling GCN
- Warning: getFieldDecorator will override value
- 慕容垂:百万战骨风云里——激荡的鲜卑史略之二(转载)