买低卖高

时间:2013-08-27 17:09:18

标签: r xts

我有这样的数据:

library("xts")
close <- c(0, -0.5, -0.75, -1, -0.75, -1.5, -2, -2.5, -3, -3.5, -3, -2.5, -2, -1, 0, 1, 1.5, 2, 2.5, 3, 2.5, 2, 0)
data <- xts(close, Sys.Date()-23:1)
colnames(data) <- "close"

我想生成另一个列,它会根据以下逻辑给我一个交易信号:

  • 当收盘价为@或低于-1,-2和-3时买入。
  • 当收盘价为@或高于0时卖出所有3个。
  • 当收盘价为@或高于1,2和3时卖空
  • 当收盘价为@或低于0时,全部购买3个。

为此我试过

data$trade <- 0
data$trade[data$close <= -1] <- 1
data$trade[data$close <= -2] <- 2
data$trade[data$close <= -3] <- 3
data$trade[data$close >= 1] <- -1
data$trade[data$close >= 2] <- -2
data$trade[data$close >= 3] <- -3

数据交易栏给我(0,0,0,1,0,1,2,2,,3,3,3,2,2,1,0,-1,-1,-2, -2,-3,-2,-2,0) 但我希望它应该给我((0,0,0,1,1,1,2,2,3,3,3,3,3,0,-1,-1,-2, - 2,-3,-3,-3,0) 我想要当我买@说-1或-2时,交易信号应该开启直到我们达到0或者更高,同样当我们做空卖出时@说-1,-2等交易信号应该开启直到我们达到0或以下。请帮助我尝试了很多组合,但没有得到所需的结果。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,这很难有效,因为选择取决于过去。它并不优雅,但是这段代码可以提供您需要的输出,

library("xts")
close <- c(0, -0.5, -0.75, -1, -0.75, -1.5, -2, -2.5, -3, -3.5, -3, -2.5, -2, -1, 0, 1, 1.5, 2, 2.5, 3, 2.5, 2, 0)
data <- xts(close, Sys.Date()-23:1)
colnames(data) <- "close"

sig.buy <- c(F,F,F)
sig.short <- c(F,F,F)

for(i in 1:length(data))
{
    if(data$close[i] <= -1) sig.buy[1] <- T
    if(data$close[i] <= -2) sig.buy[2] <- T
    if(data$close[i] <= -3) sig.buy[3] <- T

    if(sig.buy[1] && data$close[i] >= 0) sig.buy[1] <- F
    if(sig.buy[2] && data$close[i] >= 0) sig.buy[2] <- F
    if(sig.buy[3] && data$close[i] >= 0) sig.buy[3] <- F

    if(data$close[i] >= 1) sig.short[1] <- T
    if(data$close[i] >= 2) sig.short[2] <- T
    if(data$close[i] >= 3) sig.short[3] <- T

    if(sig.short[1] && data$close[i] <= 0) sig.short[1] <- F
    if(sig.short[2] && data$close[i] <= 0) sig.short[2] <- F
    if(sig.short[3] && data$close[i] <= 0) sig.short[3] <- F

    data$trade[i] <- sum(sig.buy) - sum(sig.short)
}