RoboTradeCode / configurator

Предназначен для предоставления гейтам и ядру конфигураций и информации о тогуемых рынках
0 stars 1 forks source link

Получение данных о маркете из order book #44

Closed khanbekov closed 2 years ago

khanbekov commented 2 years ago

Создано из #43

На некоторых биржах (Kuna) нельзя получить полные данные о маркете, например минимальный и максимальный объем ордера, шаг объема (то есть данные о precision и limits на бирже). Для решения этой проблемы нужно получать order book и вычислять по нему требуемые данные.

Также нужно создать кэш для хранения предыдущих значений. Таким образом, в кэше будут сохраняться только самые точные значения. При каждой новой проверке order book значения будут сраниваться с теми, что в кэше. Configurator всегда должен возвращать самые точные значения.

khanbekov commented 2 years ago

Внёс требуемые изменения, помимо кэша. Обновил на сервере, чтобы получить доступ к лимитам, полученным из ордербуков, нужно указать параметр limits_by_order_book=true. Т.е., полный адрес будет примерно следующим:

https://configurator.robotrade.io/kuna/1?only_new=false&limits_by_order_book=true

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

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

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

Не рекомендую использовать limits_by_order_book=true, если это не необходимо. Это замедляет получение конфигурации, и в конфигурации могут быть лимиты, которых нет на бирже на самом деле.

@kleninmaxim, жду обратной связи, достаточно ли конфигурации от kuna

81xx commented 2 years ago

Внёс требуемые изменения, помимо кэша. Обновил на сервере, чтобы получить доступ к лимитам, полученным из ордербуков, нужно указать параметр limits_by_order_book=true. Т.е., полный адрес будет примерно следующим:

https://configurator.robotrade.io/kuna/1?only_new=false&limits_by_order_book=true

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

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

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

Не рекомендую использовать limits_by_order_book=true, если это не необходимо. Это замедляет получение конфигурации, и в конфигурации могут быть лимиты, которых нет на бирже на самом деле.

@kleninmaxim, жду обратной связи, достаточно ли конфигурации от kuna

@idvlab

kleninmaxim commented 2 years ago

@khanbekov markets по этой ссылке отдает корректные https://configurator.robotrade.io/kuna/1?only_new=false&limits_by_order_book=true

Еще нужно сделать, чтобы отдавал корректные данные по рынку без параметра limits_by_order_book=true, https://configurator.robotrade.io/kuna/1?only_new=false

Если параметры на бирже поменяются, то увидим это по ссылке с параметром limits_by_order_book=true и тогда обновим данные для этой ссылке https://configurator.robotrade.io/kuna/1?only_new=false

khanbekov commented 2 years ago

@khanbekov markets по этой ссылке отдает корректные https://configurator.robotrade.io/kuna/1?only_new=false&limits_by_order_book=true

Еще нужно сделать, чтобы отдавал корректные данные по рынку без параметра limits_by_order_book=true, https://configurator.robotrade.io/kuna/1?only_new=false

Если параметры на бирже поменяются, то увидим это по ссылке с параметром limits_by_order_book=true и тогда обновим данные для этой ссылке https://configurator.robotrade.io/kuna/1?only_new=false

Что именно имеется в виду? Кэширование лимитов для тех маркетов, которые запрашивали у конфигуратора?

kleninmaxim commented 2 years ago

@khanbekov markets по этой ссылке отдает корректные https://configurator.robotrade.io/kuna/1?only_new=false&limits_by_order_book=true Еще нужно сделать, чтобы отдавал корректные данные по рынку без параметра limits_by_order_book=true, https://configurator.robotrade.io/kuna/1?only_new=false Если параметры на бирже поменяются, то увидим это по ссылке с параметром limits_by_order_book=true и тогда обновим данные для этой ссылке https://configurator.robotrade.io/kuna/1?only_new=false

Что именно имеется в виду? Кэширование лимитов для тех маркетов, которые запрашивали у конфигуратора?

Имеется в виду, чтобы поле markets в https://configurator.robotrade.io/kuna/1?only_new=false было таким же как и в https://configurator.robotrade.io/kuna/1?only_new=false&limits_by_order_book=true

khanbekov commented 2 years ago

Имеется в виду, чтобы поле markets в https://configurator.robotrade.io/kuna/1?only_new=false было таким же как и в https://configurator.robotrade.io/kuna/1?only_new=false&limits_by_order_book=true

То есть вы предлагаете всегда вычислять данные о лимитах маркета из ордербуков? limits_by_order_book будет true по умолчанию? Это будет замедлять получение данных, особенно при большом количестве маркетов. В среднем время получения данных увеличивается в 2.5 раза

kleninmaxim commented 2 years ago

Имеется в виду, чтобы поле markets в https://configurator.robotrade.io/kuna/1?only_new=false было таким же как и в https://configurator.robotrade.io/kuna/1?only_new=false&limits_by_order_book=true

То есть вы предлагаете всегда вычислять данные о лимитах маркета из ордербуков? limits_by_order_book будет true по умолчанию? Это будет замедлять получение данных, особенно при большом количестве маркетов. В среднем время получения данных увеличивается в 2.5 раза

Да, и сделать это только для биржи kuna

81xx commented 2 years ago

limits_by_order_book

я тоже не совсем понял что вы предлагаете. Делать это поле по умолчанию не правильно:

  1. Это долго работает
  2. Это не совсем корректно, так как это не точное значение шага цены и шага объема.

Полагается что это костыль для тех бирж где информации о шагах нету.

khanbekov commented 2 years ago

Имеется в виду, чтобы поле markets в https://configurator.robotrade.io/kuna/1?only_new=false было таким же как и в https://configurator.robotrade.io/kuna/1?only_new=false&limits_by_order_book=true

То есть вы предлагаете всегда вычислять данные о лимитах маркета из ордербуков? limits_by_order_book будет true по умолчанию? Это будет замедлять получение данных, особенно при большом количестве маркетов. В среднем время получения данных увеличивается в 2.5 раза

Да, и сделать это только для биржи kuna

Я предлагаю указывать параметр в ссылке, а не в коде привязывать kuna к такому спосбу получения лимитов. Для того, чтобы сохранить гибкость, был внедрен необязательный параметр limits_by_order_book

В гейте, например, не нужно использовать limits_by_order_book, это будет только замедлять его работу, эти поля он не использует, ему нужны только common_symbol маркетов

kleninmaxim commented 2 years ago

Созвонился с @pybr0, он расскажет как лучше сделать

81xx commented 2 years ago

@khanbekov @kleninmaxim решили вот так:

khanbekov commented 2 years ago

Добавил описанную выше логику. Теперь лимиты будут вычисляться из ордер-буков при следующих условиях:

В остальных случаях лимиты не будут вычисляться из ордербуков.

@kleninmaxim