Python凭借其开发效率高和功能强大的特性,在众多编程语言中脱颖而出,成为大数据时代的分析利器。

据我多年的领悟,编程语言只是一种按照人的意图去实现特定功能的高效工具而已,程序化所实现的核心决策功能依然需要人工智慧来支撑,在量化投资交易领域,投资者所思考的交易逻辑是非常重要,正所谓重剑无锋,大巧不工(真正的剑技不是要依靠剑锋,而是个人的修行,投资也是如此,投资者的素养最为重要),因此应当把80%的时间与精力放到投资模型构建的思考上,20%的时间与精力放到编程实现上。

即将走上量化投资交易的你,工欲善其事,必先利其器,将Python作为量化投资交易的首选语言,无疑是最为明智的,余生很短,请跟我一起用python!

在量化交易方面,通过计算机程序自动实现股票盯盘与找到买卖信号,应该是很多人都比较向往的吧。但九层之台,起于累土,千里之行,始于足下,只有打下坚实的基础,将各个知识点逐一突破后加以综合运用,才能构建自己完整的量化交易体系。

今天就从量化交易最基础的入门知识点讲起,通过Python程序,编写股票价格实时盯盘的机器人,当股价触发一定的涨幅条件时,自动发送电子邮件或短信通知到投资者,这一场景可运用于平时喜欢炒股,但是没有时间盯盘的股民朋友。

通过该文章的学习,读者可以掌握对证券(包括股票和基金)实时价格的获取、电子邮件发送、程序定时运行和程序打包成exe文件等知识点。

例如:2021年7月19日,所监控的目标股票三峡能源(证券交易代码:600905)因某时点的涨跌幅达到监控水平线,自动触发邮件提醒,通过邮件方式告知投资者当前价格,涨跌幅和盈亏情况等数据,效果如下图所示。

一个免费、开源的python财经数据接口包,通过该库的get_realtime_quotes(code)的方法(code为目标证券的交易代码,包括股票和ETF基金的交易代码都可以),可以返回股票的当前报价和成交信息,返回值的数据类型为DataFrame,该DataFram包括name(证券名称),open(今日开盘价),pre_close(昨日收盘价),price(当前价格)…time(时间)等,根据本次需求,仅需要部分维度即可,其他的维度,读者可以自行通过print()打印方式查看所有的维度信息。

数据分析的核心库,因为调用Tushare库的get_realtime_quotes(code)方法返回DataFrame数据类型,所以需要该库对返回数据进行操作。

在证券交易中的制度中,有交易和休市时间,要实现程序的定时运行,该库必不可少,详见程序部分对该库用法的介绍。

在交易日的15:00以后已经闭市,为避免资源的浪费,此时可以调用sys.exit()方法实现程序的自动退出。

其中参数code为目标股票的交易代码,例如股票名称为“三峡能源”的证券交易代码为“600905”。调用Tushare的get_realtime_quotes(‘600905’)方法,即可返回一个DataFrame类型的数据,根据功能需要,我们只需要获取name(股票名称)、price(当前价格)、pre_close(昨日收盘价)、date(价格对应的日期)和time(价格对应的时间)即可。

编写好该方法后,主需要传递目标股票的交易代码至get_now_jiage方法,即可获取需要的数据。

在每个交易日,股票交易的时间为09:30-11:30,13:00-15:00,早上9:30程序开始监控,可以通过schedule来实现(后面讲解),在11:30-13:00之间的午间休市时间内,为避免造成资源浪费,就不必调用Tushare接口的数据,该时间段我们可以称为暂停交易时间。判断是否在暂停交易时间段的方法编写如下:

该模块作为股价监控与计算涨跌幅,判断是否发送通知的核心程序,为了与早间9:30定时运行程序的模块相配合,故该模块写成独立的方法,完整程序如下:

上述if判断语句表示现在涨跌幅的绝对值在3%(含)至3.1%(不含)(使用绝对值可以同时兼顾涨和跌的幅度),或6%(含)至6.1%(不含),或9%(含)至9.1%(不含)之间时,便通过发送电子邮件的形式发送通知,具体的涨跌幅触发参数读者可以自行修改。

