Binance ошибка сети пожалуйста переподключение

Некоторые пользователи время от времени жалуются на то, что не могут зайти на криптобиржу Binance. Обычно это не такая уж проблема и носит временный технический характер на стороне клиента и решается за пару действий.

Из-за того что новички часто задаются этим вопросом, мы решили посвятить статью решению проблемы входа на сайт Binance если это невозможно сделать.

5 BUSD за регистрацию

Как получить подарок? Пройдите регистрацию, используя реферального id NLXN3LH7, а затем верификацию на бирже Binance и Вам автоматически зачислится бонус 5 BUSD

Получить 5 BUSD

Не могу зайти на Binance. Причины недоступности Binance.

Пять самых частых причины по которым у вас проблемы с логином на гонконгскую биржу криптовалюты:

  • Временные технические работы. Тут от вас ничего не зависит, скорее всего сайт криптобиржи находится на техобслуживании, либо их сайт был взломан и сайт пытаются восстановить. Если это глобальная проблема, то на любом популярном сайте где обсуждают работы Binance можно найти ответ когда работа будет восстановлена. Проверьте каналы в Telegram или форумы по крипте.
  • Неправильный логин и пароль. В этом случае, при неоднократных безуспешных попытках войти через форма входа, вам надо нажать на ссылку «Забыли пароль?» и восстановите свои идентификационные данные на почту. Возможно даже ваш пароль был скомпрометирован и его надо поменять.
  • Проблема с браузером. Самое простое решение: попробуйте зайти с другого браузера. Если это помогло, значит на основном браузере нужно включить JavaScript, почистить куки и кэш в настройках. Такая проблема случается часто.
  • Проблема с DNS-сервером. Для начала, попробуйте зайти на Binance с другого компьютера или смартфона. Если и там сайт недоступен то, поменяйте DNS-адрес на устройстве на гугловские: 8.8.8.8 и 8.8.4.4. Как это сделать подробнее можно почитать написав поиске: «сменить dns-сервер на компьютере».
  • Не приходит SMS на Binance. для некоторых стран все еще встречается такая проблема. Единственное правильное решение здесь будет — использовать двухфакторную аутентификацию от Google. Об этом есть отдельная статья;
  • Не доходят SMS от Binance. Если вы один из тех, кто вместо двухфакторной авторизации пользуется смсками то, скорее всего вы часто сталкиваетесь с проблемой доставки SMS с разных сайтов на смартфон. Это огромный минус использования этого способа для авторизации. Именно поэтому сейчас Binance предлагает сразу же перейти на двухфакторную авторизацию от Google Authenticator.

Ваш аккаунт Binance был заморожен

Если вы проснулись утром и решили как обычно проверить свой баланс на Binance, но увидели перед собой надпись «Your account has been frozen» или «Your account has been locked» то, скорее всего администрация биржи заметила странные действия на вашем аккаунте и решили защитить ваши деньги от кражи. Сильно волноваться нет причин, нужно всего лишь сделать пару действий.

Если с вами произошла такая штука как заморозка аккаунта то, убрать это ограничение вы сможете только через несколько часов. Сразу по истечению некоторого времени, вам нужно активировать заново свой личный кабинет кликнув на кнопку «Reactivate».

Не могу зайти на Binance. Не работает и не открывается биржа

Сразу после этого проверьте свой e-mail на наличие письма с инструкцией для дальнейших действий. Если письмо не пришло то, проверьте папку со спамом.

Не могу зайти на Binance. Не работает и не открывается биржа

Важно знать, что как только письмо было отправлено у вас будет 30 минут чтобы нажать на ссылку в письме для активации аккаунта. Это сделано в целях безопасности.

После того как вы восстановили свой кабинет на Binance, у вас на 48 будет недоступна возможность вывода криптовалюты из системы.

Не могу зайти на Binance. Не работает и не открывается биржа

Дальше будет окно с просьбой ввести последний Ethereum-адрес с которого вы закидывали крипту на сайт биржи. Как найти адрес кошелька с которого пополнялся счет: это может быть ваш личный кошелек, либо адрес какого-то обменника который вы использовали.

Не могу зайти на Binance. Не работает и не открывается биржа

