我失去了想法(以我有限的 R 知识)如何以高性能(矢量化)方式解决以下“问题”。
我想确定 SPX 连续 3 天或更长时间收盘的日子,同时又不是来自 50 天的低点。我将此编程为固定回顾三天,但不知道如何使其动态化。这是代码:
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)
编辑开始
我想看看,如果我们连续三天(3、4、5,...)在 SPX 上上涨(保留在变量 numDaysPositive 中),这种上涨是否来自 50 天的低点。我想回顾 3、4、5……天,看看是否在那个特定日期(3、4、5……)天前 SPX 创下了 50 天的低点。“逻辑”或假设是,对于从 50 天低点开始连续 3 天或更多天上涨的反弹并不少见,但是,如果我们连续 3、4、5 天......没有从 50 天低点开始,那么,这可能值得考虑,因为其中一个“证据”市场可能会停止甚至下跌一段时间。
现在我在最后一个 ifelse 中使用 k=3 的 lag.xts 但想使用 k=numDaysPositive (动态)。
编辑结束
所以,我希望滞后的 k 基于 numDaysPositive 中的值是动态的。我相信如果只有一个人可以看到这很容易......我现在整天都在看这个并且没有想到任何东西。