data.frame 中每列的利润回撤
profit drawdown of each column in data.frame
我想计算下面data.frame中每一列A:C的profit/drawdown。 Header A 到 C 可以被视为股票代码。每行都可以视为每小时收盘价。 pricedate 和 hour 可以结合起来形成这个时间序列数据的时间戳。
我已经尝试使用 fTrading
和 PerformanceAnalytics
包来计算最大回撤,但总是出现错误。我不在乎最大回撤何时发生。我只需要最大回撤的数量,这样我就可以用它来计算 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
并使用 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
我想计算下面data.frame中每一列A:C的profit/drawdown。 Header A 到 C 可以被视为股票代码。每行都可以视为每小时收盘价。 pricedate 和 hour 可以结合起来形成这个时间序列数据的时间戳。
我已经尝试使用 fTrading
和 PerformanceAnalytics
包来计算最大回撤,但总是出现错误。我不在乎最大回撤何时发生。我只需要最大回撤的数量,这样我就可以用它来计算 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
并使用 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