QTYX系统简介
股票量化交易系统QTYX是一个即可以用于学习,也可以用于实战炒股分析的系统。
分享QTYX系统目的是提供给大家一个搭建量化系统的模版,最终帮助大家搭建属于自己的系统。因此我们提供源码,可以根据自己的风格二次开发。
关于QTYX的使用攻略可以查看链接:QTYX使用攻略
QTYX一直迭代更新,当前版本V2.8.1。后续升级版本会同步更新文档内容。
星球下载位置如下:
功能概览
股票量化交易系统QTYX最终形态是一款全自动化的量化交易系统。
于是,QTYX推出了“下单机器人”功能。
在实盘时“下单机器人”会读取实盘设置参数,以及个股买入/卖出条件单,周期获取全市场最新数据,当判断到个股符合条件就触发报警并执行交易。
这样一来,我们可以把QTYX部署在云服务器上,让QTYX帮我们实时盯盘,当到达我们设定的目标时,通过邮箱、微信或者钉钉等即时聊天工具通知我们,同时也可以委托“下单机器人”自动下单。
配置实盘参数
点击QTYX“交易”后进入子页面。
点击“查看配置参数”按钮后,左边日志栏显示当前实盘配置参数。
如果要更改参数,可以打开trade_para.json文件手动更改。
在实盘阶段,监测时间段在9:25--11:31和12:59--15:01,如果要测试功能,可以使能“测试模式”,并且模拟当前时间为交易时间。
添加交易条件单
“交易条件单”中记录的是实盘中需要交易的股票信息,比如买卖的股票、数量、价格、盘中执行的策略等。如何生成“交易条件单”呢?
交易条件单分为买入(准备买入)条件单和持有(准备卖出)条件单。
点击“导入股票池”后会把自选股中的股票最新行情数据加载到界面中(用于建立条件单)。
点击股票代码后会出现买入/持有单配置界面。
我们根据自己策略分析的结果填写交易方向(买入)、买入的价格、买入的股票数量。如下所示填写“洪涛股份”的交易配置参数:
配置完成后点击确认,就添加到了左侧的“交易股票池”中了。
“持有股票池”中记录的是已持有股票的止盈止损设定值。
盘中触发到止盈止损值时会触发卖出信号。同样,点击“导入股票池”后会把自选股中的股票最新行情数据加载到界面中。点击股票代码,然后选择“持有股票池”会出现配置界面。
我们可以更改止盈止损的模式和幅度,同时配置界面也会显示买入的价格和持有后最高的价格。
目前我们支持的止盈模式是固定比例的,比如买入后涨幅达到10%止盈。止损模式是动态回撤止损,比如买入后股价从最高价下跌5%后就止损退出。
如下所示填写“福蓉科技”的止盈止损配置参数。
点击确认后会添加到“持有股票池”中。
如果要删除该股,更改交易参数,或者更改止盈止损参数的话,双击对应股票池中的股票代码进行选择即可。
另外,当触发“买入条件单”中的股票后,会自动更新至“持有股票池”中。
如果有单独手动下单买入的股票,也可以通过在ConfigFiles/trade_para.json中添加信息方式更新“持有股票池”
启动下单机器人
单独运行QTYX工程下的文件“TradeRobot.py”即可启动“下单机器人”。
在下单机器人TradeRobot.py中有一个TimeTrigger类,可以在其中的trigger_run中添加自己要定时执行的任务:
def trigger_run(self):
while True:
if self.in_trade_time(cur_time):
# 9:25--11:31 12:59--15:01 时段获取数据
print(u"当前时间{0}".format(cur_time.strftime("%Y-%m-%d_%H:%M:%S")))
elif self.before_trade_time(cur_time):
print(u"开始时间{0}--未开盘".format(self.start_time.strftime("%Y-%m-%d_%H:%M:%S")))
elif self.after_trade_time(cur_time):
print(u"结束时间{0}--已收盘".format(self.end_time.strftime("%Y-%m-%d_%H:%M:%S")))
else:
print(u"休息时间-- 11:30至13:00")
time.sleep(CONF_SCAN_TIME) # 3秒采集一次, 执行时间在2秒内, 等待1秒
比如我们在交易时间段三秒周期调用了实时行情获取类RealTimeData的get_daily_thread()接口,也可以在收盘的时候调用这个接口,并且把数据以csv格式存储到本地,或者存到本地的数据库。
远程发送分析报告
实盘时发现该股已经到了买入或者卖出价位时,或者符合止盈止损交易条件时,会远程发送信息提醒。(要记得在ConfigFiles/sys_para.json中填写邮箱信息,在微信上开启QQ邮箱提醒功能,效果如同微信提醒)
如何填写邮箱信息:
发送邮件和核心是SMTP(Simple Mail Transfer Protocol)协议,它是一组用于由源地址到目的地址的邮件传输规则。
Python真的是什么都能做,它对SMTP进行了简单的封装,只需用到两个模块,就可以轻松实现发送纯文本邮件、HTML邮件以及带附件的邮件。
哪两个模块呢?Python内置的email模块负责构建邮件,另一个smtplib模块负责发送邮件。
常规的流程,先把涉及到的模块全部导入进来,如下所示:
首先用MIMEText()构造一个最简单的纯文本邮件,其中第一个参数是邮件正文,第二个参数是内容的类型,比如'plain'表示纯文本邮件,'html'表示HTML邮件。
创建的邮件对象中,要添加From、To和Subject这些属性,否则就不是一封完整的邮件,比如会出现邮件没有主题,发件人的名称为匿名,明明收到了邮件却提示不在收件人中这些情况。
典型的例程如下所示:
再来说说负责发送邮件的smtplib模块,这个模块主要是用smtplib.SMTP()类去连接SMTP服务器,然后发送邮件。
例程中我们会用到几个常用的方法,比如set_debuglevel(1)打印和SMTP服务器交互的所有信息。login()登录SMTP服务器,sendmail()方法发邮件。
典型例程如下所示:
这里的password是个比较容易混淆的地方。不是邮箱登陆的密码,而是授权码。
第三方客户端登录QQ邮箱时是需要授权码的,包括其他邮箱也都一样,比如126、163邮箱等等。授权码可以认为是一个专用密码,适用于登录以下服务:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。
如何设置呢?以QQ邮箱为例,我们在QQ邮件的帮助中心找到了方法。
在个人邮箱页面进入[设置] -> [帐户] 页面找到入口,然后把POP3/IMAP/SMTP这几个服务开启。
开启的时候有验证密保环节,需要发送短信,接着就获取到授权码,在第三方客户端的密码栏里面输入这16位授权码进行验证即可。
这样一来邮件就发送成功了!
自动交易接口
在配置参数对话框中,如果勾选自动交易的话,系统会根据设置的参数自动执行买卖操作。
需要注意的是,QTYX支持接入第三方库easytrader执行自动交易,使用之前在自己的环境上调试好easytrader库即可。
具体可以参考以下公众号文章:
股票量化系统QTYX开启全自动实盘之路——第一弹easytrader库搭建本地自动交易环境
如果大家把自动交易调试稳定的话,可以把自动交易的函数添加到以下代码处,这样就完成了自动交易这个末端环节。
if val['auto_trade'] == True:
print("自动交易需调试交易环境,查看公众号《小散量化炒股记|要克服人性弱点?激活股票全自动化交易!》")
服务器部署下单机器人
我们已经准备好了下单机器人的Python脚本(QTYX目录下的TradeRobot.py),能达到定时执行Python程序的本质还是用到Windows下的任务计划,在日常工作中这个功能经常用于提高工作效率的。
接下来创建一个定时任务来执行这个脚本。
第一步,右键我的电脑,点击管理。在弹出的计算机管理对话框点击任务计划程序—>创建基础任务。
第二步,在弹出的创建基本任务向导输入名称和描述,然后点击下一步。
第三步,在触发器页面设置脚本执行的时间计划,选择每天,点击下一步。
第四步,设置每天触发的时间,点击下一步。
第五步,在操作页面,选择启动程序,点击下一步。
第六步,此处程序或脚本中填写的一般是编译器的名称,一般对Python来说就是Python.exe(找到你的安装路径),添加参数就是你所要执行的Python文件(完整路径),这样填写的本质其实就是在命令行中执行Python一样。
第七步,设置到这里已经算是完成了,接着就是等待它自动执行了。
总结
有了这个框架后,我们就打通了QTYX的下单环节了。QTYX用于选出强势股,下单机器人实盘监测,找到合适的机会下单。
接下去大家可以在这个基础上结合自己的风格进行二次开发。比如盘中根据题材热度实时选股,叠加其他条件进行分析,符合要求直接自动下单等等。
说明
想要加入知识星球《玩转股票量化交易》的小伙伴记得先微信call我获取福利!
知识星球介绍点击:知识星球《玩转股票量化交易》精华内容概览