1

我曾尝试在返回数据列上使用 PerformanceAnalytics 的 maxdrawdown 函数,但在某些情况下它给出的值稍微不正确(在其他情况下值非常不正确)。我采用了相同的数据集,并通过计算累积收益、找到运行的最大收益然后从该运行最大值中减去每天的累积收益来计算 excel 中的 maxdrawdown。据我了解,结果列的最大值是最大回撤。在 r 中使用 maxDrawdown 函数时,maxdrawdown 的较大值存在相当大的偏差。

有谁知道为什么会这样?我是否在 excel 中计算不同的回撤指标?r中的舍入错误?任何想法都会有所帮助。

还有什么方法可以让我访问 maxDrawdown 函数的基本代码,以便更好地了解它在做什么?

4

2 回答 2

0

由于没有比较结果的示例,我们只能猜测导致偏差的原因。也许是因为PerformanceAnalytics使用“几何链接”,cumprod而不是cumsum?

geometric = FALSE您可以使用in切换到简单链接maxDrawdowns并比较结果。

maxDrawdown您只需键入和即可查看代码PerformanceAnalytics:::Drawdowns

于 2017-08-22T14:01:31.613 回答
0

以下代码显示了table.Drawdowns包中的问题PerformanceAnalytics

require(quantmod)
require(PerformanceAnalytics)
getSymbols("^GSPC", src="yahoo", from="2005-01-01")
ret = ROC(Ad(GSPC), type="continuous")
table.Drawdowns(ret)

        From     Trough         To   Depth Length To Trough Recovery
1 2007-10-10 2009-03-09 2014-04-02 -0.6103   1631       355     1276
2 2020-02-20 2020-03-23       <NA> -0.3610    135        23       NA
3 2018-09-21 2018-12-24 2019-07-01 -0.2025    194        65      129
4 2015-05-22 2016-02-11 2016-07-18 -0.1516    291       183      108
5 2018-01-29 2018-04-02 2018-08-27 -0.1056    147        44      103

第一线是金融危机。From日期是正确的,但太长To了一年,如下图所示。

在此处输入图像描述

更正:

当收益计算为对数差异时,即。

ret = log( x[t] / x[t-1] )

对应于 中的“连续”类型ROC,该参数geometric应设置为 FALSE,

table.Drawdowns(ret, geometric = FALSE)

这使,

        From     Trough         To   Depth Length To Trough Recovery
1 2007-10-10 2009-03-09 2013-03-28 -0.7627   1376       355     1021
2 2020-02-20 2020-03-23 2020-08-18 -0.2214    126        23      103
3 2018-09-21 2018-12-24 2019-04-23 -0.1276    146        65       81
4 2015-05-22 2016-02-11 2016-07-11 -0.1084    286       183      103
5 2007-07-20 2007-08-15 2007-10-05 -0.0907     55        19       36

默认table.Drawdowns值为 TRUE。这需要注意。

于 2020-08-31T06:09:12.553 回答