VNPY_行情记录模块

作者:硬伤

目录

模块简介

VnTrader中内置了行情记录模块DataRecorder,可通过相应的行情接口记录实盘Tick数据,并自动聚合为K线后插入MongoDB数据库,支持VnTrader中对接了的全部Gateway,该模块位于vnpy/trader/app/dataRecorder目录下,主要包括三部分:

  • 常量定义文件drBase.py
  • 行情记录引擎drEngine.py
  • GUI管理组件uiDrWiget.py

使用说明

行情记录模块在VnTrader启动后会自动运行,无需用户手动启动,当对应的交易接口Gateway连接成功后引擎会根据配置文件中的信息自动订阅合约。用户可以点击主界面菜单栏功能->行情记录来查看目前正在记录的行情数据内容,如下图所示:

行情数据记录

  • Tick记录

    • 该窗口显示了正在记录Tick数据的合约代码及数据源接口,Tick数据包括如下内容,策略开发时在onTick中可以直接调用(如果有的话):

      • Tick数据类型说明
        tick.symbolstring合约代码
        tick.exchangestring合约所在交易所
        tick.lastPricefloat合约最新成交价
        tick.volumefloat合约最新成交量
        tick.openInterestint合约持仓量
        tick.upperLimitint合约涨停价
        tick.lowerLimitint合约跌停价
        tick.datetimedatetimeTick所属时间

        如果有五档行情,还会返回如下数据:

        Tick数据类型说明Tick数据类型说明
        tick.bidPrice1float买一价tick.bidVolume1float买一量
        tick.bidPrice2float买二价tick.bidVolume2float买二量
        tick.bidPrice3float买三价tick.bidVolume3float买三量
        tick.bidPrice4float买四价tick.bidVolume4float买四量
        tick.bidPrice5float买五价tick.bidVolume5float买五量
        tick.askPrice1float卖一价tick.bidVolume1float卖一量
        tick.askPrice2float卖二价tick.bidVolume2float卖二量
        tick.askPrice3float卖三价tick.bidVolume3float卖三量
        tick.askPrice4float卖四价tick.bidVolume4float卖四量
        tick.askPrice5float卖五价tick.bidVolume5float卖五量
  • Bar记录

    • 该窗口显示了正在记录1分K线数据的合约代码及数据源接口,该1分钟数据由模块内置算法由Tick数据自动聚合,1分数据包括如下内容,策略开发策略时在onBar中可以直接调用(如果有的话):

      • Bar数据类型说明
        bar.symbolstring合约代码
        bar.exchangestring合约所在交易所
        bar.openfloat当前1分K线开盘价
        bar.highfloat当前1分K线最高价
        bar.lowfloat当前1分K线最低价
        bar.closefloat当前1分K线收盘价
        bar.datetimedatetime当前1分K线所属时间
        bar.volumeint当前1分钟成交量
        bar.openInterestint持仓量

        默认记录1分K线数据,任意n分钟K线数据的聚合请参考vn.py官方论坛

  • 主力合约

    • 该窗口显示品种主力合约和连续合约的映射关系,如IF0000: IF1605代表将IF1605的行情数据(Tick和1分钟K线)插入到IF0000(可以自行改名)的集合中,注意这里每个连续合约代码只能对应一个具体合约的代码。

配置文件

行情记录模块的配置使用DR_setting.json文件,打开后如下:

{   #控制是否启动行情数据记录,true对应启动,false对应停止
    "working": false,
    #Tick行情数据的合约代码和接口,如["Au(T+D)", "SGIT"]
    #代表需要记录来自于飞鼠接口的黄金T+D现货的Tick数据
    "tick":
    [
        ["Au(T+D)", "SGIT"],
        ["Ag(T+D)", "SGIT"]
    ],
    #1分钟K线行情数据的合约代码和接口,如["au1606", "CTP"]
    #代表需要记录来自于CTP接口的au1606黄金期货的1分钟K线数据
    "bar":
    [
        ["au1606", "CTP"],
        ["ag1606", "CTP"]
    ],
    #设置具体的期货合约和该期货连续合约的代码映射关系
    "active":
    {
        "IF0000": "IF1605",
        "IH0000": "IH1605",
        "IC0000": "IC1605"
    }
}

注意事项:

  1. 修改DR_setting.json中的配置后,需要重启VnTrader才会生效。
  2. active字段中定义的连续合约对应的具体合约代码也必须加入到上面的tick或者bar字段中,才会记录相应的tick或者1分钟K线数据。
  3. 合约区分大小写,可通过点击主界面菜单栏帮助->合约查询来查询合约代码。

推荐方案

当数据记录组件向MongoDB中插入数据时可能因为某种原因出现阻塞(如硬盘转速较慢等),导致VnTrader的事件驱动引擎无法处理后续的事件,因此实盘中建议开一个独立的进程专门用于记录数据。

v1.6.2版本后在examples/DataRecording目录下提供了一个无界面的行情记录程序,采用父子进程架构实现了行情记录的无人值守运行模式,父进程负责在每日固定的时间启动和关闭子进程(防止收盘后服务器断开无法重连等情况),子进程负责运行实际的行情记录业务逻辑。该程序使用同一目录下的DR_setting.json作为配置文件,用户可以通过python runDataRecording.py启动程序,推荐使用阿里云等云服务器来保证稳定性。

最后,行情记录模块所记录的数据由于交易所的原因(期货交易所会在系统测试时发送一些没有意义的Tick包),可能需要清洗后才能使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值