作者:硬伤
目录
VnTrader中内置了行情记录模块DataRecorder,可通过相应的行情接口记录实盘Tick数据,并自动聚合为K线后插入MongoDB数据库,支持VnTrader中对接了的全部Gateway,该模块位于vnpy/trader/app/dataRecorder
目录下,主要包括三部分:
drBase.py
drEngine.py
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官方论坛。
主力合约
行情记录模块的配置使用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" } }
注意事项:
帮助->合约查询
来查询合约代码。当数据记录组件向MongoDB中插入数据时可能因为某种原因出现阻塞(如硬盘转速较慢等),导致VnTrader的事件驱动引擎无法处理后续的事件,因此实盘中建议开一个独立的进程专门用于记录数据。
v1.6.2版本后在examples/DataRecording
目录下提供了一个无界面的行情记录程序,采用父子进程架构实现了行情记录的无人值守运行模式,父进程负责在每日固定的时间启动和关闭子进程(防止收盘后服务器断开无法重连等情况),子进程负责运行实际的行情记录业务逻辑。该程序使用同一目录下的DR_setting.json作为配置文件,用户可以通过python runDataRecording.py
启动程序,推荐使用阿里云等云服务器来保证稳定性。
最后,行情记录模块所记录的数据由于交易所的原因(期货交易所会在系统测试时发送一些没有意义的Tick包),可能需要清洗后才能使用。