【问题标题】:Aggregating a position value based on entry/exit values xts根据进入/退出值 xts 聚合位置值
【发布时间】:2014-11-13 06:14:14
【问题描述】:

我正在尝试使用进入/退出信号来生成位置/信号数据列以进行分析。我希望进入信号是累积的,退出值表示所有当前进入头寸的退出。此外,我希望能够在没有任何当前进入位置的情况下处理给出的退出信号(当然,这应该不会导致任何结果)。在保留累积属性的同时,我似乎无法合理地合并最后一个函数。

我认为我可以通过这个解决方案到达那里。我只是无法让最后一部分为我工作。

Change value of some column in xts based on other columns values with lookback

从引用的问题中借用一些任意输入/退出数据:

> Entry <- c(1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0)
> Exit <- c(0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1)

所需的解决方案如下所示:

> DesiredOutcome
      Entry Exit Signal
 [1,]     1    0      1
 [2,]     0    0      1
 [3,]     0    0      1
 [4,]     1    0      2
 [5,]     0    0      2
 [6,]     0    0      2
 [7,]     1    0      3
 [8,]     0    0      3
 [9,]     0    1      3
[10,]     0    0      0
[11,]     0    0      0
[12,]     0    1      0
[13,]     1    0      1
[14,]     0    0      1
[15,]     0    0      1
[16,]     1    0      2
[17,]     0    0      2
[18,]     0    0      2
[19,]     0    1      2
[20,]     0    0      0
[21,]     0    1      0
[22,]     1    0      1
[23,]     0    0      1
[24,]     0    1      1

任何帮助将不胜感激!

更新。根据要求,这里有一些解决该问题的尝试,但效果不佳。

试图询问指标(在本例中为 s$Z203),而不是使用进入/退出/信号列。小于 -2 的值为进入,大于 2 的值为退出。

s$position =2,0, ifelse(s$Z203

使用多列方法,我认为我可以使用简单的算术(如发布的示例中所示),并且避免在迭代数据时查询 xts 对象的前几行。有几个课程专栏来完成这个过程让我很接近,但仍然没有解决适用于所有聚合入场信号的 1 个退出触发器并忽略没有任何入场位置的退出信号。

【问题讨论】:

  • 目前写的,这与xts无关。此外,StackOverflow 不是代码编写服务。如果您实际展示您尝试过的内容以及遇到的问题,您会得到更好的回应。
  • xts 被包括在内,因此任何响应都是 xts 兼容的方法。与所有事物一样,有无数种失败的方式和几种成功的方式。如果有用的话,我会巩固我的失败,但我担心这只是噪音。生病更新的例子。
  • 你能解释一下第三列是怎么用word计算的吗?为什么第 9 行有 3?为什么第 12 行有出口,第 13 行却是 1?
  • 当日收盘时将生成退出,因此信号直到下一个交易日才会更新,因此 [9,] 在这种情况下会触发在第 [10 天] 卖出 3 个条目,]。第 13/12 行问题是我坚持的问题。 [12,] 是退出卖出信号,但没有什么可卖出的。所以信号栏应该保持为 0。[13,] 触发买入(入场),所以现在有一个对退出触发敏感的股票头寸。

标签: r xts finance


【解决方案1】:

您正在按组计算Entry 的cumsum,其中组是滞后的Exit 列的cumsum。有很多方法可以“拆分、应用、组合”。其中之一是ave:

> cbind(Entry, Exit, Signal=ave(Entry, cumsum(c(0, head(Exit, -1))), FUN=cumsum))
      Entry Exit Signal
 [1,]     1    0      1
 [2,]     0    0      1
 [3,]     0    0      1
 [4,]     1    0      2
 [5,]     0    0      2
 [6,]     0    0      2
 [7,]     1    0      3
 [8,]     0    0      3
 [9,]     0    1      3
[10,]     0    0      0
[11,]     0    0      0
[12,]     0    1      0
[13,]     1    0      1
[14,]     0    0      1
[15,]     0    0      1
[16,]     1    0      2
[17,]     0    0      2
[18,]     0    0      2
[19,]     0    1      2
[20,]     0    0      0
[21,]     0    1      0
[22,]     1    0      1
[23,]     0    0      1
[24,]     0    1      1

如果你从 xts 开始,你可以这样做

x <- .xts(cbind(Entry, Exit), seq_along(Entry))
x$Signal <- with(xx, ave(Entry, cumsum(c(0, lag(Exit, na.pad=FALSE))), FUN=cumsum))

【讨论】:

  • 啊,这太棒了。我非常感谢您的帮助。我没有意识到这一点。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 2012-12-14
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多