2013-04-21 2 views
2

저는 R에서 선물 계약을하고 있습니다. 선물 시장은 동부 표준시로 오후 6시에 열리고 동부 표준시로 오후 5시에 끝납니다. 시간당 데이터를 다루고 있습니다. 내가 quantmod를 사용할 때 Open은 오전 12:00에 있고 Close는 오후 11:59에 있다고 가정합니다. 열기 및 닫기 시간을 변경하는 방법이 있습니까? 아니면 문제를 해결할 더 좋은 방법이 있습니까?quantmod로 마감 시간 및 마감 시간 설정하기

+1

정확히 무엇을 하려는지 알려주십시오. 더 높은 빈도 즉 시간별 데이터에서 매일 OHLC 정보를 계산하고 있습니까? –

+0

나는 sd, mean, trends를 계산하고 있으며 MACD 및 BBands와 같은 내장 기능 중 일부를 플로팅하고 있습니다. 종종 시간별 눈금은 너무 세분하여 일별 또는 월별 규모로 이동할 필요가 있습니다 (to.daily, to.monthly). 그때 열기 및 닫기 시간이 동기화되지 않습니다. – user1223862

답변

1

여기에 일반적인 트릭은 자정이 하루 끝과 일치하도록 시간대를 설정하는 것입니다. 동부 표준시의 문제는 서머 타임/겨울 전환이지만, 시장이 24 시간이 아닌 23 시간이므로 FX 시장과 달리 거래 할 필요가 없습니다.

한 번에 하루 동안 데이터를 처리하려는 경우 R에서 아래 예제 코드를 사용합니다. rollapply.right의 수정입니다. 내 스크립트 및 data은 UTC 시간대입니다. (data은 틱 데이터 또는 시간별 데이터 또는 그 사이의 모든 데이터 일 수 있음).

기본적인 아이디어는 데이터 복사본을 다른 시간대로 이동하고 endpoints을 실행 한 다음 원래 데이터에 endpoints의 결과를 사용하는 것입니다. '7 * 3600'조정은 오후 5시에서 자정까지 이동합니다.

rollapply_chunks.FX.xts=function(data,width,FUN,...,on="days",k=1){ 
data <- try.xts(data) 

x2 <- data 
index(x2) <- index(x2)+(7*3600) 
indexTZ(x2) <- 'America/New_York' 

ep <- endpoints(x2,on=on,k=k) #The end point of each calendar day (when on="days"). 
    #Each entry points to the final bar of the day. ep[1]==0. 

if(length(ep)<2){ 
    stop("Cannot divide data up") 
}else if(length(ep)==2){ #Can only fit one chunk in. 
    sp <- 1;ep <- ep[-1] 
}else{ 
    sp <- ep[1:(length(ep)-width)]+1 
    ep <- ep[(width+1):length(ep)] 
} 

xx <- lapply(1:length(ep), function(ix) FUN(.subset_xts(data,sp[ix]:ep[ix]),...)) 
xx <- do.call(rbind,xx) #Join them up as one big matrix/data.frame. 

tt <- index(data)[ep] #Implicit align="right". Use sp for align="left" 
res <- xts(xx, tt) 
return (res) 
}