解锁实盘交易,打通量化系统交易环节!股票量化分析工具QTYX-V2.3.9


43658a4a0a09e65aa3d67279312523ed.png

前言

fd51a2125fb24a5b52409f51d7c17a15.png

本期我们把股票量化分析工具QTYX的“交易”子页面给解锁了,这样一来,就打通了量化交易系统从分析到交易的完整过程,注意当前的QTYX版本升级到了2.3.9。

QTYX完整架构如下所示,其中包括了QTYX股票量化分析系统和实盘机器人两部分,它们之间是以交易条件单的形式链接起来的。

8b1fa53977b7dd41322bcbab47b11f54.png


ca584fe2d039be34f627042d4f7aadf0.png

交易条件单生成

9af57419235163d698ba1a95d2164f63.png

交易条件单是在自选股票池和编写的交易策略基础之上生成的,也就是说通过使用QTYX股票量化分析系统所提供的功能经过一系列的分析,然后生成条件单去交易股票。

这些分析功能比如双底形态选股、RPS排名选股、金叉死叉策略、跳空缺口分析等等。关于这方面具体介绍可以查看往期的公众号《搭建系统》专题,本期重点来介绍下生成交易条件单的方法。

点击“交易”后进入子页面。

473381e98c91d54f88a79f1c01952082.png

点击“加载自选股”后会把自选股中的股票最新行情数据加载到界面中。bae05df79dac4d91b23f3ad6b1bcfe2b.png

点击股票代码后会出现交易单配置界面。我们根据自己策略分析的结果填写交易方向(买或者卖)、买卖的价格、买卖的股票数量。实盘时发现该股已经到了符合交易的条件时,默认会远程发送信息提醒。7adba4724b1b4ad39ea6653e73602ecd.png

如果勾选自动交易的话,系统会根据设置的参数自动执行买卖操作。需要注意的是,使用自动交易功能要提前测试好自动交易环境。可以参考以下公众号文章。

小散量化炒股记|要克服人性弱点?激活股票全自动化交易!

0c4d4b06f73516c7db3fe897606c9fd9.png

配置完成后就添加到了左侧的交易股票池中了。

0a79546193644c35c0c5148647c367d4.png

如果要删除或者更改参数的话,只需双击股票池中的股票即可。

c5b9554fb7e099f7c9b7b2af84026192.png


32a4178beaebc58e2fb2936ca121d561.png

交易条件单解析

8acb663f7e828d0046780884b712c068.png

实盘时启动“实盘机器人”程序,它会读取条件单的配置,然后在每3s获取到全市场最新数据时,判断下条件单中的指令,符合条件的就执行交易。

条件单是以Json格式存储的。a0c3690e7d2d05c1269d0180e1d87035.png

需要注意的是目前系统是按T+1的方式执行交易的。也就是说,收盘后进行复盘,产生第二天的交易计划。

80088dd6fe0cf6ee4b3fe13f1ba54ebf.png

启动量化机器人

223a70e11d754d99bd812d79ddce62f7.png

使用Windows下的任务计划,定时执行准备好的量化实盘机器人Python脚本。

接下来创建一个定时任务来执行这个脚本。

第一步,右键我的电脑,点击管理。在弹出的计算机管理对话框点击任务计划程序—>创建基础任务。

f2a06baa4fe34a18f4c0ca49f8abceba.png

第二步,在弹出的创建基本任务向导输入名称和描述,然后点击下一步。

625948696355afb319c6f36923a20a7e.png

第三步,在触发器页面设置脚本执行的时间计划,选择每天,点击下一步。

e010706ae272c304e9cd21f408396506.png

第四步,设置每天触发的时间,点击下一步。

689b8b69a304e622ff2d8fb3cedc809e.png

第五步,在操作页面,选择启动程序,点击下一步。

90bc8c397f015eb95393f7a2d7ed9a93.png

第六步,此处程序或脚本中填写的一般是编译器的名称,一般对Python来说就是Python.exe(找到你的安装路径),添加参数就是你所要执行的Python文件(完整路径),这样填写的本质其实就是在命令行中执行Python一样。

5db18ad6fb27453e3fd93d954ce028a3.png

第七步,设置到这里已经算是完成了,接着就是等待它自动执行了。

