【问题标题】:maxdrawdown functionmaxdrawdown 函数
【发布时间】:2012-12-06 08:38:03
【问题描述】:

在 R 中,我看到有两个包具有 maxdrawdown 功能。

一个是fTrading,另一个是PerformaceAnalytics

每个都进行不同的计算。

  1. fTrading 似乎假设价值是资产的价格,因此回撤属于估值。
  2. 这同样适用于 PerformanceAnalytics,只是它以百分比形式给出答案。

是否有一个带有 maxdrawdown 函数的包,它期望 P/L 数据在一个系列中,并根据它给出回撤?

例如如果您有以下数据

c(12,10,5,-4,-2,1,5,6)

最大回撤是:

-4 + -2=-6.

【问题讨论】:

  • 我通常使用tseries包中的maxdrawdown ...
  • tseries 和 fTrading 完全一样
  • 我真的只是在指出另一个你没有提到的带有 maxdrawdown 函数的包。 fTrading::maxDrawdown 基于 tseries::maxdrawdown(较旧)。使用tseries 的优点是它不依赖于您可能不想安装和加载的几个包。

标签: r finance


【解决方案1】:

编写自己的函数很容易:

drawdown <- function(pnl) {
   cum.pnl  <- c(0, cumsum(pnl))
   drawdown <- cum.pnl - cummax(cum.pnl)
   return(tail(drawdown, -1))
}

maxdrawdown <- function(pnl)min(drawdown(pnl))

(当然,如果您的约定是回撤应该是正数,您可以更改符号并将min 替换为max

pnl <- c(12,10,5,-4,-2,1,5,6)
drawdown(pnl)
# [1]  0  0  0 -4 -6 -5  0  0
maxdrawdown(pnl)
# [1] -6

【讨论】:

  • 你如何得到百分比?
  • 您可以通过“pnl / total_investment”获取百分比值。其中,total_investment 是您的投资金额。
【解决方案2】:

您正在尝试查找 PnL 的 cumsummaxDrawDown(与帐户值相同)。

> library(fTrading)
> maxDrawDown(cumsum(c(0, c(12,10,5,-4,-2,1,5,6))))
$maxdrawdown
[1] 6

$from
[1] 3

$to
[1] 5

【讨论】:

  • 确切地说,应该是maxDrawDown(cumsum(0, pnl)),以说明任意点的最大值为V(t=0) = 0的可能性。如果你用pnl &lt;- c(-30, 30, 12,10,5,-4,-2,1,5,6)测试会更明显
猜你喜欢
  • 2022-07-20
  • 1970-01-01
  • 2015-11-17
  • 2018-01-30
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多