QUANTAXIS量化工具箱,实现了股票和期货市场的全品种回测.通过分布式爬虫进行数据抓取,构建了响应式的数据清洗和行情推送引擎.搭建了支持多语言的开放式回测框架.并构建了交互可视化的客户端和网站.
[V3.7版本是之前几个功能分支合并而来的开发版本,4.0版本会是完整逻辑的稳定版本]
测试系统 | 语言环境 | 实现功能 |
---|---|---|
Ubuntu 16.04 AMD64 | Python 2.7.6,2.7.11; 3.5,3.6 | 股票/期货回测 |
Windows 10 | Matlab 2016a | 可视化界面 |
R 3.3 | 全平台(W/L/M)客户端 | |
Mac 平台未测试 | Nodejs 7.7.1 npm4.3.0 | 定制化爬虫 |
Vue 2.0 | 纯本地框架 免去策略保密等问题 | |
MongoDB 3.2 / MySQL 5.7 /Redis 3.0.6 |
Test System | Language Environment | Functions |
---|---|---|
Ubuntu 16.04 AMD64 | Python 2.7.6,2.7.11; 3.5,3.6 | CN Stock/Future Backtest |
Windows 10 | Matlab 2016a | Visualization |
R 3.3 | Win/Linux/Mac Client | |
Mac unknown | Nodejs 7.7.1 npm4.3.0 | Crawler |
Vue 2.0 | Local Framework with Safety | |
MongoDB 3.2 / MySQL 5.7 /Redis 3.0.6 |
========
- Python(2.7/3.6) (necessary)
- Nodejs (necessary)
- MongoDB (necessary)
- Matlab (optional)
- R(optional)
- MySQL(optional)
- Redis(optional)
- Wind 万德数据库 财经学子版/大奖章免费版/机构版(optional)
[python]: https://www.python.org/downloads/ "Python"
[nodejs]: https://nodejs.org/en/download/ "NodeJS"
[MongoDB]: https://www.mongodb.com/download-center "MongoDB"
[Wind DataBases] (非必须)
- 大奖章版本 免费 注册可用 日线数据质量较好 其他基本不稳定
- 财经学子版 需要学生证认证 申请地址(http://xz.wind.com.cn/university/home/index.html)
- 机构版
git clone https://github.com/yutiansut/quantaxis
cd quantaxis
=== 以下步骤是为了启动后台,如果你不需要这些功能,可以不安装
=== 根据你的网络速度不同,安装需要一定的时间
cd backend
npm install
cd ../web
cd npm install
cd ../client
npm install
cd app
npm install
(后台的作用主要是为了给回测提供API,同时给两个前端提供调用,如果只需要爬虫等,也不需要启动)
[新建一个命令行窗口](启动后台)[确保localhost:3000端口是空着的]
cd backend | npm start
(如果不需要网站,下面的步骤可以省略)
[再新建一个命令行窗口](启动前端网站的后台)[确保localhost:8080端口是空着的]
cd web | npm run dev
(如果不需要启动客户端,下面的步骤可以省略)
[再新建一个命令行窗口](启动客户端的后台)[确保localhost:9080端口是空着的]
cd client | npm run dev
QUANTAXIS推荐在局域网内或者单机使用,适用于中小型团队的回测情景:服务器+N个客户端,客户端--AJAX请求--服务器
- windows用户还面临MongoDB的注册服务问题,百度即可
- Mysql在Matlab回测时会用到,到QUANTAXIS 3.9版本 会增加Matlab-MongoDB支持
- 其他的问题 可以开issue
Python作为胶水语言,贯穿项目的始终.Nodejs作为后台语言,为所有语言提供Api,并作为一个任务中转
(*)Python-Celery 作为任务调度+redis
Nodejs-Express作为后端部分,提供api分发和部分的爬虫
Nodejs-Vue 作为前端,提供前端和客户端框架
Matlab 作为一个回测中心,提供快速的原型实现
R语言作为数据分析的选项,并不是一定使用
-
爬虫部分 采用python的Scrapy+Phantomjs+selenium构架,使用redis(coookies/cache)+Mongodb(data)架构
-
数据清洗部分 python+matlab
-
数据库 主数据库Mysql 爬虫数据库 Mongodb 性能数据库 redis
-
数据可视化 nodejs+vue.js+d3.js
-
统计学部分 增加传统金融的统计学函数,以及机器学习部分的函数
QASpider 部署在linux服务器上,负责数据的爬取,包括且不限于股票日线/tick/公司信息/分析师推荐/各大财经网站信息/微信公众号信息 爬取的数据在服务器的Mongodb上,通过QUANTAXIS Storage转入 MYSQL
localhost:3000/stock
### /stock/history/all?code=xxx&feq=xxx
### /stock/history/time?code=xxx&start=(yyyy-mm-dd)&end=(yyyy-mm-dd)
### /stock/index/
### /stock/live?code=xxx
### /stock/quota/lhb?
### /stock/quota/lhb?
localhost:3000/backtest
### /ts?bidCode=000001&bidTime=2001-01-04&bidPrice=4.08
返回Success 则成交 返回failed 则不成交
一定要给报价
localhost:3000/users
### /signup?username=xxx&password=xxx
### /login?username=xxx&password=xxx
localhost:3000/apis
### /queryContentbyName
### /queryTitlebyName
### /queryContentbyTitle
负责 管理redis,Mongodb与MySQL的同步 策略代码的回测API 用户策略,文章等
负责 数据可视化,提供交互式的策略展示 负责 后端数据API打包
负责 模拟交易(本地),(多语言)回测 网上平台的模拟交易API
python,matlab,r....等通过访问url来获取数据,也可以本地缓存
#coding:utf-8
import requests
code='600010'
startdate='2015-06-02'
enddate='2016-06-02'
data=requests.get("http://localhost:3000/stock/history/time?code="+str(code)+"&start="+str(startdate)+"&end="+str(enddate))
lists=data.json()
print(lists[1])
"""
expected results
PS C:\quantaxis\analysis\python> python .\example.py
['2015-06-03', '6.650', '6.650', '6.500', '6.360', '5524387.00', '-0.150', '-2.26', '6.522', '6.752', '6.584', '6,709,222.70', '6,794,033.70', '6,807,961.80', '3.51']
"""
for item in lists:
print (item)
print (item[0])
"""
expected results
['2016-05-25', '2.840', '2.860', '2.830', '2.810', '425533.31', '0.000', '0.00', '2.866', '2.856', '2.920', '860,444.06', '873,558.26', '786,931.30', '0.27']
2016-05-25
['2016-05-26', '2.810', '2.870', '2.870', '2.770', '794664.00', '0.050', '1.77', '2.856', '2.857', '2.910', '704,760.36', '886,065.95', '787,090.14', '0.50']
2016-05-26
['2016-05-27', '2.850', '2.870', '2.850', '2.820', '522716.97', '-0.020', '-0.70', '2.848', '2.860', '2.901', '591,625.25', '879,393.86', '772,030.30', '0.33']
2016-05-27
['2016-05-30', '2.810', '2.940', '2.850', '2.790', '1112251.75', '0.000', '0.00', '2.844', '2.859', '2.891', '674,735.42', '904,095.74', '801,551.60', '0.71']
2016-05-30
['2016-05-31', '2.840', '3.080', '3.050', '2.830', '2854263.75', '0.200', '7.02', '2.890', '2.876', '2.889', '1,141,885.96', '1,042,361.24', '907,747.91', '1.81']
2016-05-31
['2016-06-01', '3.010', '3.080', '3.000', '2.980', '2053142.25', '-0.050', '-1.64', '2.924', '2.895', '2.886', '1,467,407.74', '1,163,925.90', '978,492.32', '1.30']
2016-06-01
['2016-06-02', '2.970', '3.020', '2.990', '2.940', '1135590.38', '0.000', '0.00', '2.948', '2.902', '2.882', '1,535,593.02', '1,120,176.69', '1,007,985.72', '0.72']
2016-06-02
"""
回测的主要思想是--交易api给出是否成交的判断,其余逻辑在各自语言框架内执行
trade=requests.get("http://localhost:3000/backtest/ts?bidCode=000001&bidTime=2001-01-04&bidPrice=4.08")
if (trade.text == "success"):
# do something
else :
# do another thing
Strategy 部分是一些策略,有md文件,也有对应代码.策略才是最核心的东西
文档部分
异步任务
1.0版本使用的主要是新浪网的数据。
1.5版本是在了解了对象化编程OOP以后对于平台做的改进
2.0版本主要是对于数据源进行了更换,并重新写了数据库连接和调用函数。从2.0起,quantaxis使用wind服务商提供的量化交易数据并选择mysql作为数据存储方式。
2.5版本则主要增加了交易内核 QUANTCORE 1.0 QC1.0还是一个静态的交易系统,成交的判断方式是以策略报价和历史成交价区间的比较进行判定。
3.0版本将matlab的及时数据以json格式保存到状态空间或者mysql中,使用ajax技术对于mysql数据进行抽取,使用dc.js等可视化javascript将数据展示在页面上,形成交互式的数据可视化方案
3.2 模块化编程 将class重新改包,定义功能化模块,方便调用并增加生命周期
3.5 重构版本 重新定义前后端以及数据块逻辑.
3.6 重构版本 关于SPIDER和VIUSALIZATION的重大更改,去除DATACENTER模块
3.7 合并版本 同时增加期货部分(目前只支持国内期货市场),加入R语言支持
In quantaxis4.0 version, we try to merge these components back together and rebuild and redefind a completely logic.