ПОТОК ДАННЫХ В WEB SOCKET
Важное примечание: с целью обеспечения качественного сервиса для наших пользователей Binance Futures проведет обновление и оптимизацию потока пользовательских данных в Websocket для API фьючерсного контракта USDT-margin. Предполагаемая дата завершения обновления: 09.11.2020.
Обращаем ваше внимание на то, что для события ACCOUNT_UPDATE в USER-DATA-STREAM появились новые удобные оптимизированные правила push-уведомлений.
1. При изменении актива пользователя:
2. При изменении позиции символа или типа маржи символа:
3. Полную информацию об активах и позициях необходимо получать через соответствующие конечные точки REST (GET /fapi/v2/account и GET /fapi/v2/positionRisk), а информацию об измененном активе или позиции для локально кешированных данных актива/позиции можно обновить через событие ACCOUNT_UPDATE в Websocket USER-DATA-STREAM.
Ниже приводится несколько различных примеров возможных сценариев, которые помогут лучше понять изменения после обновления:
Например, на фьючерсном кошельке пользователя находятся 94,89888561 USDT и 0,01575839 BNB, а также открыты позиция LONG на 0,01 BTCUSDT и позиция SHORT на -0,01 ETHUSDT. Предположим, пользователь:
Перед обновлением | После обновления |
{ "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 is not pushed as there is not balance change { "a":"BNB", // BNB is pushed as the balance is updated. "wb":"0.02575839", "cw":"0" } ], «P»:[], // данные о позиции не передаются, так как в позиции нет изменений. "m":"DEPOSIT" } } |
2. закрывает короткую (SHORT) позицию ETHUSDT
Перед обновлением | После обновления |
{ "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":[ { «а»:«USDT», // USDT передается, потому что в нем появляются изменения из-за реализованного PNL. "wb":"94.91428561", "cw":"93.71241461" }, { «a»: «BNB», // 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" } } |
3. изменяет режим ETHUSDT из CROSS в ISOLATED
Перед обновлением | После обновления |
{ "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":[ { «а»:«USDT», // USDT передается, потому что это маржинальный актив. "wb":"94.90282656", "cw":"93.71241461" } ], «P»:[ // только ETHUSDT передается, так как есть изменение режима (CROSS на ISOLATED). { "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 передается по мере инициализации. } ], "m":"MARGIN_TYPE_CHANGE" } } |