При неудачной попытке ввести адрес пополнения, система начнет спрашивать другие вопросы на которые можете знать ответ только вы. Если вы и на них не смогли ответить то, повторную попытку предоставят через несколько часов.

Возможно вам также придется пройти повторную верификацию с помощью фото паспорта, либо селфи с помощью приложения на iOS, Android.

Итог

Даже если вам не помогли все эти действия, в любой момент можно просто обратиться в техподдержку Binance и вам помогут обязательно. Единственная загвоздка в том, что нужно общаться с ними на иностранном языке.

Вовремя принимайте меры безопасности аккаунта и внимательно следите за своими действиями на сайте, чтобы они не нарушали правила сервиса чтобы избежать блокировок.

Удачного трейдинга!

  • #1

Когда я покупаю P2P криптовалюту на бинансе, иногда бывает ошибка в чате с контрагентом, пишет ошибка сети, переподключение, но так и не подключается, из-за этого с контрагентом нельзя переписоваться. Я хотел бы узнать это только у меня так?

  • #2

а верефикацию вы прошли ? как минимум до «Промежуточная»

  • #4

Когда я покупаю P2P криптовалюту на бинансе, иногда бывает ошибка в чате с контрагентом, пишет ошибка сети, переподключение, но так и не подключается, из-за этого с контрагентом нельзя переписоваться. Я хотел бы узнать это только у меня так?

F5

  • #5

а верефикацию вы прошли ? как минимум до «Промежуточная»

У меня подтверждённая

  • #6

Я хотел бы узнать это только у меня так?

Обратитесь к сити-менеджеру ;) :D :D :D

  • #7

Спасибо попробую, как я сам не догадался, думаю должно помочь

  • #8

именно «Промежуточная» ?
а не «Базовая»

  • #9

Хочется взять и… подарить ТСу и первонаху:
8083572.jpg

  • #10

Да я тупой, я когда тороплюсь делаю ошибки.

  • #11

именно «Промежуточная» ?
а не «Базовая»

У меня Базовая

  • #12

Да я тупой, я когда тороплюсь делаю ошибки.

Это не ошибка, а опечатка. И всех умников посылай на …

  • #13

Да я тупой, я когда тороплюсь делаю ошибки.

Я тоже . Но я настолько тупой , что читаю что написал и исправляю , прикинь !!

  • #14

Это не ошибка, а опечатка. И всех умников посылай на …

Спасибо за поддержку

  • #15

Всем спасибо за помощь, думаю F5 поможет

  • #16

Тогда читай все что я выше написал !

  • #17

Это не ошибка, а опечатка. И всех умников посылай на …

Опечатка, это когда буквы на клавиатуре рядом стоят… Ситуация с опечаткой не относится к упомянутым мною товарищам. И да, не стоит кого то куда то посылать на. Тем более давать такие несуразные советы.

  • #18

Хочется взять и… подарить ТСу и первонаху:
Посмотреть вложение 227568

Он возможно имел ввиду подключение офиса в мск сити к р2р на бинансе?

  • #19

Я так понял , из моих наблюдений , делать идиотские ошибки в простых словах это фирменный почерк местного бота .

  • #20

Когда я покупаю P2P криптовалюту на бинансе, иногда бывает ошибка в чате с контрагентом, пишет ошибка сети, переподключение, но так и не подключается, из-за этого с контрагентом нельзя переписоваться. Я хотел бы узнать это только у меня так?

норм,у меня сегодня такая же фигня была при продаже

Некоторые пользователи время от времени жалуются на то, что не могут зайти на криптобиржу Binance. Обычно это не такая уж проблема и носит временный технический характер на стороне клиента и решается за пару действий.

Из-за того что новички часто задаются этим вопросом, мы решили посвятить статью решению проблемы входа на сайт Binance если это невозможно сделать.

5 BUSD за регистрацию

Как получить подарок? Пройдите регистрацию, используя реферального id NLXN3LH7, а затем верификацию на бирже Binance и Вам автоматически зачислится бонус 5 BUSD

Получить 5 BUSD

Не могу зайти на Binance. Причины недоступности Binance.

