yutiansut / QUANTAXIS

QUANTAXIS 支持任务调度 分布式部署的 股票/期货/期权 数据/回测/模拟/交易/可视化/多账户 纯本地量化解决方案
https://yutiansut.github.io/QUANTAXIS/
MIT License
8.21k stars 2.97k forks source link

QA回测-模拟配置流程说明文档(Window) #1335

Open 5267 opened 5 years ago

5267 commented 5 years ago

简介:下图是QA项目目前的整体构架图,红色部分包含了目前已经开发完成的工具库(大多数已开源),从流程图中可以看到,QA基本已经能够实现量化交易全通路。需要注意的是, 目前我们已经基本打通了行情(数据的获取—>存储—>接口外放—>可视化—>后期的数据运维)、回测(基于QA的多线程回测系统)、模拟(基于QA的模拟交易撮合系统以及simnow 的仿真交易系统)、实盘(暂未接入)、策略池管理(暂未涉及)、多账户管理及风控(暂未涉及)、绩效评估及收益归因(暂未涉及)、MOM及FOF管理(暂未涉及)、复盘工具 (暂未涉及)、其他各端口的产品外放(暂未涉及)等。本篇主要对前三个部分(行情、回测、模拟)的本地化配置方案和流程进行简要总结,以便后续学习复用。实盘部分的配置会在 以后加入。 image

一、非docker版的配置

电脑配置:Win10/64位/内存最好大于16G, 8G的会比较卡

QA基础服务—配置流程

  1. 下载最新版的anaconda(64位,python3.x以上)注意必须是64位, 后续模拟盘用到的ctpbee只支持64位的python,window安装的过程很简单,在最后的choose install location时, 可以自定义安装目录,最后一步询问你是否add path时,请记得把这个复选框勾上,免得后续还需要自己去添加环境变量,其他的无需累述。anaconda官方下载地址

  2. 下载安装最新版的mongoDB(64位),安装也较为简单(特别注意,最新版的mongodb安装时会提示是否同时安装mongo compass,这个千万不要勾选,国内网速在线下载超级慢, 勾选了会导致安装失败),默认是安装在C盘,也可自定义安装目录,我的建议是自定义安装在一个磁盘空间较大的目录里,因为后续QA会拉数据进来,期货/股票的日线、分钟以及 交易明细数据总共加起来有几百G,而且后续数据还会增量更新,所以尽量挑一个大的磁盘放mongoDB。安装完成之后,打开安装目录就可以看到如下图1的目录文件了。然后,在 mongodb目录下创建两个空文件夹(如图2),并在mongodb\log下面创建一个空的mongo.log。在win10中以管理员身份运行cmd,cd到mongodb\bin目录,运行以下命令(电脑关机 后,下次开机mongodb服务会自己启动)。然后按下图3所示在cmd中输入对应命令:启动MongoDB服务,验证mongo是否已经成功启动。最后,将mongodb的bin完整路径加入 的系统环境变量中,这样在任何目录启动cmd都可以使用mongo命令啦。到此,mongod的配置基本完毕。mongo官方下载地址。最后去官网把配套的mongo可视化工具mongo campass也下载完成一并安装即可(当然你也可以使用Robomongo)。 image

  3. 下载安装QUANTAXIS,一句话命令搞定:pip install quantaxis,具体安装中的各种骚操作可参考QA安装配置文档

小结:弄到这里,你就可以使用QA的基础服务了,包括股票/期货/债券等各周期的数据mongo存储,开启jupyter notebook/jupyter lab,你就可以在notebook/lab里面进行数据获取、 投研分析、策略回测等工作。

QA深层次服务—配置流程

