data.frame中每一列的利润下降

时间:2019-12-31 04:34:48

标签: r dplyr finance performanceanalytics

我想计算以下data.frame中每列A:C的利润/亏损。标头A到C可以视为股票行情指示器符号。每行都可以视为每小时收盘价。可以将pricedate和hour结合起来以形成此时间序列数据的时间戳。

我尝试使用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

我希望尽可能使用tidyverse和这两个财务软件包中的任何一个进行操作。

回撤定义:回撤是对价格在达到或超过之前的高价之前下跌幅度的度量。

每列的最大亏损:

对于“ A”,最大跌幅为4,因为A处于6的高点,然后下降到2。

对于“ B”而言,有两次亏损,但只有一次最大亏损。股票价格从9下跌到7,跌幅为2。但是股票在下一排达到新高,跌至11,然后下跌到4,跌幅为7。因此最大跌幅为7代表“ B”。

对于“ C”,股票价格从5减少到4,最大跌幅为1。

1 个答案:

答案 0 :(得分:0)

我们可以获取长格式name drawdown的数据,并使用cummaxmax计算Profit的值。通过将last减去first来计算pdd,并且profitdrawdown除以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 的值。

public interface IViewRenderService
{
    Task<string> RenderToStringAsync(string viewName, object model);
}