【发布时间】:2014-08-10 00:44:19
【问题描述】:
我想请你澄清下一个问题,这对我来说非常重要,因为我的硕士论文的主要部分依赖于正确实现以下示例中计算的数据。 我有一个金融时间序列列表,如下所示(AUDUSD 示例):
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
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
另外,其他提款部门不同意“手动”计算。我错过了什么?这两个本来应该一样的数字,怎么会相差这么大?
【问题讨论】:
-
您是如何为您的“手动”选择输入值的,您能否验证在
drawdownsStats函数中使用的正是这些值(例如没有其他中间项)? -
您拥有 PerformanceAnalytics 回撤函数的源代码。将其与您的“手动”计算进行比较。
-
drawdownStats 函数是 timeseries 包的一部分。
标签: r time-series finance