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

性能分析中的MaxDrawdown给出了不正确的值r,r,performanceanalytics,R,Performanceanalytics,我曾尝试在一列返回数据上使用PerformanceAnalytics中的maxdrawdown函数,它在某些情况下给出了一个稍微不正确的值(在其他情况下给出了非常不正确的值)。我使用了相同的数据集,在excel中计算了maxdrawdown,方法是计算累积回报,找到运行中的最大回报,然后从这个运行中的最大回报中减去每天的累积回报。据我所知,结果列的最大值是最大缩进。在r中使用maxDrawdown函数时,我在maxDrawdown的较大值中得到了相当大的偏差 有人知道为什么会这样吗?我是否在ex

我曾尝试在一列返回数据上使用PerformanceAnalytics中的maxdrawdown函数,它在某些情况下给出了一个稍微不正确的值(在其他情况下给出了非常不正确的值)。我使用了相同的数据集,在excel中计算了maxdrawdown,方法是计算累积回报,找到运行中的最大回报,然后从这个运行中的最大回报中减去每天的累积回报。据我所知,结果列的最大值是最大缩进。在r中使用maxDrawdown函数时,我在maxDrawdown的较大值中得到了相当大的偏差

有人知道为什么会这样吗?我是否在excel中计算不同的提取指标?r中的舍入误差?任何想法都会有帮助


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

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

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


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

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

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


只需键入
maxDrawdown
PerformanceAnalytics:::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
对应于
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

表中的默认值。Drawdowns
为TRUE。这一点需要注意。

以下代码显示了
表格的问题。
性能分析
包中的下拉列表

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
对应于
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

表中的默认值。Drawdowns
为TRUE。这需要注意。

我之前尝试切换到geometric=False,但它仍然给出了错误的值。我通过使用:
colMins(as.matrix(cumsum(pdrawdown)-cummax((cumsum(pdrawdown)щ))
解决了这个问题,这就是我在excel中计算值的有效方法(pdrawdown只是根据日期返回)。这给出了与excel相同的答案。我现在担心的是这个包是完全不准确的,它会为我用它创建的缩图提供不正确的值。我之前尝试切换到geometric=False,但它仍然提供了错误的值。我通过使用:
colMins(as.matrix(cumsum(pdrawdown)-cummax((cumsum(pdrawdown)щ))
解决了这个问题,这就是我在excel中计算值的有效方法(pdrawdown只是根据日期返回)。这给出了与excel相同的答案。我现在担心的是,这个包是完全不准确的,并且会为我用它创建的下拉图表提供不正确的值。我有更多的证据表明这个函数有缺陷。只需使用雅虎金融公司标准普尔500指数的每日收益。使用
TTR
中的
ROC
函数返回计算日志。然后
提款(ret)
显示最重要的例子是从2007-10-10开始的金融危机,这是正确的。但标普500指数在2013年5月前已完全恢复。提款表显示,直到2014年4月才出现复苏。我有更多证据表明这一功能存在缺陷。只需使用雅虎金融公司标准普尔500指数的每日收益。使用
TTR
中的
ROC
函数返回计算日志。然后
提款(ret)
显示最重要的例子是从2007-10-10开始的金融危机,这是正确的。但标普500指数在2013年5月前已完全恢复。提款表显示,直到2014年4月才出现复苏。