投资全球更要投资自己
我的订阅

18 回测引擎BacktestingEngine的拆解

article.author.display_name 陈晓优

【点击】传送门-加入 从0到1跑通量化交易 >>>>

<限前500名加入量化训练营>
马上添加助教微信(jwzhujiao2)
发送订单截图申请名额

本期提要

  • 海龟回测内部的对象初始化过程,是一个层级化的从上到下的初始化顺序
  • 回测引擎的六个作用
  • BacktestingEngine类的代码解读 

知识点导图

内容摘录

大家好,欢迎来到Quant全实战成长计划第18集回测引擎。上一集重温了海龟里仓位和资金管理这两个重要概念。之前讲过了海龟信号,海龟组合,怎样把单子传递给引擎,接下来的几节课主要讲解在跑回测时,回放的数据怎么进来,最后下的单子怎么出去,怎么进到引擎里再由引擎把它最后转化为资金曲线以及各种统计数据。

回测引擎的六个作用

首先来看回测引擎的作用。回测引擎从流程上讲整体上有六个作用:‘

1、组合创建。海龟组合(TurtlePortfolio)的第一步是信号的创建。海龟回测内部的对象初始化过程:是用户先在回测的脚本里创建一个回测引擎的对象,回测引擎再基于传进的设置自动创建一个海龟组合。海龟组合在初始化的过程中,会初始化自己内部的每一个海龟信号初始化。是一个层级化的从上到下的初始化顺序

2、载入数据。即从硬盘,不管是数据库还是其他CSV文件里,载入需要的历史数据。

3、数据回放。驱动组合的onBar函数,不断遍历之前载入的历史数据,遍历要按照一个特定顺序,不能搞出未来函数。遍历的过程就是按照顺序把数据一个个推送给策略,其实也就是调用再推进TurtlePortfolio对象的onBar函数。当组合内部的逻辑在组合内部实现了,其实就是把onBar再推给信号,如果信号要做任何交易再调用相应的指令传出数据。传到回测引擎层的时候,其实sendOrder 本质上就是把那一笔交易记录到回测引擎的内存里,就是一个纯粹的记录过程。当然记录过程中还要按照特定格式把后面计算要用的所有特殊字段都记下来。

4、交易记录及统计结果。数据回放结束之后,有了所有的成交的交易记录,就可以基于那些交易记录,再加上回放过程中缓存的每天的K线数据,实现“逐日盯市”的事实统计方法。

5、图表显示。统计完了之后再基于已经得到的在内存里算好的所有结果,调用基础print,以字符串的方式输出统计指标输出,因为毕竟最后需要人看。除此以外,还可以调用Matplotlib这样的绘图库,把资金曲线等等数据以图表的方式绘制出来。

整体上来说BacktestingEngine负责这六块功能。

……

写评论

icon-emoji表情
图片