RoboTradeCode / flash-gate

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

Не работают команды на получение статусов ордеров и их отмены. #134

Closed kleninmaxim closed 2 years ago

kleninmaxim commented 2 years ago

Скорее всего тут проблема биржи в client order id. 1) Команда ядра гейту на получение статуса ордера:

{"event_id":"696de19c-ce77-48eb-83b9-b52a9d17284d","event":"command","exchange":"binance","node":"core","instance": "testing","action":"get_orders","message":"Get status order 53ecc798-d72b-4d16-81c4-2a2ad2975981|M3Maker","algo":"testing","timestamp":1662539980085866,"data":[{"client_order_id":"53ecc798-d72b-4d16-81c4-2a2ad2975981|M3Maker","symbol":"BTC/USDT"}]}

1) На команду получения статуса ордера гейт прислал ошибку:

{"event_id": "148393bf-f8ad-4b1a-b918-a1f9033901d4", "event": "error", "exchange": "binance", "node": "gate", "instance": "testing", "algo": "testing", "action": "get_orders", "message": "binance {\"code\":-1100,\"msg\":\"Illegal characters found in parameter 'orderId'; legal range is '^[0-9]{1,20}$'.\"}", "timestamp": 1662539980100782, "data": [{"client_order_id": "53ecc798-d72b-4d16-81c4-2a2ad2975981|M3Maker", "symbol": "BTC/USDT"}]}

2) Команда ядра гейту на отмену ордера:

{"event_id":"a0867251-917c-418d-ba14-cb6325c4260e","event":"command","exchange":"binance","node":"core","instance": "testing","action":"cancel_orders","message":"Cancel order 53ecc798-d72b-4d16-81c4-2a2ad2975981|M3Maker","algo":"testing","timestamp":1662540047128054,"data":[{"client_order_id":"53ecc798-d72b-4d16-81c4-2a2ad2975981|M3Maker","symbol":"BTC/USDT"}]}

2) А на команду отмены ордера, как я вижу гейт ничего не прислал.

khanbekov commented 2 years ago

Такая ошибка возникает, когда гейту не удается получить order_id по присланному ядром client_order_id. Т.е., в его бд не хранится значение по этому ключу.

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

81xx commented 2 years ago

Такая ошибка возникает, когда гейту не удается получить order_id по присланному ядром client_order_id. Т.е., в его бд не хранится значение по этому ключу.

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

в том числе должна быть "читаемая" ошибка, что бы пользователь получивший эту ошибку мог понять что случилось. И как я понимаю в flash gate нет проверки на то, нашел он order_id по client_id, а он сразу проталкивает "пустоту" на биржу.

81xx commented 2 years ago

@khanbekov надо по логам попытаться восстановить что случилось с этим client_order_id. Остальные доработки я изложу в других issue.

81xx commented 2 years ago

Переделал данное issue на новое.

81xx commented 2 years ago

@kleninmaxim я правильно понял что такое один раз было замечено? или часто было?

kleninmaxim commented 2 years ago

@kleninmaxim я правильно понял что такое один раз было замечено? или часто было?

Я запустил скрипт, ядро послало открыть ордер. Остановил скрипт, запустил снова и вылетела эта ошибка ERROR: (-1000): MediaDriver keepalive (ms): age=10236 > timeout=10000. Из-за нее перезапустился гейт. Запустил скрипт второй раз, скрипт запустился и запросил статус.

khanbekov commented 2 years ago

@kleninmaxim Скорее всего, гейт перезагрузился прежде, чем записал значение в memcahced. Из-за этого после перезагрузки он не смог найти соответствующий order_id