212963287069628ae3166c7c813a5071.png

5fb8778f0e09257880a4956fad09acfa.png

4c0cecc901fcf49299bb881cb8e3960d.png

实时行情数据获取

987af83a476722c0e45b617210db1d65.png

本主题提及的A股实时行情数据获取,是类似于Level1级别的更新,最快可以达到每间隔3秒以爬虫的方式从财经网站上实时采样获取到的。

如下图所示,数据类型有“最新价”、 “最高”(当前)、 “最低”(当前)、 “涨跌幅”(当前)、 “成交量(当天累加)”、 “成交额(当天累加)”、 “换手率”、 “市盈率”,然后我们增加一列“当前时间”,表示获取实时数据的时间。因为这些数据在财经网站上是实时更新的,所以有必要增加这一列。

875183f1b98512c13e7d58b806a50733.png


我们获取数据的交易时段是9:29至11.31,12:59至15:01,每间隔3秒获取一次数据,并且以csv文件格式存储。

6b3bb6dba48fa26f89de0d1f3955e54e.png

我们使用多线程爬虫技术实现行情数据获取。

我们看到网页上显示总共有232页,通常大家是用for...in循环的方式爬取的。

但是面对几千只股票的行情数据时,下载过程势必会出现耗时过长的情况,从而导致超过3秒间隔的采样精度。

ca2aaa8973a21ceff840de0075e50214.png

我在书中《Python股票量化交易从入门到实践》介绍了多进程和多线程的提速方案。

当涉及复杂的计算、繁多的 I/O 操作时,可以考虑使用多任务并行方式充分利用CPU多核性能来提高程序的执行效率。

在Python中由于GIL机制的的存在,多进行和多线程在计算密集型和I/O密集型的任务场景中执行效率会有所不同,多线程更适合 I/O 密集型应用,多进程对于 CPU 密集型的应用表现更好。

书中的例程,分别对比介绍了for循环方式、多线程方式和多进程方式。遍历获取股票池中前500只股票的1年的数据,测试的结果是:

  • for循环:55秒

  • 8个线程:7.5秒

  • 8个进程:7.8秒

可见,当我们获取A股几千只股票,过去几年甚至十几年数据的时候,如果以调用API接口方式,用for循环去获取股票数据,耗时非常严重。

那么,对于爬虫来说,它适合多线程还是多进程呢?

爬虫是基于网络请求模块urllib实现的。urllib3扮演了 HTTP 客户端的角色,即向网络服务器发送一个 HTTP 请求,然后等待网络服务器的响应,这类任务属于 I/O 密集型的任务。不同于计算密集型任务那样会在整个时间片内始终消耗 CPU 的资源,I/O 密集型的任务大部分时间都在等待 I/O 操作的完成。

接下来我们就以爬虫方式获取财经网站股票每日实时行情数据为场景,扩展介绍下多线程的提速方案。

关于爬虫的实现过程可参考知识星球以下主题:

c7de0c0863c171fa240a2a79db1dce8f.png

那么我们可以将该任务分配给多个线程来完成,而不只是让一个线程去逐一读取。

在 Python3 中内置了线程池模块 ThreadPoolExecutor,通过 ThreadPoolExecutor模块来实现多线程的处理。

对于爬虫任务来说,每一页仅仅是URL地址不同。因此按模块的使用要求,将爬虫任务crawer_daily()函数拆分为执行函数map_fun( )和可迭代参数 itr_arg 两部分。

关键代码如下所示:

with ThreadPoolExecutor(max_workers=8) as executor:# map_fun 传入的要执行的map函数# itr_argn 可迭代的参数# result  返回的结果是一个生成器results = executor.map(crawer_daily, itr_arg)

每一页只有20只股票的数据,因此我们需要把数据合并成一份DataFrame,最后保存为本地的csv文件。

关键代码如下所示:

for ret in results:df_daily_stock = df_daily_stock.append(ret, ignore_index=True)
df_daily_stock.to_csv(Path(store_path+u<span data-raw-text="" "="" data-textnode-index="58" data-index="1576" class="character">"{}.csv<span data-raw-text="" "="" data-textnode-index="58" data-index="1583" class="character">".format(df_daily_stock[<span data-raw-text="" "="" data-textnode-index="60" data-index="1607" class="character">"当前时间<span data-raw-text="" "="" data-textnode-index="60" data-index="1612" class="character">"].values[0])), columns=df_daily_stock.columns, index=True, encoding='GBK')

