성능이 좋은 (벡터화 된) 방식으로 "문제"를 해결하는 방법을 제한된 R 지식으로 잃었습니다.다른 xts 객체의 다른 열을 기반으로 다른 k를 가진 ifelse에서 지연을 호출
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)
편집 START는
우리가 SPX 위로 있다면 내가보고 싶은3 일, 4 일, 5 일 ... (변수 numDaysPositive로 유지)이 상승이 50 일 최저 였는지 여부. 3, 4, 5, ... 며칠 전에 특정 날짜 (3, 4, 5, ...) 일 전에 SPX가 50 일을 낮게 유지했는지 확인하고 싶습니다. "논리"또는 가정은 50 일 최저에서 3 일 이상 연속 상승하는 집회가 드문 일이 아니지만 우리가 3, 4, 5, ... 일 연속으로 진행한다면 50 일의 최저치에서 시작하지 않았다면, "증거"시장 중 하나가 잠시 멈추거나 잠잠해질 수 있으므로 고려해 볼 가치가 있습니다.
지금은 마지막 ifelse에서 k = 3 인 lag.xts를 사용하고 있지만 k = numDaysPositive (동적)를 사용하고 싶습니다.
편집 END 그래서
, I는 numDaysPositive의 값에 기반 동적 지연에 해당 K 싶습니다. 나는 이것이 어떻게 쉬운지를 볼 수 있다면 이것이 쉽다는 것을 확신합니다 ... 나는 지금 하루 종일 이것을보고 있습니다. 그리고 아무것도 생각에 오지 않습니다.
코드에서 사용자가하려는 작업이 명확하지 않습니다. 'SPX.Lo.gt.50day.low'는'k = n'이 아니면 항상'1'입니다. –
나는 질문을 편집했다. 나는 내가 성취하려는 것을 더 잘 설명해주기를 바랍니다. 전에 계산 된 일수를 기준으로 lag.xts에서 동적 k를 유지하십시오. – user947967