随着中国金融市场的发展,越来越多的中国人拥有了股票,特别是一些高收入的程序员和高级白领,往往都持有一定数量的股票,但是每时每刻人工盯盘还是很困难的,而且会被罚工资。。。。。。

而且随着量化交易的流行,程序化的股票交易已经越来越普通,作为个人投资者也可以拥有自己的量化交易系统,虽然我们散户想要调用券商的实盘交易接口有一定的难度,也存在安全风险,但是设计一个量化交易系统,由程序实时监测股票波动并发送预警邮件是具有可行性的。下面是我用python写的一个例子。

import tushare as ts#导入tushare模块,这是一个获取股票各种信息一个很常用的开源项目
import datetime
import time
import pandas as pd
import os
import sys
#导入纯文本邮件发送模块,这个模块可以参考网上的一些资料自己写一个适合自己的模块
import my_email as me

我采用的python环境是Anaconda这个最常用的数据分析平台,这个平台自带了很多数据分析用到的模块,不需要我们自己一个个去找,很方便,能让我们把更多的时间花在数据分析本身上。为了保证程序的可用性和简洁性,采用类封装所有函数和变量。

class monitor:           #monitor类period = 0            #一段时间长度,如5分钟extent = 0          #一段时间内瞬时跌幅,如5分钟内涨跌幅day_extent = 0       #日跌幅day_range = 0          #日波动幅度code = []                #股票代码数组filebagPath = ''          #工作路径

初始化函数

    def __init__(self,code,period,extent,day_extent,day_range):      #初始化函数self.is_tradetime()               #首先进行验证,当前时间是否为交易时间self.code = code                 #初始化股票代码数组self.period = period             #初始化一段时间,设定时间长度self.extent = extent             #设定涨跌幅self.day_extent = day_extent             #初始化日最大涨跌幅self.day_range = day_range               #初始化日内股票最大振幅path = os.getcwd()                         #得到当前工作目录today_date = datetime.datetime.strftime(datetime.datetime.today(),'%Y%m%d')     #得到今日日期,格式为“YYYYmmdd"self.filebagPath = path + r'\monitor\%s'%today_date                #建立以今日日期为名的文件路径,用来存储分笔数据if os.path.exists(self.filebagPath):             #判断文件夹是否已存在passelse:os.makedirs(self.filebagPath)               #不存在就新建该文件

判断是否交易时间的函数。

    #判断当前是否交易时间的函数,方法是隔5秒获取一次实时分笔数据,如果获取的两次数据的时间一样则说明当前不是交易时间,程序终止def is_tradetime(self):trade_time1 = datetime.datetime.strptime(ts.get_realtime_quotes('sh')['time'][0],'%H:%M:%S')time.sleep(5)trade_time2 = datetime.datetime.strptime(ts.get_realtime_quotes('sh')['time'][0],'%H:%M:%S')if trade_time1 == trade_time2:print('当前不是交易时间!!!')sys.exit()

监控股票波动的主函数。

    def monitor(self):               #主函数for item in code:               #新建对应code的csv文件来存储实时分笔数据filePath = self.filebagPath + r'\%s.csv'%itemif os.path.exists(filePath):       #如果文件已存在则用原来的passelse:data = ts.get_realtime_quotes(item)data.to_csv(filePath,encoding = 'gbk',index=False)count = 0                  #count用来记录抓取的次数while 1:         #循环try:now_data = ts.get_realtime_quotes(code)                     #一次性获取code数组里所有股票的实时分笔数据for i in range(0,len(now_data)):                    #把获取到的实时分笔数据一一对应的存入对应的股票代码的.csv文件now_code = now_data['code'][i]filePath = self.filebagPath + '\%s.csv'%now_codeif list(pd.read_csv(filePath,encoding='gbk')['time'])[-1] == now_data['time'][i]:    #如果新获取的数据和本地最新数据重合则放弃更新passelse:            #不重合就更新对应代码的csv文件now_data.loc[i:i].to_csv(filePath,mode = 'a',header = None,encoding = 'gbk',index=False)used_data = pd.read_csv(filePath,encoding='gbk').head(20*self.period)      #tushare每3s更新一次实时分笔数据,所以每分钟对应20次数据self.__judge(used_data)                #判断对应股票是否满足预设的条件except:passcount = count + 1                  #抓取数+1print('执行第%s次monitor程序!!!'%count)time.sleep(2)                 #延时2s,因为tushare每3S更新一次数据,所以太频繁的抓取数据没有意义

