數據
通用限價訂單簿:它應該能夠回答哪些最重要的問題?
假設一個
LimitOrderBook
代表交易系統中限價訂單簿的類。為了能夠表示限價訂單簿,數據處理程序讀取一個提要,該提要使用以下三種方法將數據添加到限價訂單簿的表示中:
public OrderReference add(Order order)
public boolean cancel(OrderReference orderReference)
public void execute(...)
這三種方法改變了限價訂單簿的狀態。這三個或多或少是給定的,它們都是實現 LOB 表示所必需的。
除了這三個必需的“狀態更改”方法之外,典型的 LOB 表示還提供了許多交易模型可以呼叫的查詢方法。這種方法的一個明顯例子是
getBestBid(...)
。一般 LOB 應該提供哪些最重要的查詢方法?或者更具體地說,在您建構的 LOB 中,您包含了哪些查詢方法?為什麼?
沒有必要使事情複雜化:
... d = getBdepth(); d = getOdepth(); // for the calls below pos == 0 means the best bid/offer p = getB(int pos); // bid price at pos p = getO(int pos); // offer price at pos q = getBq(int pos); // bid quantity at pos q = getOq(int pos);// offer quantity at pos
請注意,如果您的 LimitOrderBook 實例在後台更新,則上述 API 不是最佳選擇。但只要您在執行策略計算的同一執行緒中更新其狀態,您就安全了。在非同步更新的情況下,事情會變得有點複雜——你需要兩個類。第一個將具有您描述的所有方法以及一個用於獲取目前時間訂單簿的靜態快照的方法:
... public LimitOrderBookSnapshot getSnapshot();
LimitOrderBookSnapshot 實例是通過同步複製位於您的 LimitOrderBook 實例基礎的數據來創建的。LimitOrderBookSnapshot API 由我在本文開頭描述的六個呼叫組成。
另請注意,在實際解決方案中,您需要記住獲取快照的時間 - 如果您不這樣做,您最終可能會使用在獲取訂單簿數據時不可用的報價。