Пять самых частых причины по которым у вас проблемы с логином на гонконгскую биржу криптовалюты:

  • Временные технические работы. Тут от вас ничего не зависит, скорее всего сайт криптобиржи находится на техобслуживании, либо их сайт был взломан и сайт пытаются восстановить. Если это глобальная проблема, то на любом популярном сайте где обсуждают работы Binance можно найти ответ когда работа будет восстановлена. Проверьте каналы в Telegram или форумы по крипте.
  • Неправильный логин и пароль. В этом случае, при неоднократных безуспешных попытках войти через форма входа, вам надо нажать на ссылку «Забыли пароль?» и восстановите свои идентификационные данные на почту. Возможно даже ваш пароль был скомпрометирован и его надо поменять.
  • Проблема с браузером. Самое простое решение: попробуйте зайти с другого браузера. Если это помогло, значит на основном браузере нужно включить JavaScript, почистить куки и кэш в настройках. Такая проблема случается часто.
  • Проблема с DNS-сервером. Для начала, попробуйте зайти на Binance с другого компьютера или смартфона. Если и там сайт недоступен то, поменяйте DNS-адрес на устройстве на гугловские: 8.8.8.8 и 8.8.4.4. Как это сделать подробнее можно почитать написав поиске: «сменить dns-сервер на компьютере».
  • Не приходит SMS на Binance. для некоторых стран все еще встречается такая проблема. Единственное правильное решение здесь будет — использовать двухфакторную аутентификацию от Google. Об этом есть отдельная статья;
  • Не доходят SMS от Binance. Если вы один из тех, кто вместо двухфакторной авторизации пользуется смсками то, скорее всего вы часто сталкиваетесь с проблемой доставки SMS с разных сайтов на смартфон. Это огромный минус использования этого способа для авторизации. Именно поэтому сейчас Binance предлагает сразу же перейти на двухфакторную авторизацию от Google Authenticator.

Ваш аккаунт Binance был заморожен

Если вы проснулись утром и решили как обычно проверить свой баланс на Binance, но увидели перед собой надпись «Your account has been frozen» или «Your account has been locked» то, скорее всего администрация биржи заметила странные действия на вашем аккаунте и решили защитить ваши деньги от кражи. Сильно волноваться нет причин, нужно всего лишь сделать пару действий.

Если с вами произошла такая штука как заморозка аккаунта то, убрать это ограничение вы сможете только через несколько часов. Сразу по истечению некоторого времени, вам нужно активировать заново свой личный кабинет кликнув на кнопку «Reactivate».

Не могу зайти на Binance. Не работает и не открывается биржа

Сразу после этого проверьте свой e-mail на наличие письма с инструкцией для дальнейших действий. Если письмо не пришло то, проверьте папку со спамом.

Не могу зайти на Binance. Не работает и не открывается биржа

Важно знать, что как только письмо было отправлено у вас будет 30 минут чтобы нажать на ссылку в письме для активации аккаунта. Это сделано в целях безопасности.

После того как вы восстановили свой кабинет на Binance, у вас на 48 будет недоступна возможность вывода криптовалюты из системы.

Не могу зайти на Binance. Не работает и не открывается биржа

Дальше будет окно с просьбой ввести последний Ethereum-адрес с которого вы закидывали крипту на сайт биржи. Как найти адрес кошелька с которого пополнялся счет: это может быть ваш личный кошелек, либо адрес какого-то обменника который вы использовали.

Не могу зайти на Binance. Не работает и не открывается биржа

При неудачной попытке ввести адрес пополнения, система начнет спрашивать другие вопросы на которые можете знать ответ только вы. Если вы и на них не смогли ответить то, повторную попытку предоставят через несколько часов.

Возможно вам также придется пройти повторную верификацию с помощью фото паспорта, либо селфи с помощью приложения на iOS, Android.

Итог

Даже если вам не помогли все эти действия, в любой момент можно просто обратиться в техподдержку Binance и вам помогут обязательно. Единственная загвоздка в том, что нужно общаться с ними на иностранном языке.

Вовремя принимайте меры безопасности аккаунта и внимательно следите за своими действиями на сайте, чтобы они не нарушали правила сервиса чтобы избежать блокировок.

Удачного трейдинга!


14

ответов


Arti (Binance Angel)🌍

!status

Hавсегда забанил Straj_777 Stas а этот чем отличился


