量化百科

事件驱动的回测框架

由ypyu创建,最终由ypyu 被浏览 51 用户

事件驱动的回测框架是一种更为复杂的回测系统。上篇我们介绍的简单回测框架是以策略为主题的,不考虑交易的委托成交行为,因此与市场真实情况是有一定差距的。而事件驱动的回测框架可以模拟实盘交易,是一种完全仿真的回测环境。事件驱动的回测框架包含了以下几个组成部分:

  • 事件模块

事件模块包括一个事件的基类,在事件的基类下面则有很多子事件,如市场数据事件(market)、交易信号事件(signal)、委托下单事件(order)和订单成交事件(fill)等。此外,还需要一个事件队列来存储和管理所有子事件。

  • 数据采集模块

数据采集模块可以通过接口获取现在的行情数据和历史数据,该模块能够产生市场数据事件。历史数据的获取能直接读取我们搭建好的数据库,而实时的行情数据可能需要用到交易软件的接口。

  • 策略模块

策略模块与简单回测系统类似,输入bar或者tick数据,生成signal;策略模块可以产生信号事件。

  • 交易执行模块

交易执行模块接收信号事件,决定需要开仓和平仓的头寸数量,输出委托下单事件。该模块再根据委托下单事件进行模拟或者真实的交易,当订单成交事件完成时更新持有资产头寸以及其他相关数据。

  • 资产头寸模块

资产追踪模块贯穿于各个事件之间,它记录资金、仓位、仓位市值等信息。一旦发生了仓位的变动,那么资产头寸模块记录的各种数据将会更新。资产头寸模块的另一个作用是tracing策略执行的全过程,因此会记录所有的交易历史讯息。

  • 事件队列

在回测系统中,所有事件通过事件队列进行管理。当一个事件完成其使命后,就会自觉排到队伍最后,由下一个事件开始它的任务,如此循环。

下面来谈谈各主要模块它们的功能。

数据采集模块

  • 从数据库或者API、文件等数据源中读取数据,用特定的数据结构存储它们;如果数据没有清洗和规整,那么还要对raw data进行处理。
  • 获取当前时间戳上最近的N个bars。
  • 将bars通过一定的方式转为策略模块可以直接使用的形式。

策略模块

  • 策略触发器:在bar或者tick的数据达到时触发策略模块。
  • 管理时间序列数据流,捕获新值释放旧值。
  • 根据最新的时间序列数据产生交易信号。

交易执行模块

  • 根据信号和现有的资产头寸决定需要交易的头寸数量,生成委托单。
  • 订单管理系统:管理委托和成交订单,加入风控系统对下单进行风险控制。
  • 算法交易系统:通过算法对委托的订单进行拆分。
  • 模拟交易系统:模拟交易所对委托订单进行处理,其中包含价格撮合模型以及处理滑点的模型。

资产头寸模块

  • 在生成委托单时提供现在的资产头寸情况,决定委托买卖的数量。
  • 在订单执行成交后更新资产头寸状况。
  • 记录交易产生的数据以及资金和仓位变动情况,如仓位、持仓的市值、剩余资金、交易费用以及盈亏。

基于事件的复杂回测系统就讲到这里,该回测系统很容易改造成一个能够进行真实量化交易的系统。基于事件的回测系统暂时不会继续展开,下一讲我们会采用一个策略对简单回测系统进行实例讲解,敬请期待~~

标签

实盘交易回测