Closed gojmpz closed 3 years ago
Пишет какую-нибудь ошибку, кроме стэк трэйса? А то мне не очень понятно, что ему на ровном месте не понравилось.
Quik ругается: https://gitlab.com/abrosimov.a.a/qlua/-/issues/4
Сори, не знаю как картинку вставить...
Ошибка, похоже такая же !
Точно пока не знаю, но дело может быть в том, что в скрипте из результата вызова функции GetQuoteLevel2 парсятся переменные bids
и offers
, в то время как в QLua они называются bid
и offer
соответственно.
https://github.com/Enfernuz/quik-lua-rpc/blob/6f24f12d767e07bae81707950c18ba09b0a95355/impl/protobuf_request_response_serde.lua#L457
Если так, то как оно раньше работало -- мне неведомо (я вроде ж тестил...), ибо, судя по старым версиям документации, эти переменные всегда назывались bid
и offer
.
Судя по стектрейсу, ошибка, впрочем, внутри цикла, так что навскидку пока не понятно. Проверяю.
Есть ли какая-то новая информация по данной ошибке?
Я очень плохо знаю Lua, сделав такие изменения в quik-lua-rpc/impl/protobuf_request_response_serde.lua:
result.bids = {}
for _, v in ipairs(proc_result.bids) do
--local bid = pb.defaults(qlua_pb_types.getQuoteLevel2.QuoteEntry)
--bid.price = v.price
--bid.quantity = v.quantity
table.sinsert(result.bids, {price = v.price, quantity = v.quantity})
end
result.offers = {}
for _, v in ipairs(proc_result.offers) do
--local offer = pb.defaults(qlua_pb_types.getQuoteLevel2.QuoteEntry)
--offer.price = v.price
--offer.quantity = v.quantity
table.sinsert(result.offers, {price = v.price, quantity = v.quantity})
end
У меня хотя бы стали приходить стаканы.
тоже плохо знаю lua, но "table.sinsert(" это вставка в таблицу. Но зачем, если "proc_result.bids" и "proc_result.offers" это уже таблицы ? Работать медленнее будет явно...
Я очень плохо знаю Lua, сделав такие изменения в quik-lua-rpc/impl/protobuf_request_response_serde.lua:
result.bids = {} for _, v in ipairs(proc_result.bids) do --local bid = pb.defaults(qlua_pb_types.getQuoteLevel2.QuoteEntry) --bid.price = v.price --bid.quantity = v.quantity table.sinsert(result.bids, {price = v.price, quantity = v.quantity}) end result.offers = {} for _, v in ipairs(proc_result.offers) do --local offer = pb.defaults(qlua_pb_types.getQuoteLevel2.QuoteEntry) --offer.price = v.price --offer.quantity = v.quantity table.sinsert(result.offers, {price = v.price, quantity = v.quantity}) end
У меня хотя бы стали приходить стаканы.
result.bids = proc_result.bids result.offers = proc_result.offers
@gojmpz, с этим кодом cтаканы приходят и наполняются? Если так, то давайте смёрджим.
P.S. Ребята, прошу прощения за задержки. У меня сейчас личные трудности, и сложно находить силы на работу над проектом. Буду признателен за пул-реквесты. Спасибо!
@Enfernuz Мне кажется, что с этим способом что-то не так:
result.bids = proc_result.bids
result.offers = proc_result.offers
Получается, что мы выпиливаем:
pb.defaults(qlua_pb_types.getQuoteLevel2.QuoteEntry)
Не должно такого быть... Попробую потестить сегодня вечером.
@Enfernuz Мне кажется, что с этим способом что-то не так:
result.bids = proc_result.bids result.offers = proc_result.offers
Получается, что мы выпиливаем:
pb.defaults(qlua_pb_types.getQuoteLevel2.QuoteEntry)
Не должно такого быть... Попробую потестить сегодня вечером.
Верно, выпиливать pb.defaults(qlua_pb_types.getQuoteLevel2.QuoteEntry) не надо. Я предложил залепуху, чтобы хоть получать стакан. )
@Enfernuz Мне кажется, что с этим способом что-то не так:
result.bids = proc_result.bids result.offers = proc_result.offers
Получается, что мы выпиливаем:
pb.defaults(qlua_pb_types.getQuoteLevel2.QuoteEntry)
Не должно такого быть... Попробую потестить сегодня вечером.
Получилось посмотреть?
Пофиксил в 7f1ecdb.
В общем, ничего нового я не придумал -- Вы уже сделали всё за меня.
Раньше эта штука работала. Возможно, @Abrosimov-a-a при обновлении репозитория скомпилировал обновлённую версию pb.dll
(https://github.com/starwing/lua-protobuf), которая теперь по умолчанию инициализирует для protobuf-полей типа message
соответствующие поля в Lua как nil
в соответствии со спекой Protocol Buffers.
Падает на такой ошибке в quik-lua-rpc getQuoteLevel2_pb2: