私は(限られたRの知識で)パフォーマンスの高い(ベクトル化された)方法で次の「問題」に取り組む方法のアイデアを失いました。
SPXが3日以上連続してクローズし、同時に50日安値から来ていない日を特定したいと思います。私はこれを3日間の固定ルックバック用にプログラムしましたが、動的にする方法がわかりません。コードは次のとおりです。
require(quantmod)
getSymbols(c("^GSPC"), adjust=TRUE, from="1990-01-01")
assign("SPX", GSPC, envir=.GlobalEnv)
names(SPX) <- c("SPX.Open", "SPX.High", "SPX.Low", "SPX.Close", "SPX.Volume", "SPX.Adjusted")
SPX.ClCl.positive <- ifelse(ClCl(SPX) > 0, 1, 0)
SPX.ClCl.positive[is.na(SPX.ClCl.positive)] <- 0
numDaysPositive <- cumsum(SPX.ClCl.positive) - cummax(cumsum(SPX.ClCl.positive)* (!SPX.ClCl.positive))
numDaysPositiveGreaterThan3 <- ifelse(numDaysPositive >= 3, 1, 0)
SPX.Lo.gt.50day.low <- ifelse(lag.xts(Lo(SPX), k=3) <= runMin(Lo(SPX), n=50), 1, 0)
私ができることは次のようなものです。
SPX.Lo.gt.50day.low <- ifelse(lag.xts(Lo(SPX), k=numDaysPositive) <= runMin(Lo(SPX), n=50), 1, 0)
編集開始
SPXを3日以上続けて(3、4、5、...)(変数numDaysPositiveで維持)、この上昇が50日安値から来たかどうかを確認したいと思います。3、4、5、...日を振り返って、その特定の日付(3、4、5、...)日前にSPXが50日安値になったかどうかを確認したいと思います。「論理」または仮定は、50日安値からのラリーが3日以上連続して上昇することは珍しいことではありませんが、3、4、5、...日連続で上昇している場合は50日間の安値から始まったわけではないので、「証拠」市場の1つが停止するか、しばらくの間下落する可能性があるため、これは検討する価値があるかもしれません。
今のところ、最後のifelseでk = 3のlag.xtsを使用していますが、k = numDaysPositive(動的)を使用したいと思います。
編集終了
したがって、ラグのkは、numDaysPositiveの値に基づいて動的になります。誰もがその方法を見ることができれば、これは簡単だと確信しています...私は今一日中これを見ていますが、何も思い浮かびません。