我想计算以下data.frame中每列A:C的利润/亏损。标头A到C可以视为股票行情指示器符号。每行都可以视为每小时收盘价。可以将pricedate和hour结合起来以形成此时间序列数据的时间戳。
我尝试使用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
我希望尽可能使用tidyverse和这两个财务软件包中的任何一个进行操作。
回撤定义:回撤是对价格在达到或超过之前的高价之前下跌幅度的度量。
每列的最大亏损:
对于“ A”,最大跌幅为4,因为A处于6的高点,然后下降到2。
对于“ B”而言,有两次亏损,但只有一次最大亏损。股票价格从9下跌到7,跌幅为2。但是股票在下一排达到新高,跌至11,然后下跌到4,跌幅为7。因此最大跌幅为7代表“ B”。
对于“ C”,股票价格从5减少到4,最大跌幅为1。
答案 0 :(得分:0)
我们可以获取长格式name
drawdown
的数据,并使用cummax
和max
计算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
的值。
public interface IViewRenderService
{
Task<string> RenderToStringAsync(string viewName, object model);
}