打开csv文件如下所示:

16c3c0cceaea98d20967f39c0753aa3b.png

需要注意到的是增加了“当前时间”列,在盘中获取实时数据的话,对应的时间会体现数据更新的时间戳。

还有一个重要点是文件名,这里取的名字是“2021-08-27 15/00/00.csv”,如果是实时数据的话要体现出时/分/秒的信息。

关于测试的结果,我用了8个线程,执行的时间在0.5秒左右。也就是说,更新一次实时数据只需要0.5秒左右,是远小于3秒的采样周期的。

另外,如果我们只在收盘时增量更新日线数据,那么每天只需要花1秒时间就能更新完当日A股市场全部股票数据。

91aef78a6c6c97b46a1622c981f9e3ff.png

由于测试环境千差万别,此处测试结果仅供大家参考。 大家也可以亲手对比下多线程和多进程的效率。

a25ab0b2e5034b871e6c3a52aea6bd6e.png

盯盘触发条件远程提醒

b73aab90c3619ce461d0dd759ff4ade9.png

远程提醒的功能,解决方案有用微信、短信、邮件、钉钉之类的方式。这里我们介绍下邮箱这种相对有效的方式来远程提醒。

发送邮件和核心是SMTP(Simple Mail Transfer Protocol)协议,它是一组用于由源地址到目的地址的邮件传输规则。

Python真的是什么都能做,它对SMTP进行了简单的封装,只需用到两个模块,就可以轻松实现发送纯文本邮件、HTML邮件以及带附件的邮件。

哪两个模块呢?Python内置的email模块负责构建邮件,另一个smtplib模块负责发送邮件。

常规的流程,先把涉及到的模块全部导入进来,如下所示:

5c5457668f319ec6f8df3591ca1dbbbc.png

首先用MIMEText()构造一个最简单的纯文本邮件,其中第一个参数是邮件正文,第二个参数是内容的类型,比如'plain'表示纯文本邮件,'html'表示HTML邮件。

创建的邮件对象中,要添加From、To和Subject这些属性,否则就不是一封完整的邮件,比如会出现邮件没有主题,发件人的名称为匿名,明明收到了邮件却提示不在收件人中这些情况。

典型的例程如下所示:

1e5518f0da7e4d741da3b1780366bb4d.png

再来说说负责发送邮件的smtplib模块,这个模块主要是用smtplib.SMTP()类去连接SMTP服务器,然后发送邮件。

例程中我们会用到几个常用的方法,比如set_debuglevel(1)打印和SMTP服务器交互的所有信息。login()登录SMTP服务器,sendmail()方法发邮件。

典型例程如下所示:

e3cf254977c511056edd281ae9877d70.png

这里的password是个比较容易混淆的地方。不是邮箱登陆的密码,而是授权码。

第三方客户端登录QQ邮箱时是需要授权码的,包括其他邮箱也都一样,比如126、163邮箱等等。授权码可以认为是一个专用密码,适用于登录以下服务:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。

如何设置呢?以QQ邮箱为例,我们在QQ邮件的帮助中心找到了方法。

在个人邮箱页面进入[设置] -> [帐户] 页面找到入口,然后把POP3/IMAP/SMTP这几个服务开启。

e95d573cea5fcbbdf84bb5b9b2eeff7c.png

开启的时候有验证密保环节,需要发送短信,接着就获取到授权码,在第三方客户端的密码栏里面输入这16位授权码进行验证即可。

6e4fc45d0f43e19d7313124cae5e05a9.png

30c7150f3022f97f5cc09fb796616824.png

这样一来邮件就发送成功了,我已经得到量化交易条件单触发提醒了!!!手机邮箱也一样可以收到哦!

6c59c2903f3d391a62013e08450f56e1.png

说明

1. 我们会把完整的源码上传到知识星球《玩转股票量化交易》中,帮助小伙伴们更好地掌握这个方法。

2. 想要加入知识星球《玩转股票量化交易》的小伙伴记得先微信call我获取福利,名额有限先到先得!

