Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
khanbekov opened this issue Sep 29, 2022 · 9 comments
Open

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

khanbekov opened this issue Sep 29, 2022 · 9 comments
Labels
bug Something isn't working

Comments

@khanbekov
Copy link
Contributor

khanbekov commented Sep 29, 2022

Иногда возникает ошибка, связанная с ордерами. Не могу приложить ордер, который получило ядро, скорее всего это ордер из быстрых торгов на 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 khanbekov added the bug Something isn't working label Sep 29, 2022
@khanbekov
Copy link
Contributor Author

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

@81xx
Copy link
Contributor

81xx commented Sep 29, 2022

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

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

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

@nomnoms12
Copy link
Contributor

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

@nomnoms12
Copy link
Contributor

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

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

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

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

@khanbekov
Copy link
Contributor Author

khanbekov commented Sep 29, 2022

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

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

@nomnoms12
Copy link
Contributor

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

@khanbekov
Copy link
Contributor Author

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

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

@khanbekov
Copy link
Contributor Author

@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
Copy link
Contributor Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants