私はRに本当に新しく、私はまだ()関数のために頭を抱えています。私のデータ(MergedData)のサンプルは、hereにリンクされています(私は長さについてお詫び申し上げます、できるだけ短くしようとしました)。私は小さなプロジェクトに取り組んでいる、と私は、次の機能を持っている:for()関数で印刷された値を変数として保存しますか?
new.trend <- function(MergedData)
{
ret <- as.list(rep(NA, length(MergedData)))
ma.sig <- ma.crossover(MergedData)
pricebreak <- price.channel(MergedData)
sig <- intersect(which((ma.sig[1,])==1), which(!pricebreak[1,]==0))
for (i in sig) { #Calculates output variables based on active signals
x <- MergedData[[i]]
x <- xts(x[,-1], order.by=x[,1])
dev20 <- (x[,4]-SMA(x[,4], n=20))/x[,4]*100
dev50 <- (x[,4]-SMA(x[,4], n=50))/x[,4]*100
RSI <- RSI(x[,4], n=14)
ret[[i]]<- na.omit(merge(tail(dev20, n=1L), tail(dev50, n=1L), tail(RSI, n=1L)))
}
na.omit(print(ret))
}
print(new.trend(MergedData))
問題/問題
リターン(RET)は、この戻っている:
> new.trend(MergedData)
[[1]]
EUR.LAST EUR.LAST.1 EMA
2017-02-09 -0.6968559 0.3526983 44.68176
[[2]]
[1] NA
[[3]]
GBP.LAST GBP.LAST.1 EMA
2017-02-09 -0.1920461 1.027927 52.27664
[[4]]
CHF.OPEN CHF.OPEN.1 EMA
2017-02-09 0.5066387 -0.7241689 52.56533
[[5]]
[1] NA
[[6]]
[1] NA
[[7]]
[1] NA
[[8]]
[1] NA
[[9]]
[1] NA
[[10]]
[1] NA
[[11]]
[1] NA
[[12]]
[1] NA
[[13]]
PLN.CLOSE PLN.CLOSE.1 EMA
2017-02-09 0.2824105 -1.569392 48.24069
[[14]]
[1] NA
[[15]]
TRY.CLOSE TRY.CLOSE.1 EMA
2017-02-09 -2.315328 -0.2501765 42.52731
[[16]]
ZAR.CLOSE ZAR.CLOSE.1 EMA
2017-02-09 -0.09598239 -1.492148 46.06286
[[17]]
[1] NA
[[18]]
CLP.CLOSE CLP.CLOSE.1 EMA
2017-02-09 -0.2433194 -2.112368 40.93616
[[19]]
[1] NA
[[20]]
MXN.CLOSE MXN.CLOSE.1 EMA
2017-02-09 -2.460443 -3.490762 34.67792
[[21]]
PEN.CLOSE PEN.CLOSE.1 EMA
2017-02-09 -0.4138617 -1.974541 37.84737
[[22]]
CNY.CLOSE CNY.CLOSE.1 EMA
2017-02-09 -0.08749199 -0.5004658 44.39283
[[23]]
IDR.CLOSE IDR.CLOSE.1 EMA
2017-02-09 -0.4064827 -0.631571 35.91677
[[24]]
INR.CLOSE INR.CLOSE.1 EMA
2017-02-09 -1.291429 -1.594705 21.83156
[[25]]
KRW.CLOSE KRW.CLOSE.1 EMA
2017-02-09 -0.8529425 -2.840274 34.61214
[[26]]
MYR.CLOSE MYR.CLOSE.1 EMA
2017-02-09 0.1407816 -0.4020273 49.80231
[[27]]
SGD.CLOSE SGD.CLOSE.1 EMA
2017-02-09 0.123548 -0.7103133 49.73621
[[28]]
PHP.CLOSE PHP.CLOSE.1 EMA
2017-02-09 0.1355443 0.236601 55.61772
[[29]]
THB.CLOSE THB.CLOSE.1 EMA
2017-02-09 -0.518655 -1.396926 23.51997
をしかし、私はfor()関数で次のようなものを検索したい:
> for (i in sig) { #Calculates output variables based on active signals
+ x <- MergedData[[i]]
+ x <- xts(x[,-1], order.by=x[,1])
+ dev20 <- (x[,4]-SMA(x[,4], n=20))/x[,4]*100
+ dev50 <- (x[,4]-SMA(x[,4], n=50))/x[,4]*100
+ RSI <- RSI(x[,4], n=14)
+ print(ret[[i]]<- na.omit(merge(tail(dev20, n=1L), tail(dev50, n=1L), tail(RSI, n=1L))))
+ }- (x[,4]-SMA(x[,4], n=50))/x[,4]*100
RSI <- RSI(x[,4], n=14)
print(ret[[i]]<- na.omit(merge(tail(dev20, n=1L), tail(dev50, n=1L), tail(RSI, n=1L))))
}
EUR.LAST EUR.LAST.1 EMA
2017-02-09 -0.6968559 0.3526983 44.68176
GBP.LAST GBP.LAST.1 EMA
2017-02-09 -0.1920461 1.027927 52.27664
CHF.OPEN CHF.OPEN.1 EMA
2017-02-09 0.5066387 -0.7241689 52.56533
PLN.CLOSE PLN.CLOSE.1 EMA
2017-02-09 0.2824105 -1.569392 48.24069
TRY.CLOSE TRY.CLOSE.1 EMA
2017-02-09 -2.315328 -0.2501765 42.52731
ZAR.CLOSE ZAR.CLOSE.1 EMA
2017-02-09 -0.09598239 -1.492148 46.06286
CLP.CLOSE CLP.CLOSE.1 EMA
2017-02-09 -0.2433194 -2.112368 40.93616
MXN.CLOSE MXN.CLOSE.1 EMA
2017-02-09 -2.460443 -3.490762 34.67792
PEN.CLOSE PEN.CLOSE.1 EMA
2017-02-09 -0.4138617 -1.974541 37.84737
CNY.CLOSE CNY.CLOSE.1 EMA
2017-02-09 -0.08749199 -0.5004658 44.39283
IDR.CLOSE IDR.CLOSE.1 EMA
2017-02-09 -0.4064827 -0.631571 35.91677
INR.CLOSE INR.CLOSE.1 EMA
2017-02-09 -1.291429 -1.594705 21.83156
KRW.CLOSE KRW.CLOSE.1 EMA
2017-02-09 -0.8529425 -2.840274 34.61214
MYR.CLOSE MYR.CLOSE.1 EMA
2017-02-09 0.1407816 -0.4020273 49.80231
SGD.CLOSE SGD.CLOSE.1 EMA
2017-02-09 0.123548 -0.7103133 49.73621
PHP.CLOSE PHP.CLOSE.1 EMA
2017-02-09 0.1355443 0.236601 55.61772
THB.CLOSE THB.CLOSE.1 EMA
2017-02-09 -0.518655 -1.396926 23.51997
ヒント、提案、およびポインタは非常に高く評価されます!私はfor()関数が理想的でないかもしれないことを理解していますが、sigのインデックスに対応するMergedData値だけを循環させる方法を知っている唯一の方法です。
感謝を生成しますが、何らかの理由で私はまだna.omit(プリント(RET)と同じ結果を得ています) – Nikitau
私は本当に2回目の試みに感謝しています:)しかし、それは私に "エラー '[.xts'(x、!is.na(x))を与えています:' i 'または' j 'が範囲外です。私もna.omit(do.call(ret、merge))を試みましたが、空の行列を返しました。 – Nikitau
hmm ... dgetでデータをロードしようとしましたが、Rが失敗します。あなたはdputのデータをダンプできますか? – kwicher