151236c3cb7cd2ddc79e97f79974c913.png

元宵大师的量化交易书籍开售!!
京东、当当、天猫有售!!

324c6ed55a33d1a041180ad1caefbd99.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/41803.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自己做量化交易软件(43)小白量化实战16--利用小白量化金融模块在恒生PTrade交易系统(交易端)上仿大智慧指标回测及实战交易设计

自己做量化交易软件(43)小白量化实战16–利用小白量化金融模块在恒生PTrade交易系统(交易端)上仿大智慧指标回测及实战交易设计 量化产品PTrade(Personalise Trade)交易系统采用事件驱动式回测平台&#xff0c;与聚宽量化平台类似的量化框架&#xff0c;内置Ta-lib金融模块&am…

量化投资 | 量化交易平台工具汇总

量化投资必备手册&#xff0c;分享30个量化交易平台给你们&#xff0c;转需&#xff0c;不用谢&#xff01; 1. 掘金量化 量化交易系统官方网址&#xff1a;https://www.myquant.cn/ 2、国泰君安量化交易系统 量化交易系统网址&#xff1a;https://quant.gtja.com/ 3. 量化云…

初学Linux—解决开机卡在用户登录界面的问题

1.Linux关机之后开机界面卡在登录界面没有反应&#xff1b; 可能是我删除了某个文件… 2.解决办法&#xff1a; ctrlaltF2 ;切换终端 su root ;切换到超级用户 然后会弹出输入密码提示&#xff0c;直接输入超级用户的密码&#xff08;注意&#xff1a;linux中密码不会回显&am…

centos6.8开机一直卡在登录界面,无法登录

** **后面发现&#xff0c;问题出在&#xff0c;前几天配置的 java的jdk&#xff0c;还有mysql的环境变量上。 ** 解决问题的方法 使用CtrlAIt F3&#xff0c;竟然命令控制面板&#xff08;但是&#xff0c;进去后&#xff0c;你使用指令&#xff0c;比如&#xff0c;vi,ls -…

Ubuntu开机后卡在登陆界面进去不

系统&#xff1a;Ubuntu18.03 系统跑代码卡死了&#xff0c;导致鼠标键盘都用不了&#xff0c;直接强制关机后&#xff0c;卡在登陆界面进不去 步骤&#xff1a; 1. 系统启动后&#xff0c;在BIOS引导界面按"ESC"键进入选择菜单&#xff0c;选择第一个"*Ubun…

记一次绕过安全狗与360艰难提权

0x01 前言背景 端午短暂休息三天&#xff0c;复工之后朋友又丢给我一个Webshell&#xff0c;在打台球途中了解了一下这个奇怪的shell&#xff0c;说是无法执行命令&#xff0c;经过测试发现只能执行dir命令&#xff0c;确实奇怪&#xff0c;草草打了几局台球就回去拿起电脑开日…

为什么我骂360弱智 周鸿祎却说“谢谢”

好吧&#xff0c;我承认我标题党了&#xff01; 不过&#xff0c;有图有真相&#xff01; 事情的起因是我在360开发者平台&#xff0c;提交了我们的客户端“缘创派”&#xff0c;这是一个给互联网创业者找创业合伙人的应用。之前上传的是1.0版本&#xff0c;最近更新了功能更为…

曾遭周鸿祎全网封杀的 360 猛将 :草根打工到 36 岁身家上亿的逆袭!

作者 | 云游小生 来源 | 纯洁的微笑&#xff08;ID:keeppuresmile&#xff09; 猎豹六周年&#xff0c;傅盛在内部演讲&#xff1a; “有部电视剧叫《奋斗》&#xff0c;名字很好&#xff0c;帅哥靓女&#xff0c;青春励志。 但看了开头&#xff0c;我就看不下去了。作为一个奋…

360 软件误报 与流氓战斗到底

写了个音乐贺卡软件&#xff0c;却被360报病毒 估计是设计到了一个音乐贺卡打包功能 这是非常令人气愤的 辛苦的工作&#xff0c;创意的想法&#xff0c;终于实现&#xff0c;最后却被这些杀毒的流氓误报&#xff0c;害的别人不能使用。 于是在360官方提交了误报检测 检测…

