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"

以下のロジックに基づいてトレードシグナルを提供する別の列を生成したいと思います。

  • 終値が @ または -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,3,0) ,-1,-1,-2,-2,-3,-3,-3,0) 私が買うとき、@ と言って -1 または -2 と言うトレードシグナルは、0 またはそれ以上に到達し、同様に空売りするときは、-1、-2 などと言い、0 以下になるまでトレードシグナルをオンにする必要があります。

4

1 に答える 1

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)
}
于 2013-08-27T17:49:30.787 に答える