r语言 - 数据帧中每一列的利润回撤



我想计算下面data.frame中每列A:C的利润/回撤。标题 A 到 C 可以被视为股票代码。每一行都可以被视为每小时收盘价。价格日期和小时可以组合在一起,形成此时间序列数据的时间戳。

我尝试使用fTradingPerformanceAnalytics包来计算最大回撤,但不断出现错误。我不在乎最大回撤何时发生。我只需要最大回撤的金额,这样我就可以用它来计算利润/回撤(利润除以最大回撤(比率。

数据:

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 的输出,每个列分别用于股票代码、利润回撤比率和利润(在我的示例中,最后一行减去第一行 hourlyclose data.frame(。

生成的 data.frame 应如下所示:

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

我宁愿尽可能使用整洁的宇宙和这些财务包中的任何一个来运营。

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

每列的最大回撤:

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

对于 "B",有两个回撤,但只有一个最大回撤。股价从 9 降至 7,回撤 2。但该股在下一行达到新高至11,但随后下降到4,回撤为7。因此,"B"的最大回撤为 7。

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

我们可以获取长格式的数据,group_byname并使用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