Крипто Энтузиаст

Hавсегда забанил Straj_777 Stas а этот чем отличи…

Вот тоже интересно….сижу,наблюдаю,ничего не рекламировал,никому не хамил,писал то же,что и все. Странный выбор


Cryptoxoma

Вот тоже интересно….сижу,наблюдаю,ничего не рекл…

ну не знаю может наш Ангел Арти всё таки простит его и выпустит из тюрьмы…

Дак он просто картинку прокомментировал,никого не оскорблял….мдэ

будьте так добры нажмите кнопочку волшебную очень Вас просим


Cryptoxoma

Дак он просто картинку прокомментировал,никого не …

Есть правила и их надо соблюдать


Arti (Binance Angel)🌍

Есть правила и их надо соблюдать

Тут жёстче разборки устраивали и ничего,прокатывало предупреждениями

I have been following a tutorial online and have managed to create a trading bot using Binance and BitMEX API. However, as soon as a connection is established with the binance testnet it keeps fluctuating by opening and closing the connection.

Error

invalid command name "1808227738624_update_ui"
    while executing
"1808227738624_update_ui"
    ("after" script)

Connection Error

2022-04-22 17:55:44,284 INFO :: Binance connection opened
2022-04-22 17:55:44,433 WARNING :: Binance Websocket connection closed
2022-04-22 17:55:47,364 
INFO :: Binance connection opened
2022-04-22 17:55:47,527 WARNING :: Binance Websocket connection closed

Implemented Code
Binance class

