[关闭]
@Channelchan 2018-10-03T10:54:29.000000Z 字数 5384 阅读 2031

VNPY数据入库

数据 vnpy

MongoDB

安装

下载最新版安装包直接安装后启动:
https://www.mongodb.com/download-center?utm_source=manual&utm_campaign=download-mongodb-navbar-cta&utm_medium=docs#community

官方文档:https://docs.mongodb.com/manual/

pymongo

pymongo是MongoDB的python接口,在python程序中可以用该接口操作MongoDB。
使用文档:http://api.mongodb.com/python/current/

JAQS

JAQS是一个开源量化策略研究平台,由交易专家和金融技术专家共同设计,实现了自动化信号研究、高效策略开发和多维度回测分析,支持Alpha、CTA、套利等策略的实现。JAQS从实战而来,经实盘检验,本地化开发部署,保障策略安全。

可以通过jaqs获取数据并写入mongodb用于vnpy的回测。

官网:https://www.quantos.org/

jaqs需要注册账号,通过官方给的token登陆后才能获取数据。
在官网中点击右上角的登陆,注册账户登陆后,点击右上角的账户头像选择查看api令牌即可获取token。

jaqs文档: https://www.quantos.org/jaqs/doc.html

VNPY数据标准

VNPY对数据格式有一定的要求,只有满足该要求的数据才能用于回测,下面是VNPY定义的数据结构体。

BAR(分钟数据)

  1. ########################################################################
  2. class VtBarData(VtBaseData):
  3. """K线数据"""
  4. #----------------------------------------------------------------------
  5. def __init__(self):
  6. """Constructor"""
  7. super(VtBarData, self).__init__()
  8. self.vtSymbol = EMPTY_STRING # vt系统代码
  9. self.symbol = EMPTY_STRING # 代码
  10. self.exchange = EMPTY_STRING # 交易所
  11. self.open = EMPTY_FLOAT # OHLC
  12. self.high = EMPTY_FLOAT
  13. self.low = EMPTY_FLOAT
  14. self.close = EMPTY_FLOAT
  15. self.date = EMPTY_STRING # bar开始的时间,日期
  16. self.time = EMPTY_STRING # 时间
  17. self.datetime = None # python的datetime时间对象
  18. self.volume = EMPTY_FLOAT # 成交量
  19. self.openInterest = EMPTY_INT # 持仓量

TICK数据

  1. class VtTickData(VtBaseData):
  2. """Tick行情数据类"""
  3. #----------------------------------------------------------------------
  4. def __init__(self):
  5. """Constructor"""
  6. super(VtTickData, self).__init__()
  7. # 代码相关
  8. self.symbol = EMPTY_STRING # 合约代码
  9. self.exchange = EMPTY_STRING # 交易所代码
  10. self.vtSymbol = EMPTY_STRING # 合约在vt系统中的唯一代码,通常是 合约代码:交易所代码
  11. # 成交数据
  12. self.lastPrice = EMPTY_FLOAT # 最新成交价
  13. self.lastVolume = EMPTY_FLOAT # 最新成交量
  14. self.volume = EMPTY_FLOAT # 今天总成交量
  15. self.openInterest = EMPTY_INT # 持仓量
  16. self.time = EMPTY_STRING # 时间 11:20:56.5
  17. self.date = EMPTY_STRING # 日期 20151009
  18. self.datetime = None # python的datetime时间对象
  19. self.type = EMPTY_STRING # 主动买或主动卖
  20. self.volumeChange = EMPTY_INT
  21. self.localTime = EMPTY_STRING
  22. # 常规行情
  23. self.openPrice = EMPTY_FLOAT # 今日开盘价
  24. self.highPrice = EMPTY_FLOAT # 今日最高价
  25. self.lowPrice = EMPTY_FLOAT # 今日最低价
  26. self.preClosePrice = EMPTY_FLOAT
  27. self.upperLimit = EMPTY_FLOAT # 涨停价
  28. self.lowerLimit = EMPTY_FLOAT # 跌停价
  29. # 五档行情
  30. self.bidPrice1 = EMPTY_FLOAT
  31. self.bidPrice2 = EMPTY_FLOAT
  32. self.bidPrice3 = EMPTY_FLOAT
  33. self.bidPrice4 = EMPTY_FLOAT
  34. self.bidPrice5 = EMPTY_FLOAT
  35. self.askPrice1 = EMPTY_FLOAT
  36. self.askPrice2 = EMPTY_FLOAT
  37. self.askPrice3 = EMPTY_FLOAT
  38. self.askPrice4 = EMPTY_FLOAT
  39. self.askPrice5 = EMPTY_FLOAT
  40. self.bidVolume1 = EMPTY_FLOAT
  41. self.bidVolume2 = EMPTY_FLOAT
  42. self.bidVolume3 = EMPTY_FLOAT
  43. self.bidVolume4 = EMPTY_FLOAT
  44. self.bidVolume5 = EMPTY_FLOAT
  45. self.askVolume1 = EMPTY_FLOAT
  46. self.askVolume2 = EMPTY_FLOAT
  47. self.askVolume3 = EMPTY_FLOAT
  48. self.askVolume4 = EMPTY_FLOAT
  49. self.askVolume5 = EMPTY_FLOAT

快速入库脚本

在课件中包含了本次课程需要用来回测的数据,需要将这些数据录入数据库。
进入课件的October/vnpydatacourseCam/data目录:

windows

双击restore.bat文件即可运行
结束后会在窗口中输出 输入任意命令继续的字样

macos

打开terminal,进入该目录,输入

  1. python restore.py

