我想计算下面data.frame中每列A:C的利润/回撤。标题 A 到 C 可以被视为股票代码。每一行都可以被视为每小时收盘价。价格日期和小时可以组合在一起,形成此时间序列数据的时间戳。
我尝试使用fTrading
和PerformanceAnalytics
包来计算最大回撤,但不断出现错误。我不在乎最大回撤何时发生。我只需要最大回撤的金额,这样我就可以用它来计算利润/回撤(利润除以最大回撤(比率。
数据:
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_by
name
并使用cummax
和max
计算drawdown
值。Profit
的计算方法是将last
减去first
值,pdd
profit
除以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