不规则时间序列中的“滞后”问题

3

我有一个数据框,显示了一只股票的当前买入和卖出价格以及当时我的信号。

time            bid_price   ask_price   signal
10:10:01.000500 50.02       50.05       50.03
10:10:01.000855 50.02       50.03       50.05
10:10:01.000856 50.02       50.03       50.06

在10:10:01.000856时,虽然我有50.06的信号,但我无法使用它。我只能使用50微秒之前的信号。

因此,我需要这个输出数据框:

在10:10:01.000856时,50微秒之前的时间是10:01:01.000806,所以可用的信号为50.03。

time            bid_price   ask_price   signal  signal_50microseconds_ago
10:10:01.000500 50.02       50.05       50.03   NA
10:10:01.000855 50.02       50.04       50.05   50.03
10:10:01.000856 50.02       50.04       50.06   50.03

有没有一种R/Python解决方案可以生成输出的data.frame呢? 例如,我们首先将data.frame加载到xts对象中,然后可能会得到以下结果:
xts_obj$signal_50microseconds_ago <- get_time_lag_wish_this_function_exists(xts_obj$signal,lag=0.000050) 

注意:我认为我不能简单地使用xts.lag 1,因为这将导致50.05下移,而不是50.03。
time            bid_price   ask_price   signal  signal_from_lag1
10:10:01.000500 50.02       50.05       50.03   NA
10:10:01.000855 50.02       50.04       50.05   50.03
10:10:01.000856 50.02       50.04       50.06   50.05
1个回答

1
这是我会采用的方法,将值与最近的前一个观察值对齐。它仅使用xts合并函数和na.locf()来填充按时间合并的值:
d <- read.table(stringsAsFactors=F, header=T, text="
time            bid_price   ask_price   signal
10:10:01.000500 50.02       50.05       50.03
10:10:01.000855 50.02       50.03       50.05
10:10:01.000856 50.02       50.03       50.06
")

t <- as.POSIXct(paste0("2015-05-28 ", d$time))
#format(t, "%Y-%m-%d %H:%M:%OS9")

library(xts)
d_xts <- xts(d[,-1], order.by=t)

##  Lag the signal by 50 microseconds:
signal_lag <- xts(d[,"signal"], order.by=t+0.000050)

merge_xts <- merge(d_xts, signal_lag)

##  Carry last lagged value forward:
merge_xts$signal_lag <- na.locf(merge_xts$signal_lag)

##  Finally subset back to only original rows:
merge_xts <- merge_xts[ !is.na(merge_xts$signal) ]

得到的merge_xts对象:

> merge_xts
                    bid_price ask_price
2015-05-28 10:10:01     50.02     50.05
2015-05-28 10:10:01     50.02     50.03
2015-05-28 10:10:01     50.02     50.03
                    signal signal_lag
2015-05-28 10:10:01  50.03         NA
2015-05-28 10:10:01  50.05      50.03
2015-05-28 10:10:01  50.06      50.03

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接