class BinanceClient:
    def _init_(self, public_key: str, secret_key: str, testnet: bool, futures: bool):

        """
        https://binance-docs.github.io/apidocs/futures/en
        :param public_key:
        :param secret_key:
        :param testnet:
        :param futures: if False, the Client will be a Spot API Client
        """

        self.futures = futures

        if self.futures:
            self.platform = "binance_futures"
            if testnet:
                self._base_url = "https://testnet.binancefuture.com"
                self._wss_url = "wss://stream.binancefuture.com/ws"
            else:
                self._base_url = "https://fapi.binance.com"
                self._wss_url = "wss://fstream.binance.com/ws"
        else:
            self.platform = "binance_spot"
            if testnet:
                self._base_url = "https://testnet.binance.vision"
                self._wss_url = "wss://testnet.binance.vision/ws"
            else:
                self._base_url = "https://api.binance.com"
                self._wss_url = "wss://stream.binance.com:9443/ws"

        self._public_key = public_key
        self._secret_key = secret_key

        self._headers = {'X-MBX-APIKEY': self._public_key}

        self.contracts = self.get_contracts()
        self.balances = self.get_balances()

        self.prices = dict()
        self.strategies: typing.Dict[int, typing.Union[TechnicalStrategy, BreakoutStrategy]] = dict()

        self.logs = []

        self._ws_id = 1
        self.ws: websocket.WebSocketApp
        self.reconnect = True

        t = threading.Thread(target=self._start_ws)
        t.start()

        logger.info("Binance Futures Client successfully initialized")

    def _add_log(self, msg: str):

        """
        Add a log to the list so that it can be picked by the update_ui() method of the root component.
        :param msg:
        :return:
        """

        logger.info("%s", msg)
        self.logs.append({"log": msg, "displayed": False})

    def _generate_signature(self, data: typing.Dict) -> str:

        """
        Generate a signature with the HMAC-256 algorithm.
        :param data: Dictionary of parameters to be converted to a query string
        :return:
        """

        return hmac.new(self._secret_key.encode(), urlencode(data).encode(), hashlib.sha256).hexdigest()

    def _make_request(self, method: str, endpoint: str, data: typing.Dict):

        """
        Wrapper that normalizes the requests to the REST API and error handling.
        :param method: GET, POST, DELETE
        :param endpoint: Includes the /api/v1 part
        :param data: Parameters of the request
        :return:
        """

        if method == "GET":
            try:
                response = requests.get(self._base_url + endpoint, params=data, headers=self._headers)
            except Exception as e:  # Takes into account any possible error, most likely network errors
                logger.error("Connection error while making %s request to %s: %s", method, endpoint, e)
                return None

        elif method == "POST":
            try:
                response = requests.post(self._base_url + endpoint, params=data, headers=self._headers)
            except Exception as e:
                logger.error("Connection error while making %s request to %s: %s", method, endpoint, e)
                return None

        elif method == "DELETE":
            try:
                response = requests.delete(self._base_url + endpoint, params=data, headers=self._headers)
            except Exception as e:
                logger.error("Connection error while making %s request to %s: %s", method, endpoint, e)
                return None
        else:
            raise ValueError()

        if response.status_code == 200:  # 200 is the response code of successful requests
            return response.json()
        else:
            logger.error("Error while making %s request to %s: %s (error code %s)",
                         method, endpoint, response.json(), response.status_code)
            return None

    def get_contracts(self) -> typing.Dict[str, Contract]:

        """
        Get a list of symbols/contracts on the exchange to be displayed in the OptionMenus of the interface.
        :return:
        """

        if self.futures:
            exchange_info = self._make_request("GET", "/fapi/v1/exchangeInfo", dict())
        else:
            exchange_info = self._make_request("GET", "/api/v3/exchangeInfo", dict())

        contracts = dict()

        if exchange_info is not None:
            for contract_data in exchange_info['symbols']:
                contracts[contract_data['symbol']] = Contract(contract_data, self.platform)

        return collections.OrderedDict(sorted(contracts.items()))  # Sort keys of the dictionary alphabetically

    def get_historical_candles(self, contract: Contract, interval: str) -> typing.List[Candle]:

        """
        Get a list of the most recent candlesticks for a given symbol/contract and interval.
        :param contract:
        :param interval: 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M
        :return:
        """

        data = dict()
        data['symbol'] = contract.symbol
        data['interval'] = interval
        data['limit'] = 1000  # The maximum number of candles is 1000 on Binance Spot

        if self.futures:
            raw_candles = self._make_request("GET", "/fapi/v1/klines", data)
        else:
            raw_candles = self._make_request("GET", "/api/v3/klines", data)

        candles = []

        if raw_candles is not None:
            for c in raw_candles:
                candles.append(Candle(c, interval, self.platform))

        return candles

    def get_bid_ask(self, contract: Contract) -> typing.Dict[str, float]:

        """
        Get a snapshot of the current bid and ask price for a symbol/contract, to be sure there is something
        to display in the Watchlist.
        :param contract:
        :return:
        """

        data = dict()
        data['symbol'] = contract.symbol

        if self.futures:
            ob_data = self._make_request("GET", "/fapi/v1/ticker/bookTicker", data)
        else:
            ob_data = self._make_request("GET", "/api/v3/ticker/bookTicker", data)

        if ob_data is not None:
            if contract.symbol not in self.prices:  # Add the symbol to the dictionary if needed
                self.prices[contract.symbol] = {'bid': float(ob_data['bidPrice']), 'ask': float(ob_data['askPrice'])}
            else:
                self.prices[contract.symbol]['bid'] = float(ob_data['bidPrice'])
                self.prices[contract.symbol]['ask'] = float(ob_data['askPrice'])

            return self.prices[contract.symbol]

    def get_balances(self) -> typing.Dict[str, Balance]:

        """
        Get the current balance of the account, the data is different between Spot and Futures
        :return:
        """

        data = dict()
        data['timestamp'] = int(time.time() * 1000)
        data['signature'] = self._generate_signature(data)

        balances = dict()

        if self.futures:
            account_data = self._make_request("GET", "/fapi/v1/account", data)
        else:
            account_data = self._make_request("GET", "/api/v3/account", data)

        if account_data is not None:
            if self.futures:
                for a in account_data['assets']:
                    balances[a['asset']] = Balance(a, self.platform)
            else:
                for a in account_data['balances']:
                    balances[a['asset']] = Balance(a, self.platform)

        return balances

    def place_order(self, contract: Contract, order_type: str, quantity: float, side: str, price=None, tif=None) -> OrderStatus:

        """
        Place an order. Based on the order_type, the price and tif arguments are not required
        :param contract:
        :param order_type: LIMIT, MARKET, STOP, TAKE_PROFIT, LIQUIDATION
        :param quantity:
        :param side:
        :param price:
        :param tif:
        :return:
        """

        data = dict()
        data['symbol'] = contract.symbol
        data['side'] = side.upper()
        data['quantity'] = round(round(quantity / contract.lot_size) * contract.lot_size, 8)
        data['type'] = order_type.upper()  # Makes sure the order type is in uppercase

        if price is not None:
            data['price'] = round(round(price / contract.tick_size) * contract.tick_size, 8)

        if tif is not None:
            data['timeInForce'] = tif

        data['timestamp'] = int(time.time() * 1000)
        data['signature'] = self._generate_signature(data)

        if self.futures:
            order_status = self._make_request("POST", "/fapi/v1/order", data)
        else:
            order_status = self._make_request("POST", "/api/v3/order", data)

        if order_status is not None:

            if not self.futures:
                if order_status['status'] == "FILLED":
                    order_status['avgPrice'] = self._get_execution_price(contract, order_status['orderId'])
                else:
                    order_status['avgPrice'] = 0

            order_status = OrderStatus(order_status, self.platform)

        return order_status

    def cancel_order(self, contract: Contract, order_id: int) -> OrderStatus:

        data = dict()
        data['orderId'] = order_id
        data['symbol'] = contract.symbol

        data['timestamp'] = int(time.time() * 1000)
        data['signature'] = self._generate_signature(data)

        if self.futures:
            order_status = self._make_request("DELETE", "/fapi/v1/order", data)
        else:
            order_status = self._make_request("DELETE", "/api/v3/order", data)

        if order_status is not None:
            if not self.futures:
                # Get the average execution price based on the recent trades
                order_status['avgPrice'] = self._get_execution_price(contract, order_id)
            order_status = OrderStatus(order_status, self.platform)

        return order_status

    def _get_execution_price(self, contract: Contract, order_id: int) -> float:

        """
        For Binance Spot only, find the equivalent of the 'avgPrice' key on the futures side.
        The average price is the weighted sum of each trade price related to the order_id
        :param contract:
        :param order_id:
        :return:
        """

        data = dict()
        data['timestamp'] = int(time.time() * 1000)
        data['symbol'] = contract.symbol
        data['signature'] = self._generate_signature(data)

        trades = self._make_request("GET", "/api/v3/myTrades", data)

        avg_price = 0

        if trades is not None:
            for t in trades:
                if t['orderId'] == order_id:
                    avg_price += (float(t['price']) * float(t['qty']))  # Weighted sum

        return avg_price

    def get_order_status(self, contract: Contract, order_id: int) -> OrderStatus:

        data = dict()
        data['timestamp'] = int(time.time() * 1000)
        data['symbol'] = contract.symbol
        data['orderId'] = order_id
        data['signature'] = self._generate_signature(data)

        if self.futures:
            order_status = self._make_request("GET", "/fapi/v1/order", data)
        else:
            order_status = self._make_request("GET", "/api/v3/order", data)

        if order_status is not None:
            if not self.futures:
                if order_status['status'] == "FILLED":
                    # Get the average execution price based on the recent trades
                    order_status['avgPrice'] = self._get_execution_price(contract, order_id)
                else:
                    order_status['avgPrice'] = 0

            order_status = OrderStatus(order_status, self.platform)

        return order_status

    def _start_ws(self):

        """
        Infinite loop (thus has to run in a Thread) that reopens the websocket connection in case it drops
        :return:
        """

        self.ws = websocket.WebSocketApp(self._wss_url, on_open=self._on_open, on_close=self._on_close,
                                         on_error=self._on_error, on_message=self._on_message)

        while True:
            try:
                if self.reconnect:  # Reconnect unless the interface is closed by the user
                    self.ws.run_forever()  # Blocking method that ends only if the websocket connection drops
                else:
                    break
            except Exception as e:
                logger.error("Binance error in run_forever() method: %s", e)
            time.sleep(2)

    def _on_open(self, ws):
        logger.info("Binance connection opened")

        # Subscribe to the two channels with two different subscription requests
        # Otherwise the request is too big and may get rejected by Binance
        self.subscribe_channel(list(self.contracts.values()), "bookTicker")
        self.subscribe_channel(list(self.contracts.values()), "aggTrade")

    def _on_close(self, ws, *args, **kwargs):

        """
        Callback method triggered when the connection drops
        :return:
        """
        logger.warning("Binance Websocket connection closed")
        self.ws_connected = False
        
    def _on_error(self, ws, msg: str):

        """
        Callback method triggered in case of error
        :param msg:
        :return:
        """

        logger.error("Binance connection error: %s", msg)

    def _on_message(self, ws, msg: str):

        """
        The websocket updates of the channels the program subscribed to will go through this callback method
        :param msg:
        :return:
        """

        data = json.loads(msg)

        if "e" in data:
            if data['e'] == "bookTicker":

                symbol = data['s']

                if symbol not in self.prices:
                    self.prices[symbol] = {'bid': float(data['b']), 'ask': float(data['a'])}
                else:
                    self.prices[symbol]['bid'] = float(data['b'])
                    self.prices[symbol]['ask'] = float(data['a'])

                # PNL Calculation

                try:
                    for b_index, strat in self.strategies.items():
                        if strat.contract.symbol == symbol:
                            for trade in strat.trades:
                                if trade.status == "open" and trade.entry_price is not None:
                                    if trade.side == "long":
                                        trade.pnl = (self.prices[symbol]['bid'] - trade.entry_price) * trade.quantity
                                    elif trade.side == "short":
                                        trade.pnl = (trade.entry_price - self.prices[symbol]['ask']) * trade.quantity
                except RuntimeError as e:  # Handles the case  the dictionary is modified while loop through it
                    logger.error("Error while looping through the Binance strategies: %s", e)

            if data['e'] == "aggTrade":

                symbol = data['s']

                for key, strat in self.strategies.items():
                    if strat.contract.symbol == symbol:
                        res = strat.parse_trades(float(data['p']), float(data['q']), data['T'])  # Updates candlesticks
                        strat.check_trade(res)

    def subscribe_channel(self, contracts: typing.List[Contract], channel: str):

        """
        Subscribe to updates on a specific topic for all the symbols.
        If your list is bigger than 300 symbols, the subscription will fail (observed on Binance Spot).
        :param contracts:
        :param channel: aggTrades, bookTicker...
        :return:
        """

        if len(contracts) > 300:
            logger.warning("Subscribing to more than 300 symbols will most likely fail. "
                           "Consider subscribing only when adding a symbol to your Watchlist or when starting a "
                           "strategy for a symbol.")

        data = dict()
        data['method'] = "SUBSCRIBE"
        data['params'] = []

        for contract in contracts:
            data['params'].append(contract.symbol.lower() + "@" + channel)
        data['id'] = self._ws_id

        try:
            self.ws.send(json.dumps(data))  # Converts the JSON object (dictionary) to a JSON string
        except Exception as e:
            logger.error("Websocket error while subscribing to @bookTicker and @aggTrade: %s", e)

        self._ws_id += 1

    def get_trade_size(self, contract: Contract, price: float, balance_pct: float):

        """
        Compute the trade size for the strategy module based on the percentage of the balance to use
        that was defined in the strategy component.
        :param contract:
        :param price: Used to convert the amount to invest into an amount to buy/sell
        :param balance_pct:
        :return:
        """

        balance = self.get_balances()
        if balance is not None:
            if contract.quote_asset in balance:  # On Binance Spot, the quote asset isn't necessarily USDT
                if self.futures:
                    balance = balance[contract.quote_asset].wallet_balance
                else:
                    balance = balance[contract.quote_asset].free
            else:
                return None
        else:
            return None

        trade_size = (balance * balance_pct / 100) / price

        trade_size = round(round(trade_size / contract.lot_size) * contract.lot_size, 8)  # Removes extra decimals

        logger.info("Binance current %s balance = %s, trade size = %s", contract.quote_asset, balance, trade_size)

        return trade_size

Binance close function:

def _on_close(self, ws, *args, **kwargs):

        """
        Callback method triggered when the connection drops
        :return:
        """
        logger.warning("Binance Websocket connection closed")
        self.ws_connected = False

Возможно, вам также будет интересно:

  • Biasi котел ошибка e01
  • Biasi rinnova ошибка е05
  • Biasi rinnova ошибка e01
  • Biasi rinnova ошибка b09
  • Biasi delta 24s ошибки

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии