2013-08-30 59 views
2

我在EBS工作,外匯市場限價訂單(LOB):這裏是LOB在100毫秒的時間片的例子:彙總海量數據,如何用R處理?

datetime|side(0=Bid,1=Ask)| distance(1:best price, 2: 2nd best, etc.)| price 
2008/01/28,09:11:28.000,0,1,1.6066 
2008/01/28,09:11:28.000,0,2,1.6065 
2008/01/28,09:11:28.000,0,3,1.6064 
2008/01/28,09:11:28.000,0,4,1.6063 
2008/01/28,09:11:28.000,0,5,1.6062 

2008/01/28,09:11:28.000,1,1,1.6067 
2008/01/28,09:11:28.000,1,2,1.6068 
2008/01/28,09:11:28.000,1,3,1.6069 
2008/01/28,09:11:28.000,1,4,1.6070 
2008/01/28,09:11:28.000,1,5,1.6071 

2008/01/28,09:11:28.500,0,1,1.6065 (I skip the rest) 

彙總數據,他們有兩個規則(我已經改變它有點簡單):

  1. 如果在出價或詢問方沒有更改LOB,他們不會記錄那一方。查看數據的最後一行,毫秒爲000,現在爲500,這意味着在任何一側的LOB在100,200,300和400毫秒內都沒有變化(但這些信息對於任何計算都很重要)。

  2. 最後一個價格(只有最後一個)從訂單書的給定面刪除。在這種情況下,價格字段中沒有任何內容的單個記錄。當時再也沒有整個LOB的記錄。

    實施例:2008/01/28,09:11:28.800,0,1,

我想要計算minAsk-maxBid(1.6067-1.6066)或加權平均價格(使用所有的尺寸距離作爲權重,我的真實數據中有大小欄)。我想爲我的整個數據做。但是,正如你所看到的數據已經被總結,這不是常規。我寫了一段代碼來生成整個數據(不僅僅是摘要)。這對於小數據集很好,但是對於大數據集我正在創建一個巨大的文件。我想知道你是否有任何提示如何處理數據?如何在效率高的情況下填補空白。

+2

我建議你過濾並將你的數據分成兩個data.frames:一個用於最佳出價,一個用於最佳詢問。然後,對於這兩個data.frames中的每一個,使用'findInterval'來計算相應的'ask'或'bid'的列。然後你就會知道如何達到最低限度。 – flodel

+0

@ flodel-謝謝,它可能在這裏工作,但有更復雜的計算,我需要所有的距離,而不僅僅是最好的出價或要求。簡單的例子,如果我想計算加權價格,那麼我需要所有的距離,我不能過濾它。我編輯了我的問題。 – mitra

+0

對於給定的時間戳和邊,你總是有五個價格?請定義加權平均價格。它是否在給定的時間戳中使用全部十個價格,並且可能將尺寸視爲重量? – flodel

回答

3

你沒有給出一個很好的重現性的例子,所以這將是僞/未經測試的代碼。仔細閱讀文檔並根據需要進行調整。

我建議你先過濾器和您的數據分成兩個data.frames:

best.bid <- subset(data, side == 0 & distance == 1) 
best.ask <- subset(data, side == 1 & distance == 1) 

然後,對於這兩data.frames的,使用findInterval來計算相應的最佳賣出或最佳出價:

best.bid$ask <- best.ask$price[findInterval(best.bid$time, best.ask$time)] 
best.ask$bid <- best.bid$price[findInterval(best.ask$time, best.bid$time)] 

(這個工作,你可能有,因爲市場的開放日期/時間轉換成線性測量,如時間以秒計)

然後它那HOULD容易:

min.spread <- min(c(best.bid$ask - best.bid$price, 
        best.ask$bid - best.ask$price)) 

我不知道我理解的一天特殊性的結束,但我敢打賭,你可以只計算在市場收盤傳播,並把它添加到最終min通話。


對於加權平均價格,使用相同的想法,但不是兩個best.bidbest.ask data.frames,你應該有兩個weighted.avg.bidweighted.avg.ask data.frames開始。