RoboTradeCode / flash-gate

Торговый шлюз для биржы Exmo
0 stars 1 forks source link

Key error на ордерах из быстрых торгов #156

Open khanbekov opened 1 year ago

khanbekov commented 1 year ago

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

Полный traceback

Sep 29 22:38:12 ip-172-31-22-147 pipenv[407131]: 2022-09-29 22:38:12,917 [407131] DEBUG - flash_gate.exchange.exchanges - Trying to cancel all orders: ['BTC/USDT']
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]: 2022-09-29 22:37:36,074 [407131] ERROR - flash_gate.gate.gate - 'price'
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]: Traceback (most recent call last):
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:   File "/home/ubuntu/flash-gate/flash_gate/gate/gate.py", line 418, in watch_orders
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:     orders = await self.rock.watch_orders()
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:   File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/exmo.py", line 18, in wrapped
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:     return await io(self, *args, **kwargs)
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:   File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/exmo.py", line 62, in watch_orders
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:     orders = OrdersFormatter.format(event)
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:   File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/abc.py", line 12, in format
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:     formatted = cls._from_update(event)
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:   File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/formatters.py", line 46, in _from_update
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:     orders = [OrdersFormatter._order(event["ts"], event["data"])]
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:   File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/formatters.py", line 56, in _order
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:     price = Decimal(data["price"])
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]: KeyError: 'price'
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]: 2022-09-29 22:37:36,075 [407131] ERROR - flash_gate.gate.gate - 'price'
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]: Traceback (most recent call last):
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:   File "/home/ubuntu/flash-gate/flash_gate/gate/gate.py", line 418, in watch_orders
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:     orders = await self.rock.watch_orders()
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:   File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/exmo.py", line 18, in wrapped
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:     return await io(self, *args, **kwargs)
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:   File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/exmo.py", line 62, in watch_orders
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:     orders = OrdersFormatter.format(event)
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:   File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/abc.py", line 12, in format
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:     formatted = cls._from_update(event)
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:   File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/formatters.py", line 46, in _from_update
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:     orders = [OrdersFormatter._order(event["ts"], event["data"])]
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:   File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/formatters.py", line 56, in _order
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]:     price = Decimal(data["price"])
Sep 29 22:37:36 ip-172-31-22-147 pipenv[407131]: KeyError: 'price'
khanbekov commented 1 year ago

Предлагаю делать проверку на NoneType, чтобы избежать такой ошибки

81xx commented 1 year ago

price = Decimal(data["price"]) - скорее всего тут нет поля price

я очень часто вам советую делать вот так, это надо сделать привычкой:

if `price` in 
    price = Decimal(data["price"])
nomnoms12 commented 1 year ago

@khanbekov Что такое "ордера из быстрых торгов"?

nomnoms12 commented 1 year ago

price = Decimal(data["price"]) - скорее всего тут нет поля price

я очень часто вам советую делать вот так, это надо сделать привычкой:

if `price` in 
    price = Decimal(data["price"])

Да, новый код уже стараюсь писать так. На старый с рефакторингом пока не набрасываюсь, буду постепенно добавлять эти проверки

khanbekov commented 1 year ago

@khanbekov Что такое "ордера из быстрых торгов"?

На exmo есть такой тип торговли, как "быстрые торги". По сути, это упрощенный способ покупки активов. Полагаю, он использует маркет ордер

nomnoms12 commented 1 year ago

@khanbekov Правильно я понимаю, что у ордеров с быстрых торгов может не быть цены?

khanbekov commented 1 year ago

@khanbekov Правильно я понимаю, что у ордеров с быстрых торгов может не быть цены?

Точно не могу сказать, не знаю, какие сообщения приходят из быстрых торгов. Веронятно да, раз в сообщении не было цены.

khanbekov commented 1 year ago

@nomnoms12 Ошибка проявилась не только на ордерах из быстрых торгов, но и на обычных. Видимо, это касается и маркет ордеров

2022-09-30 12:53:21,749 [407131] DEBUG - flash_gate.exchange.exchanges - Order has been successfully created: {'client_order_id': None, 'symbol': 'BTC/USDT', 'type': 'market', 'side': 'buy', 'amount': 0.00128, 'price': 0, 'id': '31471811429', 'status': 'closed', 'filled': 0.00128, 'timestamp': 1664531601749000, 'info': {'result': True, 'error': '', 'order_id': '31471811429'}}
2022-09-30 12:53:21,756 [407131] DEBUG - websockets.client - < TEXT '{"ts":1664531601743,"event":"update","topic":"s...,"status":"executing"}}' [241 bytes]
2022-09-30 12:53:21,757 [407131] DEBUG - websockets.client - < TEXT '{"ts":1664531601743,"event":"update","topic":"s...e_quantity":"0.00195"}}' [322 bytes]
2022-09-30 12:53:21,757 [407131] DEBUG - websockets.client - < TEXT '{"ts":1664531601743,"event":"update","topic":"s...e_quantity":"0.00195"}}' [322 bytes]
2022-09-30 12:53:21,757 [407131] ERROR - flash_gate.gate.gate - 'price'
Traceback (most recent call last):
  File "/home/ubuntu/flash-gate/flash_gate/gate/gate.py", line 418, in watch_orders
    orders = await self.rock.watch_orders()
  File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/exmo.py", line 18, in wrapped
    return await io(self, *args, **kwargs)
  File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/exmo.py", line 62, in watch_orders
    orders = OrdersFormatter.format(event)
  File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/abc.py", line 12, in format
    formatted = cls._from_update(event)
  File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/formatters.py", line 46, in _from_update
    orders = [OrdersFormatter._order(event["ts"], event["data"])]
  File "/home/ubuntu/.local/share/virtualenvs/flash-gate-lm98JxV3/lib/python3.10/site-packages/rock/exchanges/exmo/formatters.py", line 56, in _order
    price = Decimal(data["price"])
KeyError: 'price'
khanbekov commented 1 year ago

Эта ошибка стала возникать очень часто, повышаю приоритет issue @nomnoms12