Skip to content

行情记录模块

vn.py edited this page Sep 4, 2017 · 2 revisions

作者:硬伤

目录

模块简介

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.symbol string 合约代码
        tick.exchange string 合约所在交易所
        tick.lastPrice float 合约最新成交价
        tick.volume float 合约最新成交量
        tick.openInterest int 合约持仓量
        tick.upperLimit int 合约涨停价
        tick.lowerLimit int 合约跌停价
        tick.datetime datetime Tick所属时间

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

        Tick数据 类型 说明 Tick数据 类型 说明
        tick.bidPrice1 float 买一价 tick.bidVolume1 float 买一量
        tick.bidPrice2 float 买二价 tick.bidVolume2 float 买二量
        tick.bidPrice3 float 买三价 tick.bidVolume3 float 买三量
        tick.bidPrice4 float 买四价 tick.bidVolume4 float 买四量
        tick.bidPrice5 float 买五价 tick.bidVolume5 float 买五量
        tick.askPrice1 float 卖一价 tick.bidVolume1 float 卖一量
        tick.askPrice2 float 卖二价 tick.bidVolume2 float 卖二量
        tick.askPrice3 float 卖三价 tick.bidVolume3 float 卖三量
        tick.askPrice4 float 卖四价 tick.bidVolume4 float 卖四量
        tick.askPrice5 float 卖五价 tick.bidVolume5 float 卖五量
  • Bar记录

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

      • Bar数据 类型 说明
        bar.symbol string 合约代码
        bar.exchange string 合约所在交易所
        bar.open float 当前1分K线开盘价
        bar.high float 当前1分K线最高价
        bar.low float 当前1分K线最低价
        bar.close float 当前1分K线收盘价
        bar.datetime datetime 当前1分K线所属时间
        bar.volume int 当前1分钟成交量
        bar.openInterest int 持仓量

        默认记录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包),可能需要清洗后才能使用

You can’t perform that action at this time.