動物園シリーズで作業する場合rollapply()
、パッケージの関数を使用できます。zoo
TimeSeries <- cumsum(rnorm(1000))
ZooSeries <- as.zoo(TimeSeries)
BollLines <- rollapply(ZooSeries,9,function(x){
M <- mean(x)
SD <- sd(x)
c(M,M+SD*2,M-SD*2)
})
ここで、中央のフレームを使用することを覚えておく必要がrollapply
あります。つまり、現在の日付の左右の値を取ります。これは、x 個の事前値を取るという提案よりも便利で、ボリンジャー バンドの定義に忠実です。
Zoo に変換したくない場合は、ベクターも使用して独自の関数を作成できます。計算も簡単にプロットできる S3 ベースのプロット関数を追加しました。これらの関数を使用すると、次のようなことができます。
TimeSeries <- cumsum(rnorm(1000))
X <- BollingerBands(TimeSeries,80)
plot(X,TimeSeries,type="l",main="An Example")
取得するため :

機能コード:
BollingerBands <- function(x,width){
Start <- width +1
Stop <- length(x)
Trail <- rep(NA,ceiling(width/2))
Tail <- rep(NA,floor(width/2))
Lines <- sapply(Start:Stop,function(i){
M <- mean(x[(i-width):i])
SD <- sd(x[(i-width):i])
c(M,M+2*SD,M-2*SD)
})
Lines <- apply(Lines,1,function(i)c(Trail,i,Tail))
Out <- data.frame(Lines)
names(Out) <- c("Mean","Upper","Lower")
class(Out) <- c("BollingerBands",class(Out))
Out
}
plot.BollingerBands <- function(x,data,lcol=c("red","blue","blue"),...){
plot(data,...)
for(i in 1:3){
lines(x[,i],col=lcol[i])
}
}