2

このコードを最適化 (はるかに高速化) することは可能ですか?

out <- do.call(rbind,
        lapply(split(Cl(cumulativeBars), "days"), 
                function(x) {
                    previousFullBars <- barsEndptCl[as.Date(index(barsEndptCl), tz=indexTZ(barsEndptCl)) < as.Date(last(index(x)), tz=indexTZ(x)), ]
                    if (NROW(previousFullBars) >= 4) {
                        last(SMA(last(rbind(previousFullBars, x), n=6), n=5))
                    } else {
                        xts(NA, order.by=index(x))
                        }
                    }))

以下に、実行されるすべてのコード例を含む私の元の質問を見つけることができますが、私のニーズに合わせて少し遅くなります。

元の質問:

xts を累積的な方法でより低い周波数に変換できた後、このリストを読んでいる人々のおかげで、xts を累積的な方法でより低い周波数に変換する方法。

現在、以下のコードを使用して移動平均の「進化」を計算しようとしています。私にとっては遅いです。このコード (# TODO: 移動平均を計算する方法から) で、out <- do.call(rbind,lapply(split(Cl(cumulativeBars)...) で始まる部分) を何らかの方法で最適化できますか?

to.weekly.cumulative <- function(xts.obj, name="") {
    out <- do.call(rbind, 
            lapply(split(xts.obj, 'weeks'), 
                    function(x) cbind(rep(first(x[,1]), NROW(x[,1])), 
                                cummax(x[,2]),     cummin(x[,3]), x[,4])))
    colnames(out) <- paste(name, c("Open", "High", "Low", "Close"), sep=".")
    out
}

library(quantmod)
data(sample_matrix)
myxts <- as.xts(sample_matrix)

head(to.weekly.cumulative(myxts), 15)

# TODO: How to compute moving average?

# This SMA(Cl(to.weekly.cumulative(myxts)), n=5) would obviously be wrong 

cumulativeBars <- to.weekly.cumulative(myxts)

barsEndptCl <- Cl(cumulativeBars[endpoints(cumulativeBars, 'weeks')])
barsEndptCl <- Cl(to.weekly(myxts))

#all.equal(cumulativeBars[endpoints(cumulativeBars, 'weeks')], to.weekly(myxts))

out <- do.call(rbind,
        lapply(split(Cl(cumulativeBars), "days"), 
                function(x) {
                    previousFullBars <-     barsEndptCl[as.Date(index(barsEndptCl), tz=indexTZ(barsEndptCl)) < as.Date(last(index(x)),     tz=indexTZ(x)), ]
                    if (NROW(previousFullBars) >= 4) {
                                last(SMA(last(rbind(previousFullBars, x), n=6), n=5))
                    } else {
                        xts(NA, order.by=index(x))
                        }
                    }))

colnames(out) <- "SMA5"

out <- lag.xts(out, k=7)

chart_Series(to.weekly(myxts))
add_TA(SMA(to.weekly(myxts), 5), on=1, col="red")
add_TA(out, on=1, col="green")
4

1 に答える 1

0

あなたが確認しようとしているかもしれないように、移動平均は正確に「進化」しません。モメンタム指標であるため、長期的な「進化」よりもサイクルに関するものです。

トレンドが特定の方向に進んでいるのを見ると、移動平均線から間違いなくホップできます。200 日トレンドは 190 日トレンドの前にあり、その前は 180 日トレンドです。これは、取引システムを構築するためのより扱いやすい概念かもしれません。

于 2016-03-22T19:39:57.847 に答える