我尝试在一组返回数据中使用PerformanceAnalytics中的maxdrawdown函数,并且在某些情况下它会给出稍微不正确的值(在其他情况下值非常不正确)。我已经采用了相同的数据集,并通过计算累积回报,查找运行的最大回报,然后从此运行最大值中减去每天累积回报来计算Excel中的maxdrawdown。据我所知,结果列的最大值是最大值。在r中使用maxDrawdown函数时,我会在较大的maxdrawdown值中得到相当大的偏差。
有谁知道为什么会这样?我在Excel中计算不同的缩编指标吗? r中的舍入误差?任何想法都会有所帮助。
还有什么方法可以让我访问maxDrawdown函数的基本代码,以便更好地了解它正在做什么?
答案 0 :(得分:0)
由于没有比较结果的例子我们只能猜出导致偏差的原因。也许是因为PerformanceAnalytics
使用“几何链接”,即cumprod
而不是cumsum
?
您可以使用geometric = FALSE
中的maxDrawdowns
切换为简单链接,并比较结果。
只需输入maxDrawdown
和PerformanceAnalytics:::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
的时间太长了一年,如下图所示。
更正:
当收益被计算为对数差时,即
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。需要注意这一点。