USDT合约API User Data Stream 接口推送规则更新

 交易常见问题    |      2020-10-20

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"
}
}