data.frame中每列的利润提取

data.frame中每列的利润提取,r,dplyr,finance,performanceanalytics,R,Dplyr,Finance,Performanceanalytics,我想计算下面data.frame中每个列A:C的利润/支取。标题A到C可以被视为股票代码。每行可被视为每小时收盘价。pricedate和hour可以组合在一起,形成此时间序列数据的时间戳 我曾尝试使用fTrading和PerformanceAnalytics软件包来计算最大提取,但不断出现错误。我不在乎什么时候出现最大水位下降。我只需要最大提取金额,这样我就可以用它来计算利润/提取(利润除以最大提取)比率 数据: 我更愿意尽可能多地使用tidyverse和这两个融资包中的任何一个进行运营 支取定

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

我曾尝试使用
fTrading
PerformanceAnalytics
软件包来计算最大提取,但不断出现错误。我不在乎什么时候出现最大水位下降。我只需要最大提取金额,这样我就可以用它来计算利润/提取(利润除以最大提取)比率

数据:

我更愿意尽可能多地使用tidyverse和这两个融资包中的任何一个进行运营

支取定义:支取是衡量价格在达到或超过之前的高价之前下降了多少

每列的最大提取量:

对于“A”,最大压降为4,因为A的最高值为6,然后降至2

对于“B”,有两个下降,但只有一个最大下降。股票价格从9降至7,降幅为2。但该股在下一行达到11点的新高,但随后降至4点,跌幅为7点。因此,“B”的最大压降为7


对于“C”,股票价格从5降低到4,最大支取为1。

我们可以获得长格式的数据,
名称分组
,并使用
cummax
max
计算
支取
值<代码>利润通过用
第一个
值减去
最后一个
来计算,
pdd
利润
除以
提取

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    
库(dplyr)
小时循环%>%
tidyr::pivot_更长(cols=A:C)%>%
分组单位(名称)%>%
汇总(下降=最大值(最大值)-值),
利润=最后一个(价值)-第一个(价值),
pdd=利润/提取)
#一个tibble:3x4
#名称提取利润pdd
#         
#1A 41 0.25
#2 B 7 3 0.429
#3 C 19 9

这是否正确计算了提款?下降不仅仅是高减去低。如果B=c(9,2,15,14,13),最大降深为7。价格的顺序很重要。@otterdog2000我不是在计算
下降的高低<代码>差异
计算连续值的差异。您可以尝试使用
B=c(9,2,15,14,13)
,然后使用
-min(diff(B))
返回7。让我知道我的理解是否正确。好的,下降不仅仅是连续值。对于B=c(9,5,2,7,8),水位下降仍为7。支取是衡量价格在达到或超过之前的高价值之前下降了多少,如果它曾经达到或超过,我明白了。我当时误解了缩编的概念。我已使用
cummax
更新了答案。你现在能查一下吗?
Stock     pdd      profit
 A        0.25        1
 B        0.43        3
 C        9.0         9
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