简介
vn.py是一个基于事件驱动类型交易框架,整个系统中一共有9种事件类型,分别是:EVENT_TICK(行情事件)、EVENT_ORDER(委托单事件)、EVENT_TRADE(成交单事件)、EVENT_CONTRACT(合约事件)、EVENT_POSITION(持仓事件)、EVENT_TIMER(计时器事件)、EVENT_ACCOUNT(账户资金事件)、EVENT_LOG(日志事件)、EVENT_ERROR(错误事件)。接下来详细的介绍一下这几种事件的区别作用以及整个以事件驱动为基础的实盘运行机制。
Event
1. EVENT_TICK,行情事件。
交易所发来的tick数据(交易所只发tick数据,min数据是自己合成的)。
作用:行情事件会触发相应的订阅函数,推送给相应的策略类,计算/判断是否要进行交易。
2. EVENT_ORDER,委托单事件。
策略或者手动通过GUI界面上发出的委托单。
作用:传给相应的监听函数,将这些委托单进行转换发送给交易所。
(如:上期所的平仓单子转换为平今/平昨)
3. EVENT_TRADE,成交单事件。
委托单成交之后交易所推送来的事件。
作用:系统收到成交事件后,更新策略的持仓情况,保证策略逻辑的正常执行。
4. EVENT_CONTRACT,合约事件。
合约基本信息(如:合约代码等)
5. EVENT_POSITION,持仓事件。
当前账户所持有合约的仓位信息。
作用:vn.py会在本地维护一个持仓字典,用于策略信号的计算、风控等。交易所会定时推送持仓细节,更新本地所维护的持仓字典。
6. EVENT_TIMER,计时器事件。
风控模块中清空事件计数的时间间隔。
作用:风控模块计数。
7. EVENT_ACCOUNT,账户资金事件。目前账户持仓所占用的资金。
作用:计算账户保证金占比,主要用于风控模块。
8. EVENT_LOG,日志事件。
系统运行过程中发出的日志。
作用:监控整个系统的运行情况。
9. EVENT_ERROR,错误事件。
作用:监控整个系统的运行情况。
底层函数
在底层实现部分,策略发出的buy/sell/short/cover信号不是直接送达给交易所,而是在底层进行了一系列的委托转化,将信号变为买入开仓/卖出开仓/平仓/平昨仓/平今仓信号传入相应的交易所接口。主要使用的函数就是vtEngine.py文件中MainEngine类下的convertOrderReq函数。
主要分为三种模式:普通模式、上期所模式、平今惩罚模式,只有平仓单需要进行委托转换,开仓单不需要转换。
1. 普通模式:不进行委托转换,直接发出;
适用的合约:除上期所交易的品种和平今惩罚模式的品种外;
使用方式:无需设置,直接根据合约对应的交易所来判断;
2. 上期所模式:针对上期所品种,将上期所的平仓单转换为平今/平昨;默认先平今再平昨,今仓平完还有剩余接着平昨;(上期所比较特殊,发平仓单时需要指定平今还是平昨)
适用的合约:上期所合约;
使用方式:无需设置,系统直接根据合约对应的交易所来判断;
3. 平今惩罚模式:对于使用该模式的合约,平仓时,先平昨,平昨之后有剩余,再反向开今仓,不平今仓;
适用的合约:主要针对平今手续费比平昨手续费高的合约,如IF(当交易频繁,或交易量大时,手续费也是一笔不小的开支,需要考虑),这个根据自己的需求来设置;
使用方式:在VT_setting.json文件中设置,将需要用该模式进行转换的合约添加到“tdPenalty”列表中。
实盘交易概览
由于vn.py为事件驱动框架,我们就基于事件流来说明整个实盘的运行结构。如下图所示:
(下图横屏浏览更佳,可点击放大,或点击文末“阅读原文”,进入‘维恩的派’论坛查看。红色字体标识部分表示需要重点关注。)
基于python的开源交易平台开发框架。截止目前,vn.py项目在Github上的Star已经达到5563,量化交易类开源项目第1,量化类项目第3(1、2依旧分别是Zipline和TuShare)。
项目官网:http://www.vnpy.org
论坛地址:www.vnpie.com
知乎专栏:https://zhuanlan.zhihu.com/vn-py
Developed by Traders,
for Traders