我需要优化现有的买卖信号,就像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-原始问题恢复与初始相同。
谁能帮助我吗?将不胜感激。答案 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
很长,那些多余的替换可能需要一些额外的时间。