2017-11-11 2 views
1

Ich habe zwei xts Datensätze zu finden, das Buch bestellen und die Marktdaten, und sie sind ähnlich wie die folgenden:Daten unmittelbar vor einer bestimmten Zeit in xts Objekte in R

Auftragsbuch:

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 

Marktdaten:

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 

nun für jede Beobachtung im Orderbuch würde Ich mag die Marktdaten Beobachtung finden stictly vor dem Zeitpunkt der Bestellung in der o rder Buch. Wenn ich zum Beispiel aus den beiden obigen Datensätzen auf die Beobachtung 3 im Auftragsbuch schaue, dann befinden sich die Marktdaten genau davor im Index 2 (d. H. Zum Zeitpunkt 10:00:05) der Marktdaten.

Jetzt gibt es nur zwei Bedingungen, denen ich folgen muss - erstens, wie ich bereits erwähnt habe, muss die Marktdatenbeobachtung streng vor der Auftragsbuchbeobachtung sein. Die zweite Bedingung ist, dass beide Beobachtungen am selben Tag stattgefunden haben müssen. Ich habe tatsächlich zwei verschiedene Funktionen geschrieben, um diese Aufgabe auszuführen, aber beide ergeben unterschiedliche Ergebnisse, also bin ich mir ziemlich sicher, dass ich falsch liege. Wenn mir jemand damit helfen könnte, dann würde ich es sehr schätzen! Danke im Voraus.

Antwort

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 
Verwandte Themen