我想请你澄清下一个对我来说极为重要的问题,因为我的硕士论文的主要部分依赖于正确实施以下例子中计算的数据。 我有一个金融时间序列列表,看起来像这样(澳元兑美元示例):
Open High Low Last
1992-05-18 0.7571 0.7600 0.7565 0.7598
1992-05-19 0.7594 0.7595 0.7570 0.7573
1992-05-20 0.7569 0.7570 0.7548 0.7562
1992-05-21 0.7558 0.7590 0.7540 0.7570
1992-05-22 0.7574 0.7585 0.7555 0.7576
1992-05-25 0.7575 0.7598 0.7568 0.7582
根据这些数据,我计算了Last Last列的日志返回值
Last
1992-05-19 -0.0032957646
1992-05-20 -0.0014535847
1992-05-21 0.0010573620
1992-05-22 0.0007922884
现在我想计算上面提到的时间序列中的下降,我通过使用(来自包PerformanceAnalytics)来实现
ddStats <- drawdownsStats(timeSeries(AUDUSDLgRetLast[,1], rownames(AUDUSDLgRetLast)))
导致以下输出(这里只是前5行,但它返回每一个缩写,包括也是一天的缩写)
From Trough To Depth Length ToTrough Recovery
1 1996-12-03 2001-04-02 2007-07-13 -0.4298531511 2766 1127 1639
2 2008-07-16 2008-10-27 2011-04-08 -0.4003839141 713 74 639
3 2011-07-28 2014-01-24 2014-05-13 -0.2254426369 730 652 NA
4 1992-06-09 1993-10-04 1994-12-06 -0.1609854215 650 344 306
5 2007-07-26 2007-08-16 2007-09-28 -0.1037999707 47 16 31
现在,问题如下:最差缩幅的深度(根据上面的输出)是-0.4298,而如果我“手动”进行以下计算,我获得
(AUDUSD[as.character(ddStats[1,1]),4]-AUDUSD[as.character(ddStats[1,2]),4])/(AUDUSD[as.character(ddStats[1,1]),4])
[1] 0.399373
为了使事情更清楚,这是来自和通过日期的AUDUSD数据框中的两行:
AUDUSD[as.character(ddStats[1,1]),]
Open High Low Last
1996-12-03 0.8161 0.8167 0.7845 0.7975
AUDUSD[as.character(ddStats[1,2]),]
Open High Low Last
2001-04-02 0.4858 0.4887 0.4773 0.479
此外,其他提款部门不同意“手工”计算。我错过了什么?为什么这两个应该相同的数字有多大差异呢?
答案 0 :(得分:0)
我尝试通过以下方式复制缩编:
cumsum(rets) -cummax(cumsum(rets))
其中rets是日志返回的向量。
出于某种原因,当我计算出低于20%的Drawdowns时,我得到的结果与table.Drawdowns()
&amp; drawdownsStats()
但是如果存在较大差异,则表示下降超过35%,那么最大亏损开始在计算之间出现分歧。更具体地说,table.Drawdowns()
&amp; drawdownsStats()
被夸大了(至少我注意到了)。我不知道为什么会出现这种情况,但也许可能有用的是,如果你使用下降的标准误差对大幅下降(超过35%)使用置信区间。我会使用:0.4298531511/sqrt(1127)
,即max drawdown/sqrt(depth to trough)
。这将产生+/- 0.01280437或下跌0.4169956至0.4426044,其中较低的区间0.4169956更接近您“手动”计算0.399373。希望它有所帮助。