谁敢说360不行? 那是你不会用!教你制服360

360的强大与流氓想必是萦绕在大家耳边最耳熟能详的两个词了。 没错&#xff0c;360是很强大却也很流氓&#xff0c;但是稍微动动手就能还你的电脑一片清净 此次测试最新版360安全中心13.0&#xff0c;亲测&#xff0c;以身犯险 针对小白&#xff0c;大佬勿扰 一、安装过程 二、…

千万不要使用360安全管家

我以前使用过360&#xff0c;360广告超级多&#xff0c;360搜索引擎也答非所问&#xff0c;edge主页也经常被修改&#xff0c;如果安装了&#xff0c;可以这样做。 方法1&#xff08;亲测&#xff09;---------------------------------------- 1.使用360卸载360&#xff0c;…

曾遭周鸿祎全网封杀的360猛将 :草根打工到36岁身家上亿的逆袭!

这是微笑哥再次给大家带来的人物分享。 全文7000字&#xff0c;阅读请谨慎。 作者 | 云游小生 来源 | 纯洁的微笑 转载授权&#xff08;ID:keeppuresmile&#xff09; 00 猎豹六周年&#xff0c;傅盛在内部演讲&#xff1a; “有部电视剧叫《奋斗》&#xff0c;名字很好&#x…

【OpenGL学习一】用OpenGL绘制图形,制作动画

1.OpenGL基本框架 1.1OpenGL简介 OpenGL(Open Graphics Library&#xff0c;开放图形库)&#xff0c;是三维计算机图形和模型库。作为一个性能优越的图形应用程序设计界面&#xff08;API&#xff09;&#xff0c;它独立于硬件和窗口系统。并在军事、广播电视、CAD/CAM/CAE、…

工业动画制作过程介绍(一)——静态简笔图画的制作

在工业控制系统中&#xff0c;为了使控制界面更加人性化&#xff0c;需要制作各种简单的动画 来显示机器的运行状态&#xff0c;那么对于非工业设计等设计类的专业者来说&#xff0c;制作这些动画并非易事&#xff0c;而网上又没有可用的资源。那么怎么办呢&#xff0c;非专业人…

使用Qt动画框架设计角色的二维动画

使用Qt动画框架设计角色的二维动画 Qt的动画框架是Qt4.6新添加的一个重要的特性&#xff0c;有了它&#xff0c;开发人员可以制作激动人心的动画界面&#xff0c;而不必局限于单调的固定窗口了&#xff0c;可以说&#xff0c;Qt动画框架是其它界面库少见的功能&#xff0c;它带…

Unity 3d人形动画 一边走一边吹泡泡

资源下载并导入&#xff1a; Robot Kyle 导入标准资源库并修改资源库过时的错误 >>点击此处查看教程 这样就解决了 我们都知道&#xff0c;标准资源包里的人物&#xff0c;是自带脚本的。 而这些脚本&#xff0c;也可以应用到这个没有脚本的机器人上面&#xff0c;只需要…

unity人物基础动画应用。行走、待机之类的简单动画切换。

[TOC]unity人物基础动画应用 1.将动画或带有动画的&#xff0c;模型导入到unity 直接将项目拖入资源层级就好。这里推荐一个网站&#xff0c;可以给导入网站的模型自动绑骨&#xff0c;并且可挑选动画下载。网站自身也带有很多模型可以直接下载。免费又好用&#xff0c;就是可…

Unity中制作动画

1.创建一个 Cube 模型 2. 点击 Window->Animation->Animation 按钮&#xff0c;打开动画编辑面板(快捷键Ctrl6) 3. 点击 Create 按钮&#xff0c;保存新建的动画文件&#xff0c;我命名为“Cube.anim”创建好界面如下 4.点击 Add Preoperty&#xff0c;选择合适的想要改变…

unity人物素材制作动作,导入unity行走、跑步动画,并用Animator Controller加脚本进行控制

初学Unity的关于制作人物动作、导入unity动画、控制人物移动的简单小结 因为网上的关于人物动画制作、导入、控制运动的文章都不太全面&#xff0c;所以自己制作了一个小结来总结一下&#xff0c;这是我当前做出来的效果图&#xff0c;穿墙效果还未改&#xff0c;这里可以通过…