2017-10-12 1 views
1

나는 일부 금융 틱 데이터, head(df_xts) 있습니다조건부 가격 지점을 사용하여 불규칙한 일중 재무 데이터를 R로 서브 세트 화하려면 어떻게해야합니까?

나는 가격이 개관 범위 위의 일정한 거리를 이동 한 후이 데이터를보고 싶지
     price volume 
2016-06-01 09:30:00 1073  1 
2016-06-01 09:30:00 1073  1 
2016-06-01 09:30:00 1073  1 
2016-06-01 09:30:00 1073  1 
2016-06-01 09:30:00 1073  1 
2016-06-01 09:30:00 1073  5 

. I는 처음 15 분까지 개방 범위를 정의

df_open <- df_xts["T09:30/T09:44"] 

(df_main 아래 참조 하루의 나머지 시간 프레임이다.)

다음 최대 가격, 또는 "개방 발견

orh <- apply.daily(df_open$price, max) 
> orh 
         price 
2016-06-01 09:44:55 1083.75 
2016-06-02 09:44:59 1119.25 
2016-06-03 09:44:59 1169.00 
2016-06-06 09:44:53 1155.00 

를 이는 높은 개구 범위 이상의 사전 정의 breakout 거리 가격 발견 : 매일 "고역

01,235,759,686,

그때 나에게 하루를 기준으로 "브레이크 아웃"의 인덱스 값, 제공 가격이 브레이크 아웃 지점까지 이동 한 매일의 첫 번째 관찰, 발견 :

orh_bo_index <- apply.daily(df_main, FUN = function(X) first(which(X %in% orh_bo))) 
> orh_bo_index 
        [,1] 
2016-06-01 14:14:59 2074 
2016-06-02 14:14:59 10693 
2016-06-03 14:14:59 2351 
2016-06-06 14:14:59 1224 

orh_bo_matrix <- coredata(orh_bo_index) 

나는이 결합을

ep_daily <- endpoints(df_main, on = "days") 
daily_last_index <- ep_daily[-1] 
daily_last_matrix <- t(t(daily_last_index)) 
df_bo_indexes <- bind_cols(data.frame(orh_bo_matrix), data.frame(daily_last_matrix)) 

> df_bo_indexes 
    orh_bo_matrix daily_last_matrix 
1   2074    52155 
2   10693   126623 
3   2351   181408 
4   1224   221002 

가 어떻게 위의 인덱스를 사용하여 데이터를 부분 집합 않습니다 : 데이터 프레임, df_bo_indexes을 만들 수있는 일상 엔드 포인트의 인덱스와 브레이크 아웃 인덱스? 이것은 내가 지금까지 시도한 것입니다 :

df_bo_day1 <- df_main[df_bo_indexes[1,1]:df_bo_indexes[1,2]] 
i <- 2 
for(i in 2:ndays(df_main)) { 
df_bo_all <- df_main[(df_bo_indexes[i-1,2]+df_bo_indexes[i,1]):df_bo_indexes[i,2]] 
} 

split a time series by another irregular time series 유용했지만, 나는 하루 동안 데이터에 이것을 적용하는 방법을 모르겠어요.

내 전체 코드와 데이터 세트는 https://github.com/blottb7/tick-data에서 찾을 수 있습니다. 나는 시계열 입력에 관심이있는 누구에게나 관심이있다.

답변

1

I split(), lapply(,cummax), do.call(rbind,), merge() 개방 범위. 전체 데이터 프레임에 대해 동일하게 적용됩니다. 전체 범위의 여는 범위를 병합합니다. 그런 다음 breakout <- ifelse(cummax - breakout > opening_range_cummax, TRUE, FALSE), then subset by breakout == 1을 사용하십시오.

관련 문제