data.frame 中每列的利润回撤

profit drawdown of each column in data.frame

我想计算下面data.frame中每一列A:C的profit/drawdown。 Header A 到 C 可以被视为股票代码。每行都可以视为每小时收盘价。 pricedate 和 hour 可以结合起来形成这个时间序列数据的时间戳。

我已经尝试使用 fTradingPerformanceAnalytics 包来计算最大回撤,但总是出现错误。我不在乎最大回撤何时发生。我只需要最大回撤的数量,这样我就可以用它来计算 profit/drawdown(利润除以最大回撤)比率。

数据:

hourlyclose <- data.frame(pricedate = as.Date('2019-12-18'), hour = c(1,2,3,4,5), A = c(3,5,6,2,4), B = c(1,9,7,11,4), C = c(0,2,5,4,9))

我想要第二个 data.frame 的输出,每个列都有股票代码、profit-drawdown 比率和利润(这是最后一行减去我的第一行例如 hourlyclose data.frame).

结果 data.frame 应如下所示:

Stock     pdd      profit
 A        0.25        1
 B        0.43        3
 C        9.0         9

我更愿意尽可能使用 tidyverse 和其中任何一个财务包进行操作。

回撤定义:回撤是衡量价格在达到或超过之前的高价之前下跌了多少。

每列的最大亏损:

对于 "A",最大回撤是 4,因为 A 处于 6 的高点然后下降到 2。

"B"有两次回撤,但只有一次最大回撤。股票价格从 9 跌至 7,跌幅为 2。但股价在下一行创下新高至 11,但随后跌至 4,跌幅为 7。因此最大跌幅为 7 "B".

对于 "C",股票价格从 5 减少到 4,最大回撤为 1。

我们可以获取长格式的数据,group_by name 并使用 cummaxmax 计算 drawdown 值。 Profit 的计算方法是 last 减去 first 的值,pddprofit 除以 drawdown

library(dplyr)

hourlyclose %>%
  tidyr::pivot_longer(cols = A:C) %>%
  group_by(name) %>%
  summarise(drawdown = max(cummax(value) - value), 
            profit  = last(value) - first(value), 
            pdd = profit/drawdown)

# A tibble: 3 x 4
#  name  drawdown profit   pdd
#  <chr>    <dbl>  <dbl> <dbl>
#1 A            4      1 0.25 
#2 B            7      3 0.429
#3 C            1      9 9