判断对应code股票是否满足预设条件的函数。

    def __judge(self,used_data):                 #判断是否满足条件函数flag = 0                        #股票是否达到预警条件的标准标志,未达到为0,达到为1if max(used_data['price']) - min(used_data['price']) > self.extent:         #判断是否满足时间周期内的涨跌幅flag = 1if used_data['price'][len(used_data) - 1] > used_data['price'][0]:      #如果后来的股票价格高就是涨text_add = '%s 分钟涨幅超%s%%!!!'%(self.period,self.extent)else:                         #如果后来的股票价格低就是跌text_add = '%s 分钟跌幅超%s%%!!!'%(self.period,self.extent)if 100*(used_data['price'][len(used_data) - 1] - used_data['pre_close'][0])/used_data['pre_close'][0] > self.day_extent:#判断当前日涨幅是否达到预设条件flag = 1text_add = '当前涨幅超%s%%!!!'%(self.day_extent)elif 100*(used_data['price'][len(used_data) - 1] - used_data['pre_close'][0])/used_data['pre_close'][0] < -1*self.day_extent:#判断当前涨跌幅是否达到预设条件flag = 1text_add = '当前跌幅超%s%%!!!'%(-1*self.day_extent)if 100*(used_data['high'][len(used_data) - 1] - used_data['low'][len(used_data) - 1])/used_data['pre_close'][0] > self.day_range:#判断当前振幅是否达到预设值flag = 1text_add = '当日振幅达到%s%%!!!'%(-1*self.day_range)if flag == 1:now_change = (int(list(used_data['price'])[-1]) - int(list(used_data['pre_close'])[-1]))/int(list(used_data['pre_close'])[-1])text = '%s %s %s 当前涨跌幅%s%% 开盘价%s 当前价格%s  总金额%s亿 时间%s' \%(list(used_data['code'])[-1],list(used_data['name'])[-1],text_add,round(now_change,2) \,list(used_data['open'])[-1],list(used_data['price'])[-1],used_data['amount'][0],used_data['time'][0])#邮件要发送的文本信息me.email(text)                                 #发送邮件,该模块可以根据自己的需要在网上找一个this_code = used_data['code'][0]print(this_code)self.code.remove(this_code)           #将对于股票移出股票数组,避免重复预警if len(self.code) == 0:                     #如果code数组里没有了股票就终止程序print('所有code对应的股票全部达到预定条件并发送了预警邮件!!!')sys.exit()

试验代码。

if __name__ == '__main__':code = ['000958','002384','000063','000810','000988','002031','600601','000802','600405','002673',  \'000831','601319', '002413', '601162','002115','000066','600677','002256','600624','002054', \'002156', '601519','300205','600536', '000563','601108', '600213']                   #我的自选股mo = monitor(code = code,period = 5,extent = 5,day_extent = 8,day_range = 10)#设定条件为5分钟内涨跌幅超过5%,日涨跌幅超过8%,日振幅超过10%mo.monitor()              #执行程序

以上就是监控A股波动并发送预警邮件的所有程序,如果觉得对你有用的话就点个赞吧。
欢迎对量化交易和python感兴趣的同学关注我的微信公众号。