在上一个小结中,我们提到,只要完成了anaconda、mongo以及quantaxis的安装和配置,基本就能玩QA了。不过,这只是第一步。接下来,将继续介绍如何配置QAweb服务,QA后 台服务,QA交易服务,QA行情服务,如何回测,如何模拟等问题。注意:quantaxis整个项目的地址即入口在此

  1. QA后台服务:安装quantaxis_webserver,命令如下,然后启动cmd,在命令行输入:quantaxis_webserver,后台服务即开启成功,后台API说明文档backend_api. image

  2. QAWeb服务:下载QADESK_BASIC到本地,项目地址点这里,保证后台服务开启的条件下,打开index.html,然后你就能那看到如下一个页面,点击登录,就能看到QA提供的几个服务配置界面啦。其中,行情服务器和回测服务由QA后台服务提供(启动quantaxis_webserver即可),端口默认为8010研究服务器由anaconda内置的jupyter提供(cmd中启动 jupyter lab即可,默认端口8888

image

小结:弄到这里,你基本实现了基于QA的一套本地化的行情可视化查阅(主要包括股票期货),jupyter内些数据获取、投研分析、策略回测等基本功能。回测的基本示例代码可以在 quantaxis子目录里的Example找到,以simple_backtest.py为例,复制该代码在jupyter中运行一下,你就能看到策略的回测结果。下一步,将继续介绍如何进行策略模拟。

image

  1. QA模拟交易服务:先把模拟交易的一些列库安装好,包括以下几个,这些库的开源代码都能在这里找到
rabbitmq-plugins enable rabbitmq_management   
rabbitmqctl add_user admin admin    
rabbitmqctl set_user_tags admin administrator    
rabbitmqctl  set_permissions -p "/" admin '.*' '.*' '.*' 

至此,模拟回测的相关库安装配置完毕,可以看到,模拟交易依赖的库/模块很多,这是由QA的模块分离设计理念决定了,给了用户最大的自由度,可以随意组合配置,用熟了之后, 你会发现好处多多。如何模拟交易呢? 下面以au1912黄金期货5分钟的策略回测和模拟为例,你需要在通过cmd命令依次确保以下服务开启(默认端口在开启对应服务时有提示)

quantaixs_webserver: 开启web行情页面和研究页面的后台服务 
jupyter lab:开启jupyter lab研究环境 
qatraderserver:开启交易后台 
QARC_Resample --code au1912 --freq 5min:启动模拟交易品种的数据重采样(au1912是你回测的品种,5min是回测的数据周期频率)
 QARC_Start --code au1912:启动交易品种的策略信号 
QACTPBEE --user 133495(这个可以换成自己的simnow账号,simnow账号可以去simnow官网申请):连接模拟行情

然后,在研究坏境任意开启一个jupyter notebook,将回测策略的代码放进去运行,启动运行模拟盘,就能在web页面的模拟标签页面看到你所模拟交易策略和品种信息啦。

from QAStrategy import QAStrategyCTABase from QIFIAccount import QIFI_Account import QUANTAXIS as QA
from qaenv import (eventmq_amqp, eventmq_ip, eventmq_password, eventmq_port,                   eventmq_username, mongo_ip, mongo_uri) import pandas as pd

#示例策略 
class macd(QAStrategyCTABase):   
    def on_bar(self, bar):        
    #print(bar)        
    if len(self.market_data)> 26:            
        res = self.calc_macd()                        
        ex = QA.CROSS(res['MACD'], 0)            
        ec = QA.CROSS(0, res['MACD'])           
        if ex.iloc[-1]> 0:                
            print('sendorder')                
            self.send_order('BUY', 'OPEN', price=bar['close'], volume= 1)            
        elif ec.iloc[-1]>0:                
              print('sendorder')                
              self.send_order('SELL', 'CLOSE', price=bar['close'], volume= 1)        
     def calc_macd(self):        
           macd = QA.QA_indicator_MACD(self.market_data)        
           return macd.tail()

strategy = macd(code='au1912', frequence='5min', strategy_id='autest', start='2019-10-01') 
# 运行模拟盘 strategy.run_sim()

小结:弄到这里,你基本可以实现从数据的获取、行情的展示、数据的分析、投资研究、策略回测以及模拟交易这些功能啦。如果你有一个想法,基本的落地实现方案就解决啦。策略 如果表现良好,你可以根据策略出现的信号进行手动交易。

image

二、docker版本的配置

大家都体会到了,非docker版本的配置流程相对繁琐,所以QA提供了qaservice,这是QA面向不想自己配环境的小白提供的一键配置环境解决方案,具体怎么配置,QA的文档配置写的 已经很清楚了,我就不多说了,点击这里查看

至于实盘的量化交易、微信信号订阅等这些问题,我们后面再进一步解说,今天就先到这 里,欢迎持续关注。

tbmilk commented 4 years ago

踩坑记录:linux下,jupyter需要配置,才能在QADESK_BASIC打开的网页中,“研究”标签页下显示出jupyter。 在依照此教程一步步配置好qa的基础部件后,下载QADESK_BASIC,打开index.html,结果与此教程出入非常大。当时已经能够在浏览器单独开启jupyter,跑通测试”金叉死叉”案例。开启jupyter时,在浏览器的“研究”标签页,显示全黑色,卡住一样。如果关闭jupyter,那么会显示127.0.0.1无响应。后来去了作者的论坛翻帖子,找到了示例站,http://www.yutiansut.com:81/ 认识了这个东西正常应该的样子。并且找到了jupyter的配置文件,添加后,就能正常显示。保存下面代码到“你的文件.py”,并且运行“jupyter-lab --allow-root --notebook-dir=~ --config /你的目录/你的文件.py”,这样开启jupyter后,就能正常在研究页面显示jupyter。

import os
from IPython.lib import passwd

c.NotebookApp.ip = '*'
c.NotebookApp.port = int(os.getenv('PORT', 8888))
c.NotebookApp.open_browser = False
import os
from IPython.lib import passwd

c.NotebookApp.ip = '*'
c.NotebookApp.port = int(os.getenv('PORT', 8888))
c.NotebookApp.open_browser = False
c.MultiKernelManager.default_kernel_name = 'python3'
c.NotebookApp.token = ''
c.NotebookApp.password = u'sha1:a658c59030b6:910b8fff6920f60a451b19a82e465c60f4880b60'
c.NotebookApp.allow_credentials = True
c.NotebookApp.allow_origin = '*'
c.NotebookApp.allow_remote_access = True
c.NotebookApp.tornado_settings = { 'headers': { 'Content-Security-Policy': "" }}
# sets a password if PASSWORD is set in the environment
# if 'PASSWORD' in os.environ:
#   password = os.environ['PASSWORD']
#   if password:
#     c.NotebookApp.password = passwd(password)
#   else:
#     c.NotebookApp.password = 'quantaxis'
#     c.NotebookApp.token = ''
#   del os.environ['PASSWORD']
yutiansut commented 4 years ago

@tbmilk 这么晚还不睡

tbmilk commented 4 years ago

@tbmilk 这么晚还不睡

我在这里卡了半天,幸好有你的论坛和示例站,不然都要放弃了。

yutiansut commented 4 years ago

@tbmilk 这么晚还不睡

我在这里卡了半天,幸好有你的论坛和示例站,不然都要放弃了。

额... 这其实是属于jupyter的知识点 所以我没有怎么对这块写文档

zhizunbao84 commented 4 years ago

求问,我想要订阅多个股票标的实时30min的bar数据,该怎么配置、操作呢?

yutiansut commented 4 years ago

求问,我想要订阅多个股票标的实时30min的bar数据,该怎么配置、操作呢?

进行情测试群呀 1092330563

lxj0276 commented 3 years ago

有没有最新版2.0的安装文档,按照这个操作 发现quantaxis_webserver是报错的