2017-11-11 7 views
1

でXTSオブジェクト内の特定の時間前に私は2つのxtsデータセット、オーダーブックや市場データを持っている、と彼らは次のように似ています:すぐにデータを見つけるR

注文帳:

Time     |  Price 
------------------------------------- 
2017-01-02 10:00:02 |  5.00 
2017-01-02 10:00:05 |  6.00 
2017-01-02 10:00:13 |  5.00 
2017-01-02 10:00:16 |  4.00 
2017-01-02 10:00:24 |  2.00 

市場データ:今

Time     |  Ask Price 
--------------------------------------- 
2017-01-02 10:00:01 |  4.00 
2017-01-02 10:00:02 |  3.00 
2017-01-02 10:00:27 |  1.00 
2017-01-02 10:00:56 |  2.00 
2017-01-02 10:00:57 |  1.00 

、私はOでの注文時前にstictly市場データの観察を見つけたいオーダーブック内の各観察のためrder本。例えば、上の2つのデータセットから、注文簿の観測3を見ると、厳密にこれ以前の市場データは市場データのインデックス2(すなわち時刻10:00:05)にある。

私が従わなければならない条件は2つあります。第1に、前述したように、市場データの観察は厳密に注文書の観察の前でなければなりません。第2の条件は、両方の観測が同じ日に発生していなければならないということである。私は実際にこのタスクを試して実行するために2つの異なる関数を書いたが、どちらも異なる結果を与えるので、私は間違っていると確信している。誰かがこれで私を少し助けてくれたら、本当に感謝しています!前もって感謝します。

答えて

0
require(data.table) 
require(lubridate) 
################ 
# Recreate data 
################# 
s<- 
    "2017-01-02 10:00:02 5.00 
    2017-01-02 10:00:05 6.00 
    2017-01-02 10:00:13 5.00 
    2017-02-02 10:00:16 4.00 
    2017-02-02 10:00:24 2.00" 
# note I changed the date in last two lines to answer your question 
s1 <- 
    "2017-01-02 10:00:01 4.00 
    2017-01-02 10:00:02 3.00 
    2017-01-02 10:00:27 1.00 
    2017-01-02 10:00:56 2.00 
    2017-01-02 10:00:57 1.00" 
# I'm reading from delimiter, day and minutes come in two separates columns 
O <- read.delim(textConnection(s),header=FALSE,sep=" ",strip.white=TRUE) 
M <- read.delim(textConnection(s1),header=FALSE,sep=" ",strip.white=TRUE) 
setDT(O);setDT(M) 
setnames(O,c("time","m","price"));setnames(M,c("time","m","ask_price")) 
O[,time:=paste(time,m)];M[,time:=paste(time,m)] # paste hours and minutes 
O[,m:=NULL];M[,m:=NULL] # remove minutes 
O[,time:= lubridate::ymd_hms(time)];M[,time:= lubridate::ymd_hms(time)]# extract time 

################ 
# Analysis 
################# 
setkey(O,time); setkey(M,time) 
# this will identify all orders (O) after Market sessions (M) 
M[O, roll = T] 
#time ask_price price 
#1: 2017-01-02 10:00:02   3  5 
#2: 2017-01-02 10:00:05   3  6 
#3: 2017-01-02 10:00:13   3  5 
#4: 2017-02-02 10:00:16   1  4 
#5: 2017-02-02 10:00:24   1  2 

# this will identify all orders (O) after market session (M) 
# within a time span of 24 hours 
twenty_four_hours<-60*60*24 
res<-M[O, roll = twenty_four_hours] 
#time ask_price price 
#1: 2017-01-02 10:00:02   3  5 
#2: 2017-01-02 10:00:05   3  6 
#3: 2017-01-02 10:00:13   3  5 
#4: 2017-02-02 10:00:16  NA  4 
#5: 2017-02-02 10:00:24  NA  2 
res[!is.na(ask_price),] # now we remove lines without values 
# time ask_price price 
#1: 2017-01-02 10:00:02   3  5 
#2: 2017-01-02 10:00:05   3  6 
#3: 2017-01-02 10:00:13   3  5 
関連する問題