结束后会进入等待命令的状态。

数据入库需要一段时间,请等待程序运行完。

历史数据更新

安装

使用 git clone 该项目:https://github.com/xingetouzi/vnpy_fxdayu_data

git clone https://github.com/xingetouzi/vnpy_fxdayu_data.git

windows git 下载地址:https://git-scm.com/download/win
如何打开?:点击windows -> 搜索 git -> 打开 git bash
macos自带git,直接在terminal中输入即可。

使用

该项目目前接入了jaqs,oanda,和binance的数据。项目代码分别放在jqdata,oanda,binance目录中,其中的conf.yml文件配置了需要下载数据的范围。

jqdata

  1. # jaqs登录配置
  2. login:
  3. # 服务器地址
  4. addr: tcp://data.quantos.org:8910
  5. # 登录用户名
  6. username: "18566262672"
  7. # 登录密码
  8. password: "eyJhbGciOiJIUzI1NiJ9.eyJjcmVhdGVfdGltZSI6IjE1MTI3MDI3NTAyMTIiLCJpc3MiOiJhdXRoMCIsImlkIjoiMTg1NjYyNjI2NzIifQ.O_-yR0zYagrLRvPbggnru1Rapk4kiyAzcwYt2a3vlpM"
  9. # 数据库配置
  10. mongodb:
  11. # 连接地址
  12. host: localhost:27017
  13. # 存储数据的database名
  14. db: VnTrader_1Min_Db
  15. latest: VnTrader_1Min_Db_latest
  16. # 下载历史数据
  17. history:
  18. # 开始时间
  19. start: 20180901
  20. # 要下载的数据的品种,可通过 jaqs.data.DataApi.query("jz.instrumentInfo") 接口查询。
  21. symbols:
  22. - AP.CZC
  23. - j.DCE
  24. - cu.SHF
  25. latest:
  26. length: 2000
  27. symbols:
  28. - cu1811.SHF

oanda:

  1. # oanda登录配置
  2. oanda:
  3. # oanda账户token,需要到oanda官网申请
  4. token: "aca515d198721260bc281073afbff674-843ea241ce00dc7d301fc32f31bff2d7"
  5. # 交易类型,与账户有关,分为PRACTICE和TRADE
  6. trade_type: PRACTICE
  7. # 数据库配置
  8. mongodb:
  9. # 数据库连接地址
  10. host: "localhost:27017"
  11. # 要存储的数据库名
  12. db: "VnTrader_1Min_Db"
  13. # 记录地址
  14. log: "log.oanda"
  15. # 下载历史数据
  16. target:
  17. # 失败重试次数
  18. redo: 3
  19. # 开始时间
  20. start: 20180901
  21. # 品种名:货币/商品_货币,如:EUR_USD,XAU_USD
  22. instruments:
  23. - HK33_HKD

binance:

  1. # 数据库配置
  2. mongodb:
  3. host: localhost:27017
  4. log: log.binance
  5. db: VnTrader_1Min_Db
  6. # 历史数据配置
  7. target:
  8. # 品种名
  9. symbol: ["ETHUSDT", "BTCUSDT", "EOSUSDT"]
  10. # 开始时间
  11. start: 20180901
  12. # 失败重试次数
  13. retry: 3
  14. # 代理设置 (下载binance数据需要vpn,如果vpn使用全局代理可以不用设置代理)
  15. # proxies:
  16. # http: socks5://127.0.0.1:1080
  17. # https: socks5://127.0.0.1:1080

通过修改配置中历史数据的选项可以选择要下载数据的范围。

windows

启动脚本:run.bat,
默认从3个数据源下载数据到数据库,可以通过注释掉相关的代码屏蔽对应的命令。在一行前加 REM 即可注释该行。
修改完启动脚本和配置文件后,双击启动脚本即可运行下载数据。

  1. @echo off
  2. REM conda 虚拟环境
  3. REM call activate vnpy
  4. set PYTHONPATH=%cd%
  5. REM 创建biance数据索引
  6. echo create binance index
  7. python binance/binance.py create
  8. REM 更新biance数据
  9. echo update binance data
  10. python binance/binance.py update publish
  11. REM 创建jaqs一分钟数据索引
  12. echo create jaqs m1 index
  13. python jqdata/jqdata.py create
  14. REM 更新jaqs一分钟数据
  15. echo update jaqs m1 data
  16. python jqdata/jqdata.py update publish
  17. REM 创建oanda数据索引
  18. echo create oanda index
  19. python oanda/m1.py create
  20. REM 更新oanda数据
  21. echo update oanda data
  22. python oanda/m1.py update publish
  23. pause

macos

启动脚本:run.sh
可以用 # 注释掉相应的命令
在terminal中进入项目更目录,输入

  1. bash run.sh

即可开始下载数据

  1. #! /bin/bash
  2. # 切换到目标目录
  3. cd $PWD
  4. # conda 虚拟环境
  5. source activate vnpy
  6. export PYTHONPATH=$PWD
  7. # 创建biance数据索引
  8. echo create binance index
  9. python binance/binance.py create
  10. # 更新biance数据
  11. echo update binance data
  12. python binance/binance.py update publish
  13. # 创建jaqs一分钟数据索引
  14. echo create jaqs m1 index
  15. python jqdata/jqdata.py create
  16. # 更新jaqs一分钟数据
  17. echo update jaqs m1 data
  18. python jqdata/jqdata.py update publish
  19. # 创建oanda数据索引
  20. echo create oanda index
  21. python oanda/m1.py create
  22. # 更新oanda数据
  23. echo update oanda data
  24. python oanda/m1.py update publish
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注