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