WebSocket API v1 - 如何維護有效的訂單簿

上次更新時間: 2025年4月1日

WebSocket API v1 訂單簿資訊源提供所有市場數據,以維護 Kraken 訂單簿的本地副本。

例如,XBT/USD 的訂單簿資訊源可用於檢索和維護我們的 Bitcoin/US Dollar 貨幣對的訂單簿,其顯示方式與我們的 交易平台上顯示的訂單簿完全相同。

訂單簿資訊源提供當前訂單簿的初始快照,然後即時串流傳輸訂單簿的更新,因此透過訂單簿資訊源維護的訂單簿將始終保持最新狀態。

有關訂單簿資訊源的 JSON 格式的完整詳細資訊,請參閱我們的 WebSocket API v1 文件

訂單簿快照

訂閱訂單簿資訊源後,第一個市場數據訊息將是當前訂單簿的快照。

訂單簿快照包含整個訂單簿,直至請求(已訂閱)的深度,例如以下 XBT/USD 訂單簿深度為 10 的範例:

[0,{"as":[["5290.80000","1.00000000","1556724667.748660"],["5290.90000","4.49956524","1556724664.331028"],["5291.70000","1.00000000","1556724653.480504"],["5292.00000","0.95388940","1556724619.682690"],["5292.20000","1.51300000","1556724494.497326"],["5293.10000","0.69800000","1556724667.635414"],["5293.20000","2.00000000","1556724656.022756"],["5293.90000","2.83200000","1556724668.057687"],["5294.10000","0.99600000","1556724666.340462"],["5294.50000","5.00000000","1556724661.980996"]],"bs":[["5290.10000","1.43195600","1556724666.594179"],["5289.80000","2.00000000","1556724663.082526"],["5289.40000","0.49400000","1556724665.274827"],["5289.20000","0.89533312","1556724640.520134"],["5287.40000","3.23600000","1556724660.997516"],["5287.30000","3.33000000","1556724659.999108"],["5287.00000","10.20000000","1556724635.850932"],["5286.00000","3.86378703","1556724662.757360"],["5285.70000","6.40000000","1556724488.785281"],["5283.90000","0.50000000","1556723616.006805"]]},"book-10","XBT/USD"]

快照包含當前最佳買入/賣出價格及其可用數量,以及價格水平最近更新的日期/時間(以秒為單位,精確到小數點後 6 位的 UNIX 時間戳記)。

價格水平變更

在初始快照之後,訂單簿的價格水平會透過更新、插入和刪除訊息即時修改。

更新訊息

更新訊息透過提供新的數量和時間戳記來更新訂單簿中已存在的價格水平,例如以下針對訂單簿賣方 5293.1 價格水平的更新:

[0,{"a":[["5293.10000","0.39800000","1556724673.104421"]], "c":"408163318"},"book-10","XBT/USD"]

雖然價格保持不變 (5293.1),但該價格的可用數量從 0.69800000(由初始快照提供)變更為 0.39800000,並且價格水平的新時間戳記反映了變更發生的日期/時間。

更新訊息僅變更訂單簿中已存在的價格水平;它們不會向訂單簿新增或從訂單簿中移除價格水平。

插入訊息

插入訊息會向訂單簿新增一個新的價格水平,例如以下針對訂單簿賣方 5294.4 價格水平的插入:

[0,{"a":[["5294.40000","0.99600000","1556724672.663220"]], "c":"393966308"},"book-10","XBT/USD"]

每個插入訊息都包含新的價格水平 (5294.4)、該價格的可用數量 (0.99600000) 以及價格水平最近更新的時間戳記。

插入訊息透過建立新的價格水平、將所有後續價格水平(較低的買入價格或較高的賣出價格)向外移動,並將最外層的價格水平推出訂單簿範圍之外來變更訂單簿中的價格水平。

例如,根據上述初始快照,插入訊息:

[0,{"a":[["5294.40000","0.99600000","1556724672.663220"]], "c":"393966308"},"book-10","XBT/USD"]

會將價格水平 5294.4 新增到訂單簿的第 10 層(最高的賣出價格),並將價格水平 5294.5 移出訂單簿的範圍(透過將 5294.5 有效地移至第 11 層)。

刪除訊息

刪除訊息會從訂單簿中移除一個價格水平,例如以下針對訂單簿賣方 5294.1 價格水平的部分刪除訊息:

[0,{"a":[["5294.10000","0.00000000","1556724670.010241"]] ... },"book-10","XBT/USD"]

刪除訊息包含不再存在的價格水平,始終指定可用數量為 0.0,並包含一個時間戳記,指示價格水平從訂單簿中移除的日期/時間。

刪除訊息透過移除受影響的價格水平(從整個訂單簿中,而不僅僅是從已訂閱的深度)、將所有後續價格水平(較低的買入價格或較高的賣出價格)向內移動,並將新的價格水平拉入訂單簿範圍內來變更訂單簿中的價格水平。

請注意,刪除操作之後總是立即跟隨一個插入操作,該操作將新的價格水平帶入最外層的範圍(例如,對於已訂閱深度為 10 的情況,為第 10 層)。

例如,根據上述初始快照,刪除/插入訊息:

[0,{"a":[["5294.10000","0.00000000","1556724670.010241"],["5294.70000","3.34000000","1556724653.951982","r"]], "c":"3679121060"},"book-10","XBT/USD"]

這將從訂單簿的第 9 層刪除價格水平 5294.1,將價格水平 5294.5 從第 10 層移至第 9 層,並立即將新的價格水平 5294.7 新增到訂單簿的第 10 層(最外層和深度為 10 的最高賣出價格)。

其他資源

有關訂單簿邏輯的更多詳細資訊,請參閱訂單簿範例記錄以及實作非同步(多執行緒)同步(單執行緒)命令列用戶端的範例程式碼。

本文中顯示的小數點和千位分隔符號可能與我們交易平台上顯示的格式不同。請查閱我們關於如何使用點和逗號的文章以獲取更多資訊。

需要更多幫助?