用python监控A股股票波动并发送预警邮件_V3相关推荐

  1. 用python实时监控A股股票的波动并发送预警邮件

    这几天对量化交易颇感兴趣,所以就鼓捣了一下,网上搜索一波发现,Tushare是一个开源的股票信息来源,可以轻松地获取股票信息,Tushare主页:http://tushare.org/ ,目前主要是通 ...

  2. nagios监控三部曲之——为什么nagios不能发送报警邮件(2)

    最近我写了关于naigos监控的安装与配置的技术文档,公司运维按照我的文档部署naigos,发现不能发送报警邮件,经过我的检查,发现问题如下: 1.hosts里的配置 [root@nagios ~]# ...

  3. 用python对股票进行可视化分析_股票分析 | 用Python玩玩A股股票数据分析-可视化部分...

    摘要:金融领域一向都是与数学和统计高度相关的行业,今天数学建模已经成为金融行业的发展动力和竞争力表现,人才需求旺盛. 金融领域一向都是与数学和统计高度相关的行业,今天数学建模已经成为金融行业的发展动力 ...

  4. python模拟登录网易163邮箱并发送SOS邮件

    基本环境配置 1. Selenium - 建议使用低版本的Python-Selenium库,因为高版本在Chrome中不支持. pip3 install selenium==2.48.0 2. chr ...

  5. Python + HTMLTestRunner + smtplib 完成测试报告生成及发送测试报告邮件

    一下代码是自己结合教材,并结合以往用到的实例编写的代码,可以做为参考 import smtplib from email.mime.text import MIMEText from email.mi ...

  6. Linux监控多台远程服务器磁盘空间剩余情况并发送预警邮件以及电话告警

    A为本地主机(即用于控制其他主机的机器) ;10.236.23.253 B为远程主机(即被控制的机器Server), 假如ip为10.236.23.236; C为远程主机(即被控制的机器Server) ...

  7. 【转载】如何用Python发送Email邮件?

    文章目录 综述 连接SMTP服务器 登录SMTP服务器 如何获得邮箱授权码 通过SSL登录SMPT服务器 发送\抄送文本邮件 密送文本邮件 发送HTML邮件 参考 综述 用代码发送Email,在很多场 ...

  8. 基于 Python 监控股票涨停情况

    前言 偶然一次打开炒股软件,发现了这么一个下面这么一个区域 我的第一反应是:天呐,竟然还能这么玩?简单粗暴!所以我立马想到写一个涨停板监控程序,一旦监控到股票涨停并且有大量买单则立马通知我,当然还可以 ...

  9. python量化股票源码_使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

最新文章

  1. 买了一个软件测试就业班课程,不知道值不值
  2. sizeof()与strlen()的区别与联系
  3. 腾讯offer是什么样子_记一次腾讯社招前端面试(已拿到offer入职)
  4. codeup 2044 暴力搜索
  5. 新网卡不能绑定“旧”IP故障的解决
  6. 谷歌EfficientNet缩放模型,PyTorch实现出炉,登上GitHub热榜丨Demo可用
  7. loadlin.exe
  8. 如何将div与页面的中间(水平/宽度)对齐[重复]
  9. Django之admin
  10. 安卓IPCamera-ONVIF JAVA代码开源啦
  11. xcode打包cordova项目生成ipa
  12. 实盘中在vnpy多策略多交易对交易
  13. python实现鼠标自动点击屏幕
  14. 数据结构与算法教程——App推荐
  15. [人工智能-深度学习-38]:卷积神经网络CNN - 常见分类网络- ResNet网络架构分析与详解
  16. 5. Linux C 输入输出与文件
  17. npm node升级到最新版本
  18. 蓝紫色食物对心血管最好
  19. 【解决方案】聚焦两会-国标EasyGBS流媒体平台在2021年两会重点工作环保充电桩的视频监控应用
  20. windows设置显示隐藏文件

热门文章

  1. 2011款的Mac Air 只装Windows 7 怎么把开机的咣的声音关掉
  2. 【汉字转拼音工具】Java 汉字转拼音
  3. 【2022最新】mac版本Chrome谷歌浏览器导入burpsuite证书
  4. VirtualBox安装黑群晖并建立smb共享目录的方法
  5. 自定义EL表达式的函数
  6. C1认证学习十三(数据结构常识)
  7. DTC品牌如何冷启动?
  8. [2019牛客多校训练第3场]Median
  9. 基于JavaEE的智能化网吧服务系统的设计与实现毕业设计论文
  10. 计算机清内存,电脑内存清理命令是什么