10.矢量化回测


创建回撤函数

在本节中,我们将计算我们策略的回撤。回撤是一个非常有趣的指标,因为它可以让我们了解最大回撤。这是我们策略在一段时间内的最大损失。这可以让您根据您的厌恶程度了解该策略是否有风险。

所以让我们开始创建一个return回撤的函数。

首先我们需要计算所有serie的累积回报。它可以使用“cumsum()”函数来计算,就像我们实际要做的那样,或者使用累积预测。

所以然后我们需要计算 running Max,

running Max 很容易,例如,如果你有这个向量,你应用那个 running Max 函数,你将得到这个向量作为回报。就是说,比如这里的Max数​​是1,那么这个指数的累计收益就是1。然后我们传递到最大值 3,然后我们进入最大值 5,但随后我们减小该值,我们保持最大值 5。只有出现高于5的数字时,最大值5才会被替换。

为此,我们将使用 Numpy 中的最大累积函数。

现在我们可以计算回撤,即累积回报除以运行最大值减 1。

def drawdown_function(serie):

  # We compute Cumsum of the returns
  cum = serie.dropna().cumsum() + 1

  # We compute max of the cumsum on the period (accumulate max) # (1, 3, 5, 3, 1)  --> (1, 3, 5, 5, 5)
  running_max = np.maximum.accumulate(cum)

  # We compute drawdown
  drawdown = cum / running_max - 1
  return drawdown

现在我们可以使用这个函数来创建回撤。
因此,例如,如果我将“return_serie”放入函数中并打印出来

drawdown = drawdown_function(return_serie)
drawdown
10.矢量化回测

然后我们要绘制回撤图,并计算 Google 股价的最大回撤。

首先,我们要调整图形大小,以获得更好的可视化效果,然后我们将绘制缩减图,但缩减图很窄,

所以有必要使用“fill_between”函数而不是“plot”函数.

# We compute drawdown
drawdown = drawdown_function(return_serie)

# Adapt figure size
plt.figure(figsize=(20, 8))

# Plot the drawdown
plt.fill_between(drawdown.index, drawdown * 100, 0,
                 drawdown, color='#CE5757', alpha=0.65)

# Put a little
plt.title('Drawdown')

plt.show

drawdown
10.矢量化回测

正如我们所见,我们对回撤有了更好的可视化。

例如,我们可以看到谷歌损失最严重的是在 2008 年的次贷危机期间,另一次,我们有一笔双重贷款,

除此之外没有一个非常高,因为我们可以看到,如果我们把 2008 年的那段时间搁置起来,我们的平均回撤是 5%。

所以现在让我告诉你如何计算最大回撤。所以这很容易,要做到这一点,我们使用了 Numpy 的“min”函数,我们只输入百分比,然后我们使用 f-string 提取这个数字。

实际上,我们只需要在这里加一个减号,因为所有回撤值都是负数,而最大回撤通常是正值。

# Computation Max drawdown
max_drawdown = - np.min(drawdown) * 100
print(f"Max drawdown: {'%.2f' % max_drawdown} %")
10.矢量化回测

原创文章,作者:朋远方,如若转载,请注明出处:https://caovan.com/10-shilianghuahuice/.html

(0)
打赏 微信扫一扫 微信扫一扫
朋远方的头像朋远方
上一篇 2022年11月15日 下午10:14
下一篇 2022年12月9日 下午5:02

相关推荐

发表回复

登录后才能评论