其中,email_add为列表形式,可以存放多个接收通知的电子邮件地址,此例中仅设置一个接收地址,全局变量email_add=[……],故获取该地址的程序为email_add[0]。send_msg即为要发送的邮件内容,邮件内容使用列表email_comment进行添加,这里发送的邮件格式为html格式,使用html格式是为了方便绘制表格。html文件的开头应当是,而结尾则是与之配对的,其中绘制表格的标签是table及配对的/table,表格行的标签是tr,而列的标签则是td。

from_addr为发件人的邮箱地址,而password则是发件人的授权码,这里需要根据实际情况进行修改和填写。yb亚博网站

是选择QQ邮箱的SMTP服务器地址smtp.qq.com,默认端口为465,如果是其他邮箱,则应该进行相应的服务器和端口号进行修改。

第一步:登录QQ邮箱,单击顶部的“设置”链接,然后单击“账户”标签,如下图所示。

第二步:在“账户”选项卡中向下滚动,直到看到如下图所示的选项,单击“POP3/SMTP服务”右侧的“开启”链接,如下图所示。

第三步:单击“开启”链接后,会有一个验证密保的过程。按照页面中的说明,向指定号码发送指定内容的手机短信,发送完毕后单击页面中的“我已发送”按钮,会弹出一个框,里面就包含SMTP授权码,把它复制并存储起来,方便以后调用。

当编写完程序以后,就需要通过打包的形式把程序转化为exe格式,该格式下的程序可以点击或者设置自动运行,打包的库是pyinstaller ,使用命令pyinstaller -w -F程序路径\程序名.py 即可。其中-w表示生成的exe文件运行时不出现黑色的DOS界面,我们只需要该程序“悄悄”在后台运行即可。

为了实现程序在电脑开机的时候自动运行,可以将生成的exe文件复制到windwos系统的Startup文件夹下,点击windows的开始菜单-所有程序,找到“启动”或者“Startup”的文件夹,将exe文件复制到该文件夹内,每次开机,电脑就可以自动运行该监控程序。

因为程序运行不出现任何界面,为了查看程序是否在运行,可以用快捷键“Ctrl Alt Delete”的快捷键打开任务管理器,在进程里面可以查看到“股票监控.exe”(这里的文件名是作者改的文件名)的文件,表明程序在监控中。

该程序只是设置了一只股票来作为简单功能实现的案例,仍然有一定的改进空间,说明如下。

一是在实践中,往往都是构建一个股票池(数只股票)来动态监测股价和自动判断交易时点(比如MACD,均线,KDJ指标等),往往需要结合数据库技术,才能便于灵活构造股票池。

二是对于发送短信的功能,本文中并未做介绍,仅介绍了电子邮件,其实短信通知的思路和邮件的思路一致。如果要实现免费发短信功能,读者可以在twilio 网站上()上注册和调用相应功能即可,读者可以再网上搜索。

三是关于Tushare数据接口,本文中用的是Tushare老的接口API,目前官方主要维护的是Tushare Pro接口,相应的调用功能要达到一定的积分才可以,但是相比其他收费接口,Tushare是属于业界的良心之作,关于Tushare Pro,参考的网址详见。

四是其他商业的量化接口,可以推荐聚宽量化接口,大约有半年左右的免费试用期,但是免费过后,每个月还是有几千元的收费,读者可选择使用聚宽网址。

五是关于爬虫获取证券交易数据,现在证券交易数据比较丰富的网站有东方财富、同花顺、新浪财经以及和讯网等。通过爬虫也可以获取相应的数据,但是应当注意的是,像本文中每个交易日每秒钟调用一次API,如果用爬虫来实现,就不理想,因为调用太频繁可能触发网站的反爬虫机制。

六是该程序设置的是在本地计算机上自动开机运行,在程序不断优化和增加功能后,感兴趣的读者可以了解购买云服务器部署监控程序。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注