WSS優化和更新:
注意:幣安即將對USDT合約API的User Data Stream 推送規則進行優化與更新,預計將於2020年11月09日完成優化與更新。
Websocket USER-DATA-STREAM 中的事件`ACCOUNT_UPDATE`推送規則作出了以下更新和優化:
- 當用戶某項資產發生變化時:
- 資產項目"B"中僅會推送本次發生變化的資產及其餘額
- 其他資產不會被推送,即便資產不爲0
- 如果資產變化不涉及持倉變化,持倉項目"P"將僅返回空 []
- 當合約某symbol的持倉或全逐倉配置發生變動時
- "P"中會推送該symbol對應的"BOTH"方向上的持倉詳情
- 如果是多空方向上發生持倉變動, "P"中也會包含該symbol發生持倉變動的對應"LONG"或"SHORT"方向上的持倉詳情
- 該symbol上被初始化過的"LONG"或"SHORT"方向逐倉持倉, 也會被推送
- 其他symbol的所有持倉信息都不會被推送,即使其持倉不爲0
- 簡言之,您僅應該更新從`ACCOUNT_UPDATE`推送獲得的資產或頭寸信息,而其他資產和頭寸信息應與您本地記錄中的值或更新前通過rest接口獲取的數據一致。
在這項優化發佈之後,用戶需要在本地維護一份資產和持倉記錄,並通過結合WS `ACCOUNT_UPDATE` 事件及時更新自己的準確資產和持倉數據。
舉例:
用戶當前擁有資產 USDT: 94.89888561, BNB: 0.01575839;
用戶當前持倉情況爲:BTCUSDT LONG: 0.01, ETHUSDT SHORT: 0.01
場景一:用戶向合約賬戶劃轉 0.01 BNB
ACCOUNT_UPDATE之前的邏輯推送 | ACCOUNT_UPDATE新的邏輯推送 |
{ "e":"ACCOUNT_UPDATE", "T":1603093193280, "E":1603093193284, "a":{ "B":[ { "a":"USDT", "wb":"94.91018561", "cw":"93.70831461" }, { "a":"BNB", "wb":"0.02575839", "cw":"0" } ], "P":[ { "s":"BTCUSDT", "pa":"0", "ep":"0.00000", "cr":"-147.28880096", "up":"0", "mt":"isolated", "iw":"0", "ps":"BOTH" }, { "s":"BTCUSDT", "pa":"0.010", "ep":"11445.71000", "cr":"-23.20024001", "up":"0.17770", "mt":"isolated", "iw":"1.20187100", "ps":"LONG" }, { "s":"BTCUSDT", "pa":"0", "ep":"0.00000", "cr":"-6.04296000", "up":"0", "mt":"isolated", "iw":"0", "ps":"SHORT" }, { "s":"ETHUSDT", "pa":"0", "ep":"0.00000", "cr":"-0.00057000", "up":"0", "mt":"cross", "iw":"0", "ps":"BOTH" }, { "s":"ETHUSDT", "pa":"0", "ep":"0.00000", "cr":"-385.79173997", "up":"0", "mt":"cross", "iw":"0", "ps":"LONG" }, { "s":"ETHUSDT", "pa":"-0.010", "ep":"375.74000", "cr":"-0.19160000", "up":"0.00149", "mt":"cross", "iw":"0", "ps":"SHORT" } ], "m":"DEPOSIT" } } | { "e":"ACCOUNT_UPDATE", "T":1603093193280, "E":1603093193284, "a":{ "B":[ // USDT資產沒有發生變化不會推出 { "a":"BNB", // BNB作爲因充值發生變化的資產被推出 "wb":"0.02575839", "cw":"0" } ], "P":[], // 充值沒有導致任何持倉變化,沒有合約持倉會被推出 "m":"DEPOSIT" } } |
場景二:用戶將其ETHUSDT SHORT 方向上的空頭合約平倉
ACCOUNT_UPDATE之前的邏輯推送 | ACCOUNT_UPDATE新的邏輯推送 |
{ "e":"ACCOUNT_UPDATE", "T":1603093588546, "E":1603093588553, "a":{ "B":[ { "a":"USDT", "wb":"94.91428561", "cw":"93.71241461" }, { "a":"BNB", "wb":"0.02571331", "cw":"0" } ], "P":[ { "s":"BTCUSDT", "pa":"0", "ep":"0.00000", "cr":"-147.28880096", "up":"0", "mt":"isolated", "iw":"0", "ps":"BOTH" }, { "s":"BTCUSDT", "pa":"0.010", "ep":"11445.71000", "cr":"-23.20024001", "up":"0.13910", "mt":"isolated", "iw":"1.20187100", "ps":"LONG" }, { "s":"BTCUSDT", "pa":"0", "ep":"0.00000", "cr":"-6.04296000", "up":"0", "mt":"isolated", "iw":"0", "ps":"SHORT" }, { "s":"ETHUSDT", "pa":"0", "ep":"0.00000", "cr":"-0.00057000", "up":"0", "mt":"cross", "iw":"0", "ps":"BOTH" }, { "s":"ETHUSDT", "pa":"0", "ep":"0.00000", "cr":"-385.79173997", "up":"0", "mt":"cross", "iw":"0", "ps":"LONG" }, { "s":"ETHUSDT", "pa":"0", "ep":"0.00000", "cr":"-0.18750000", "up":"0", "mt":"cross", "iw":"0", "ps":"SHORT" } ], "m":"ORDER" } } | { "e":"ACCOUNT_UPDATE", "T":1603093588546, "E":1603093588553, "a":{ "B":[ { "a":"USDT", // USDT作爲因實現盈虧發生變化的資產被推出 "wb":"94.91428561", "cw":"93.71241461" }, { "a":"BNB", // BNB作爲因抵扣手續費發生變化的資產被推出 "wb":"0.02571331", "cw":"0" } ], "P":[ // 僅推出發生變化的ETHUSDT合約 { "s":"ETHUSDT", "pa":"0", "ep":"0.00000", "cr":"-0.00057000", "up":"0", "mt":"cross", "iw":"0", "ps":"BOTH" // BOTH方向一定會被推送 }, // LONG方向因之前沒有被初始化過不會被推出 { "s":"ETHUSDT", "pa":"0", "ep":"0.00000", "cr":"-0.18750000", "up":"0", "mt":"cross", "iw":"0", "ps":"SHORT" // SHORT方向作爲本次變化的持倉方向會被推送出來 } ], "m":"ORDER" } } |
場景三:用戶將ETHUSDT合約從全倉模式調整爲逐倉模式
ACCOUNT_UPDATE之前的邏輯推送 | ACCOUNT_UPDATE新的邏輯推送 |
{ "e":"ACCOUNT_UPDATE", "T":1603094890011, "E":1603094890017, "a":{ "B":[ { "a":"USDT", "wb":"94.90282656", "cw":"93.71241461" }, { "a":"BNB", "wb":"0.02571331", "cw":"0" } ], "P":[ { "s":"BTCUSDT", "pa":"0", "ep":"0.00000", "cr":"-147.28880096", "up":"0", "mt":"isolated", "iw":"0", "ps":"BOTH" }, { "s":"BTCUSDT", "pa":"0.010", "ep":"11445.71000", "cr":"-23.20024001", "up":"0.03240", "mt":"isolated", "iw":"1.19041195", "ps":"LONG" }, { "s":"BTCUSDT", "pa":"0", "ep":"0.00000", "cr":"-6.04296000", "up":"0", "mt":"isolated", "iw":"0", "ps":"SHORT" }, { "s":"ETHUSDT", "pa":"0", "ep":"0.00000", "cr":"-0.00057000", "up":"0", "mt":"isolated", "iw":"0", "ps":"BOTH" }, { "s":"ETHUSDT", "pa":"0", "ep":"0.00000", "cr":"-385.79173997", "up":"0", "mt":"isolated", "iw":"0", "ps":"LONG" }, { "s":"ETHUSDT", "pa":"0", "ep":"0.00000", "cr":"-0.18750000", "up":"0", "mt":"isolated", "iw":"0", "ps":"SHORT" } ], "m":"MARGIN_TYPE_CHANGE" } } | { "e":"ACCOUNT_UPDATE", "T":1603094890011, "E":1603094890017, "a":{ "B":[ { "a":"USDT", // USDT作爲保證金資產在全逐倉變換時會被推出 "wb":"94.90282656", "cw":"93.71241461" } ], "P":[ // 僅推出發生變化的ETHUSDT合約 { "s":"ETHUSDT", "pa":"0", "ep":"0.00000", "cr":"-0.00057000", "up":"0", "mt":"isolated", "iw":"0", "ps":"BOTH" // BOTH方向一定會被推送 }, // LONG方向因之前沒有被初始化過不會被推出 { "s":"ETHUSDT", "pa":"0", "ep":"0.00000", "cr":"-0.18750000", "up":"0", "mt":"isolated", "iw":"0", "ps":"SHORT" // SHORT方向作爲初始化過的position被推送出來 } ], "m":"MARGIN_TYPE_CHANGE" } } |