性能分析中的MaxDrawdown给出了不正确的值r

时间:2017-08-22 11:45:15

标签: r performanceanalytics

我尝试在一组返回数据中使用PerformanceAnalytics中的maxdrawdown函数,并且在某些情况下它会给出稍微不正确的值(在其他情况下值非常不正确)。我已经采用了相同的数据集,并通过计算累积回报,查找运行的最大回报,然后从此运行最大值中减去每天累积回报来计算Excel中的maxdrawdown。据我所知,结果列的最大值是最大值。在r中使用maxDrawdown函数时,我会在较大的maxdrawdown值中得到相当大的偏差。

有谁知道为什么会这样?我在Excel中计算不同的缩编指标吗? r中的舍入误差?任何想法都会有所帮助。

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

2 个答案:

答案 0 :(得分:0)

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

您可以使用geometric = FALSE中的maxDrawdowns切换为简单链接,并比较结果。

只需输入maxDrawdownPerformanceAnalytics:::Drawdowns,即可查看代码。

答案 1 :(得分: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的时间太长了一年,如下图所示。

enter image description here

更正:

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

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。需要注意这一点。