20 回测结果分析与可视化

这一集里面我们接着讲runBacktesting和calculateResult这两个函数,继续再深入地重新看一看回测结果的分析以及具体的一些实现细节。

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

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

本期提要

  • runBacktesting中关于回测方式的一点强调
  • 计算回测结果和显示结果图表这两个函数的具体的实现。

知识点导图

这一份导图与19课是同一份,将18-20课关于回测的内容都整理在一张图上,可以比较清晰看到整个结构,以及目前在学习的部分在中间起到什么作用,希望能帮助大家更好地理解

内容摘录:

大家好,欢迎来到Quant 全实战成长计划的第20集,在上一集里面,我们主要讲完了逐日盯市统计的一个概念以及它对应的代码实现。那么在这一集里面我们接着讲runBacktesting和calculateResult这两个函数,继续再深入地重新看一看回测结果的分析具体的一些实现细节。

之前runBacktesting整体上已经讲完了(请参照代码):

def runBacktesting(self):

    self.output('开始回放K线数据')

    for dt, barDict in self.dataDict.item():

        self.currentDt =dt

        ……

首先dataDict是我们从数据库里面读出来的历史K线数据的缓存,它的键是当天的datatime对象,值则是当天的不同合约代码的日线级别K线的数据,我们首先要把currentDt缓存下来,后面所有的成交都会以current Dt来记录。

然后上一节课也提过,我们对于dailyResult的缓存,创建新对象的一个更新操作,然后我们在推送当天K线的时候,也是遍历barDict里面的values:

for bar in barDict.values():

   self.portfolio.onbar(bar)

    self.result.updateBar(bar)

就是K线当天不同合约的K线字典,我们遍历它,然后把它推动给投资组合。在我们的投资组合内部,它自身直接维护了不同的合约对应的信号对象的映射,所以我们在外面就不用管了,直接往里面推就好。

同时在result,我们的对象上,要去更新一下当天的K线数据,这用于去更新当天的收盘价情况。

那么整个for循环跑完了,我们的K线数据回放也就跑完了。大家可以记住,在所有的策略的回测里面,基本上都是以for循环加同步的方式来实现的。

……

在接下来从20节往后的过程中,因为基础现在有了,我们可以真正进入到研究的阶段了,看看在海龟的基础上,怎么样真正去把它转化成可实盘交易的东西,怎么样在原版海龟的基础上去做更多的改进。