/Epiphron

一个基于事件驱动框架的回测平台

Primary LanguageHTMLMIT LicenseMIT

Epiphron

一、项目简介

  本项目是一个非常基础的基于事件驱动框架的量化交易回测系统。现阶段以学习为目的,并不存在任何其他用途。项目本身还有很多欠缺和不足,希望能在以后不断地迭代,最终成为一个能够进行实盘交易的量化交易系统。

二、系统逻辑

  回测系统的基础逻辑是class接收event事件,并根据事件的种类做出反应。首先,在每一次循环开始时从数据源获取数据信息,系统将数据信息作为market事件接收后,不断触发系统其他组成部分,直到事件序列为空,系统再次获取数据信息,直到循环结束。整个回测系统在一次循环中的流程如下图所示。

process

  1. 从Data(数据源)获取新的数据信息,作为Market事件推送到事件序列。(上图①)
  2. 系统把Market事件推送给Strategy,Strategy生成Signal事件。(上图②、③)
  3. RiskManager接收Signal事件,并根据风控发出有效的Order事件。(上图④、⑤)
  4. 由Execution接收Order事件,并根据执行结果发出Fill事件。(上图⑥、⑦)
  5. Portfolio根据收到的Fill事件更新portfolio信息,并触发tradelog进行记录。(上图⑧)

三、功能介绍

  1. 支持从MySQL数据库、tushare获取数据进行回测。
  2. 支持多个标的资产的组合。
  3. 支持基础的Performance计算,包括夏普比率,sortino比率,最大回撤。
  4. 资金曲线及回撤曲线的图形化展示。
  5. 支持详细的trade信息记录,包括每个标的资产trade的进入日期、进入市价、交易数量、退出日期、退出市价、每笔交易盈利以及累计盈利等。
  6. 支持trade summary,包括胜率、最大盈利、最大损失和平均盈利。
  7. 支持trade的图形化展示。

一个典型的回测结果图形化展示如下图,本结果是EMA Crossing策略在600050和600233两只股票的应用。

equity curve

图中绿色区域为策略表现好于基准的部分,红色为劣于基准的部分。

trade plot

图中标出了针对每个标的资产的买入卖出点。

四、使用说明

  一个Strategy类的初始化需要接受至少两个参数,data_handler以及events这两个类。其中data_handler获取symbol最新N个交易日收盘价‘close’数据的方法是bars = self.data_handler.get_latest_bars_values(symbol, "close", N = N)。如果要获取从回测日起开始以来所有的数据,则需令N = 0get_latest_bars_values方法返回的是numpy.array。根据自己的策略来生成Signal事件,并推送到event序列(self.events.put(signal))就可以了。更详细的事例请看example中的示例。

五、特别说明

  本项目的完成得益于很多优秀的开源回测系统,从设计层面到技术层面我都受益匪浅。希望能够不断学习进步,使本项目能够不断完善。