行情记录、历史数据管理和事前风险都比较简单,都是辅助功能
行情记录 /vnpy/trader/database
用于实时行情的收录
1、连接上接口后并且启动行情记录模块
2、通过本地合约(vt_symbol)添加记录任务
3、后台调用API接口的suscribe()函数自动订阅行情
4、行情通过database_manager模块的save_bar_data()函数/save_tick_data()函数载入到数据库中
菜单栏选择“配置”进入“全局配置”界面来选择数据库(默认为SQLite), 或者在用户目录下的.vntrader/vt_setting.json里面直接配置。
加载启动 /vnpy/app/trader_recorder
菜单栏中点击“功能”->”行情记录“后,会弹出行情记录窗口
行情记录模块的启动状态为True,会启动while循环,可以添加任务实现实时行情记录。
开始收录
在“本地代码”选择输入需要订阅的行情
点击后边“K线记录”或者“Tick记录”中的“添加”选项,会把记录特定品种任务添加到data_recorder_setting.json上
通过queue.put()与queue.get()异步完成收录行情信息任务
收录原理:连接服务器记录tick数据,调用add_tick_recording函数执行下面的工作
先创建tick_recordings字典
调用接口的suscribe()函数订阅行情
保存该tick_recordings字典到json文件上
推送行情记录事件
订阅行情
调用main_engine的suscribe()函数来订阅行情,需要填入的信息为symbol、exchange、gateway_name
将订阅信息保存到json文件 save_setting load_setting
把tick_recordings或者bar_recordings通过save_json()保存到.vntrader文件夹内的data_recorder_setting.json上。
该json文件用于存放行情记录的任务,当每次启动行情模块后,会调用load_setting()函数来得到tick_recordings和bar_recordings字典,进而开始记录的任务。
推送行情记录事件 put_event
创建行情记录列表tick_symbols和bar_symbols,并且缓存在data字典里
创建evnte对象,其类型是EVENT_RECORDER_UPDATE, 内容是data字典
调用event_engine的put()函数推送event事件
注册行情记录事件
register_event()函数分别注册2种事件:EVENT_CONTRACT、EVENT_TICK
EVENT_CONTRACT事件,调用的是process_contract_event()函数,使用subscribe()函数进行订阅行情
EVENT_TICK事件,调用的是process_tick_event()函数,使用record_tick()和record_bar()函数,把行情记录任务推送到queue队列中等待执行。
保存行情记录 run
在while循环中,从queue队列读取任务,调用save_tick_data()或者save_bar_data()函数来记录数据,并且载入到数据库中。
移除记录
输入需要移除合约品种的本地代码,要移除Tick记录,只需在”Tick记录“那一栏上点击”移除“按钮即可
代码运作原理:
从tick_recordings字典移除vt_symbol
调用save_setting()函数保存json配置文件
推送最新的tick_recordings字典来继续记录行情,原来移除合约品种不再记录。
停止记录
记录行情状态改为False, 停止while循环
调用join()函数关掉线程
行情记录主要是保存tick数据方便回测,tick数据好像不提供免费下载
历史数据管理 /vnpy/trader/data_manager
DataManger模块,针对历史数据的全功能管理工具。
数据导入
打开DataManager模块的界面后,点击右上角的【导入数据】按钮
对话框复用了CsvLoader组件中的功能
1.点击顶部的【选择文件】按钮,来选择要加载的CSV文件路径;
2.在合约信息中,输入合约代码,选择对应的交易所和周期;
3.查看CSV文件的表头信息,并将对应的表头字符串输入在表头信息中,对于【持仓量】字段,如果CSV文件中不存在的话(比如股票数据)请留空即可
4.在格式信息中,配置时间戳的日期时间格式,用于后续的时间解析处理
5.点击【确定】按钮,开始从CSV文件导入数据到数据库中。
导入过程会卡,文件越大越卡
导入的合约代码(symbol)和交易所(exchange)两个字段组合起来,才能构成在CTA回测等模块中使用的本地代码(vt_symbol)
数据查看
获取数据的方式一共有三种:
通过RQData下载
从CSV文件导入
使用DataRecorder模块录制
左上角的【刷新】按钮,即可看到当前数据库中已有数据的统计情况
数据导出
选择任意一个合约,点击该合约行数据右侧的【导出】按钮后,再次弹出对话框
历史数据管理主要是通过客户端操作,事前风控比较简单,但是风控也比较重要
事前风控
在委托在通过交易API接口发出去前,需要检查其状态不能超过风控限制,其中包括:
1、委托数量必须大于0
2、单笔委托的数量上限
3、当日总成交数量上限
4、委托流数量上限
5、当前活动委托次数上限
6、当日撤单次数上限
加载启动
首先登陆接口,如连接CTP;然后在菜单栏中点击“功能”->”交易风控“后,会弹出交易风控窗口
交易风控对应.vntrader里面risk_manager_setting.json的参数字典
调用RiskManagerEngine类的update_setting()函数读取risk_manager_setting.json的参数字典并且绑定类的属性。日志中输出”交易风控功能启动”
运行check_risk()函数,去检查每一笔发出去的委托是否符合各种风控要求
修改参数
调用RiskManagerEngine类的save_setting()函数去更新到risk_manager_setting.json的参数字典中,最后通过update_setting()函数把参数字典绑定到类的属性。
停止风控
在“风控运行状态”的选择框中点击“停止后”后,RiskManagerEngine类的active变成False,check_risk()函数不再检查委托的风控流控状态,同时在日志中输出”交易风控功能停止”。