2014-02-19 86 views
2

隨着時間的推移,我正在對訂單的開發進行建模。我在XTS初始訂單薄的形狀,然後在其後的深度更新也在XTS:通過xts進行遞歸循環

初始手持訂單形狀如下所示(所有條目具有相同的時間):

      BID.price  size 
2014-02-11 23:59:42.494426 508.1000  10.0000000 
2014-02-11 23:59:42.494426 509.1200   8.0000000 
2014-02-11 23:59:42.494426 509.1000  10.0000000 

和隨後的深度udpates如下所示:

      BID. price  size 
2014-02-12 04:57:51.191514 508.1000  -10.00000000 
2014-02-12 04:57:51.640302 514.0000   10.00000000 

我需要什麼的是:

1)在更新的每一行,比較價格與訂單量:

1A)如果更新的價格水平是在手持訂單已經,相應地調整大小,因此上面的例子將如下所示:

      BID.price  size 
2014-02-12 04:57:51.191514 509.1200   8.0000000 
2014-02-12 04:57:51.291514 509.1000  10.0000000 

(價格水平508.10000被刪除,和時間被更新)

1B)如果深度更新不是訂單量尚未與給定的尺寸增加新的獎金水平,所以的例子將是這樣的:5

      BID.price  size 
2014-02-12 04:57:51.640302 509.1200   8.0000000 
2014-02-12 04:57:51.640302 509.1000   10.0000000 
2014-02-12 04:57:51.640302 514.0000   10.00000000 

(新的價格水平加入14並調整時間)。

是否有任何方便和快速的方法如何做這樣的事情避免for循環深度更新xts?

謝謝!

+0

1-我不認爲你可以在這裏避免for循環。無論如何,嘗試添加您嘗試過的內容,並將數據置於可讀格式(現在很難使用)。 – agstudy

+0

@agstudy:好的,並且要澄清一下,可讀格式是什麼意思?粘貼的數據直接來自R. –

+0

你應該使用'dput(head(your_data)',並且你真的有一個xts對象嗎?我的意思是你需要一個時間序列在這裏,看你只需要最後一天,也許一個簡單的data.frame(bid,size)就足夠了 – agstudy

回答

2

我認爲這裏不需要使用xts對象,因爲索引對於所有的觀察結果都是一樣的,這裏的正確ID是出價變量。所以,我解釋一下使用1簡單data.frame我的解決方案如上圖所示:

DT     ## the day before 
    day bid size 
1 1 508.10 10 
2 1 509.12 8 
3 1 509.10 10 
DT1    ## the current or last day 
    day bid size 
1 2 508.1 -10 
2 2 514.0 10 

現在使用merge我們擁有近了解決方案:

dtm 
    bid day.x size.x day.y size.y 
1 508.10  1  10  2 -10 
2 509.10  1  10 NA  NA 
3 509.12  1  8 NA  NA 
4 514.00 NA  NA  2  10 

現在,我們應該只是調整大小和空刪除投標位置。我在這裏插入一箇中間%+%函數來處理缺失值。

## compute size 
"%+%" <- function(x,y) 
    ifelse(is.na(x), 
      ifelse(is.na(y),NA,y), 
      ifelse(is.na(y),x,NA)) 
## remove numm poistion(size==0) 
subset(transform(dtm,size=size.x%+%size.y,day=max(day.y,na.rm=T)), 
     size !=0,select=c(day,bid,size)) 

day bid size 
2 2 509.10 10 
3 2 509.12 8 
4 2 514.00 10 

我認爲你可以使用data.table到這裏更succicent和語法糖溶液。

+0

謝謝你的建議!我會嘗試並讓你知道。我仍然需要將結果作爲xts,但我想我可以在最後完成。 –

+0

@SteefGregor技術上是的,你可以存儲你的所有快照的時間序列。 – agstudy

+0

您的解決方案運行良好,謝謝!正如你在上面評論中所建議的那樣,我不能使用單線表示,因爲矢量的長度正在不斷變化。 –