【问题标题】:Mismatching drawdown calculations不匹配的回撤计算
【发布时间】: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


【解决方案1】:

我尝试通过以下方式复制回撤:

cumsum(rets) -cummax(cumsum(rets))

其中 rets 是日志返回的向量。

由于某种原因,当我计算低于 20% 的回撤时,我得到与table.Drawdowns()drawdownsStats() 相同的结果,但是当存在很大差异时说回撤超过 35%,那么最大回撤开始出现分歧计算之间。更具体地说,table.Drawdowns()drawdownsStats() 被夸大了(至少我注意到了)。我不知道为什么会这样,但如果您通过使用回撤的标准误差来使用大回撤(超过 35%)的置信区间,可能会有所帮助。我会使用:0.4298531511/sqrt(1127),即max drawdown/sqrt(depth to trough)。这将分别产生 0.01280437 的 +/- 或 0.4169956 到 0.4426044 的回撤,0.4169956 的较低区间更接近您“手动”计算的 0.399373。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多