优化R中的买卖信号

时间:2018-04-02 13:09:33

标签: r

我需要优化现有的买卖信号,就像r中的backtrader一样。

信号 看起来像

-1 -1 -1  1  1 1 1 -1 -1 -1  0  0 0 0 0 0 0 0

其中 -1 =持有,0 =买入,1 =卖出

优化后的信号应该是

-1 -1 -1  1  -1 -1 -1 -1 -1 -1  0  -1 -1 -1 -1 -1 -1 -1

我只想考虑一组买卖中的第一个信号。 我想减少多次购买和销售的顺序。

EDITED-原始问题恢复与初始相同。

谁能帮助我吗?将不胜感激。

2 个答案:

答案 0 :(得分:4)

这也应该有用。在这里,检查信号值的差异,并将所有没有变化的值替换为-1。初始值为FALSE填充初始值。

z[c(FALSE, (diff(x) == 0))] <- -1

返回

z
[1] -1 -1 -1  1 -1 -1 -1 -1 -1 -1  0 -1 -1 -1 -1 -1 -1 -1

数据

z <- scan(text="-1 -1 -1  1  1 1 1 -1 -1 -1  0  0 0 0 0 0 0 0", what=0L)

答案 1 :(得分:3)

signal[signal %in% 0:1 & c(NA, diff(signal)) == 0] <- -1

完成这项工作。 signal %in% 0:1找到买卖,而c(NA, diff(signal)) == 0查找除第一个以外的群组元素。

如果-1,0和1是唯一可能的signal值,那么,正如@lmo建议的那样,只需

signal[c(NA, diff(signal)) == 0] <- -1

只需另外用-1替换-1即可。另一方面,如果signal很长,那些多余的替换可能需要一些额外的时间。