[英]How do I subset irregular, intraday financial data in R using conditional price points?
我有一些財務head(df_xts)
數據, head(df_xts)
:
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
我想在價格在其開盤區間上方移動一定距離后查看此數據。 我將開盤區間定義為前 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
距離處找到價格:
orh_bo <- orh + breakout
然后,我找到價格上漲到該突破點的每一天的第一個觀察值,這為我提供了“突破”相對於當天的指數值:
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)
我將此突破索引與每日端點索引相結合以創建數據框df_bo_indexes
:
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_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]]
}
用另一個不規則時間序列拆分時間序列很有用,但我不確定如何將其應用於日內數據。
我的完整代碼和數據集可以在https://github.com/blottb7/tick-data找到。 我對任何從事時間序列輸入工作的人感興趣。
我split(), lapply(,cummax), do.call(rbind,), merge()
用於打開范圍。 對整個數據框做了同樣的事情。 將開倉范圍與整個范圍合並。 然后使用breakout <- ifelse(cummax - breakout > opening_range_cummax, TRUE, FALSE), then subset by breakout == 1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.