数据框数学根据指标计算利润

时间:2016-05-25 00:58:23

标签: r financial

简单说明:我的目标是弄清楚如何获得如下所示的利润列。我想为每对变化值(-1到1和1到-1)计算val的差异。

  1. 如果起始indicator为1或-1,则存储该值。
  2. 找到相反的下一个indicator(第3行为-1)。保存这个val。从中减去第一个值(.85 .-。84)。将其存储在利润列中。
  3. 重复
  4. 特定于此案例

    1. 直到找到下一个对面的val(第4行)。保存此值。减去值,保存在利润列中。 ()
    2. 直到找到下一个对面的val(第8行)。保存此值。减去值,保存在利润列中。 财务解释(如果有用) 我正在尝试编写一个函数来计算一列值和一列指标(买入/卖出/持有)的利润。我知道这是在一些大包(quantmod,quantstrat)中实现的,但我似乎无法找到一种简单的方法来实现它。

      df<-
      

      data.frame(VAL = C(0.84,0.83,0.85,0.83,0.83,0.84,0.85,0.81),指标= C(1,0,-1,1,0 ,1,1,-1))

      df
      val      indicator  profit
      1 0.84         1       NA
      2 0.83         0       NA
      3 0.85        -1       .01  based on: (.85-.84) from 1 one to -1
      4 0.83         1       .02  based on (.85-.83) from -1 to 1
      5 0.83         0       NA 
      6 0.84         1       NA 
      7 0.85         1       NA
      8 0.81        -1       -.02  based on (.81-.83) from last change (row 4) to now 
      
    3. 注释

      • 应忽略多个指标(1111)表示除了应存储的第一个指标之外的任何指标。 (存储第4行,第5,6,7行不存在)
      • 忽略0,保持不改变利润计算

      如果需要,我很乐意提供更多信息。

1 个答案:

答案 0 :(得分:0)

在将问题分成两部分之后,我更容易在脑中解决这个问题,这两部分对应于下面显示的两个循环。第一部分涉及标记指标值发生变化的行,而第二部分涉及从相关行(即第1部分中选择的那些行)中减去val。仅供参考,我假设您打算在您的示例中为第4行添加-02?如果没有,那么请说明在计算利润时减去哪些行。

data.frame(val=c(.84,.83,.85,.83,.83,.84,.85,.81),
           indicator=c(1,0,-1,1,0,1,1,-1)) -> x

x$num <- seq_along(x$val)
x$rollingProf <- NA
# start with indicator = 1

indicator <- 1
value <- .84

for (i in 1:(nrow(x) - 1)) {        
    x[i + 1, "indicator"] -> next_
    if (indicator * -1 == next_) {
        1 -> x[i + 1, "rollingProf"]
        indicator <- next_
    } 
}

x[!is.na(x$rollingProf), c("val", "num")] -> q
for (i in 2:nrow(q)) {
    q[i, "val"] - q[i - 1, "val"] -> q[i, "change"]
}