2013-03-30 2 views
1

quantmod을 조합하여 촛대 차트 패턴을 기반으로 거래 신호를 생성하고 싶습니다. 내 계획은 OHLC 데이터를 기반으로 시간 주기별 신호를 계산하는 사용자 정의 함수를 작성하는 것입니다. 내가 지금까지이 것은 다음 XTS 객체에가까운 시간대에 일치하는 숫자 패턴

getSymbols("IBM", src="google") 
candle = function(data, ...) 
{ 
    if (abs(Op(data)-Cl(data)) < (Op(data)*0.0005)) 
     doji = "doji" 
    else 
     doji = "non-doji" 
    return(doji) 
} 
apply.daily(IBM, FUN=candle) 

이 기능은 모든 일에 대한 값을 반환합니다. 이제 이전 값 또는 다음 값을 기반으로하는 계산식을 candle에 추가하고 싶습니다. 인접한 값에 어떻게 액세스 할 수 있습니까?

나는 기능 candle에있는 개체 data은 하나의 행 것으로 보인다 (적어도 그게 내가 nrow를 호출 할 때 내가 무엇을 얻을). 나는 lag을 사용해 보았지만, 항상 NA을 얻었습니다. (아마 내 xts 객체는 한 행에 불과하기 때문일 것입니다.)

어떤 도움

주시면 감사하겠습니다. 또한 나는 퀀텀 (quantmod)에 관해 더 많은 것을 배울 수있는 포인터에 대해서 행복 할 것이다. 웹 사이트에서 암시되는 일종의 워크 플로가 있지만 실제 문서는 찾을 수 없습니다.

편집 : 나는 내 실제 목표를 명확히하고 싶습니다

: 잘 그레인 OHLC 데이터를 가지고 (시간당 예를 들면) 시간이 기간에 집계됩니다

합니다. 그래서 매 시간마다 촛불 막대기 차트에 촛불 막대가 하나씩 나타납니다.

이제 특정 패턴을 찾는 이러한 데이터 포인트를 살펴 보겠습니다 (예 : 속성 x가있는 양초 막대가 두 개 이상 동일하고 속성 y가있는 경우).

+0

apply.daily'와 가족이 사용하기위한 것입니다 방법 '의 아이디어를 얻을이 시도 :'예 (apply.daily)' – GSee

답변

1

apply.daily은 일중 데이터에 사용하기위한 것입니다. 그것은 하루에 데이터를 분할하고 매일 기능을 적용합니다. 일일 데이터가 있으므로 하루에 한 행의 데이터 만 있습니다.

지금까지 살펴본 내용의 경우 apply.daily을 사용할 필요가 없습니다. 나는 아마 dat에 "doji"라는 또 다른 컬럼을 추가하고 사용자가 원하는 조건이 다른 만족, 또는 제로 1의 값을 줄 것이다,하지만

data(sample_matrix) 
dat <- as.xts(sample_matrix) 

# Create an object with the same index as dat, and fill with "non-doji" 
doji <- xts(rep("non-doji", nrow(dat)), index(dat)) 
# now, anywhere your condition is true, replace "non-doji" with "doji" 
# This takes advantage of the vectorized nature of R 
doji[abs(Op(dat) - Cl(dat)) < (Op(dat) * 0.0005)] <- "doji" 
tail(doji) 
#   [,1]  
#2007-06-25 "non-doji" 
#2007-06-26 "non-doji" 
#2007-06-27 "doji"  
#2007-06-28 "non-doji" 
#2007-06-29 "non-doji" 
#2007-06-30 "non-doji" 

. (모든 데이터와 xts 객체는 같은 유형이어야 함).

dat$doji <- 0 # create a column called "doji" and fill it with zeros 
# now set "doji" to 1 anywhere your condition is true 
dat$doji[abs(Op(dat) - Cl(dat)) < (Op(dat) * 0.0005)] <- 1 

R> tail(dat) 
       Open  High  Low Close doji 
2007-06-25 47.20471 47.42772 47.13405 47.42772 0 
2007-06-26 47.44300 47.61611 47.44300 47.61611 0 
2007-06-27 47.62323 47.71673 47.60015 47.62769 1 
2007-06-28 47.67604 47.70460 47.57241 47.60716 0 
2007-06-29 47.63629 47.77563 47.61733 47.66471 0 
2007-06-30 47.67468 47.94127 47.67468 47.76719 0 
+0

나는 실현이 방법 다음에 액세스하는 방법을 표시하지 않습니다 또는 귀하의 양초 기능 내에서 이전 값이지만, 당신이하고 싶은 것을 말하지 않았으므로 대답을하기가 어렵습니다. 대부분의 대답은 촛불 기능을 포함하지 않을 것입니다. – GSee

+0

마치 두 번째 접근법을'dat $ doji [다음 (Op (dat)) - 다음 (Cl (dat))] <(다음 (Op (dat)) * 0.0005)]와 같이 사용할 수있는 것처럼 보입니다. = 1 '로 설정합니다. 나는 아직도 일반적으로 내 문제에 접근하는 방법에 꽤 길을 잃었다. – styx

+0

@styx, 당신이 구체적인 예를 든다면 누군가가 당신에게 그것을 보여줄 수있을 것이라고 확신합니다. 그렇지 않으면 누군가가 이미 당신을 위해 일한 것 같습니다. 이 패키지가 유용한 지 알아보십시오. https://r-forge.r-project.org/R/?group_id=1317 – GSee