KaylHin (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Окончательное решение вопроса с getQuoteLevel2. Вопрос к разработчикам QLua, Нужно, наконец, что-то исправить?
 
Цитата
Serge123 написал:
Помнится, я уже спрашивал об уточнении док-ции по getQuoteLevel2... Надо, наконец уточнить: что возвращается в случае, если отсутствуют bid/offer? Это таблицы, поэтому логично возвращать nil. А в док-ции написано, что возвращается пустая строка. Если это так, то это бардак... Только что посмотрел описание этой функции в QLUA.chm (дата файла аж 2023 г.!) последней версии Quik. А между тем, ещё в 2016 г. запрос, якобы, начал рассматриваться: https://forum.quik.ru/forum10/topic1502/ Видимо, придётся самостоятельно проверять, что там возвращается: nil (NULL или 0 на Си) или ссылка на "". Но чтобы это проверить, нужно ждать конца вечерней сессии в 23:50. Он выглядит так (2 варианта):LQDT 23:49:58.307148 1.7176 22500 SLQDT 23:49:58.424402 bids=4 1.7176/1179206774 1.7175/250690921 1.7174/500699896 1.7173/25069269 offers=4 1.7177/1537813336 1.7178/250179065 1.7179/500099511 1.7180/25340331LQDT 23:49:58.959725 bids=4 1.7176/1179206578 1.7175/250690921 1.7174/500699896 1.7173/25069269 offers=4 1.7177/1537813336 1.7178/250179065 1.7179/500099511 1.7180/25340331LQDT 23:50:02.061765 LQDT 23:49:57.962624 1.7186 4123207 SLQDT 23:49:58.135088 bids=4 1.7186/1617425408 1.7185/251421812 1.7184/500029766 1.7183/25120559 offers=4 1.7187/1717726036 1.7188/250272256 1.7189/500201784 1.7190/25105969LQDT 23:50:00.054763 bids=4 1.7186/1617425408 1.7185/251312612 1.7184/500029766 1.7183/25120559 offers=4 1.7187/1717726036 1.7188/250272256 1.7189/500201784 1.7190/25105969LQDT 23:50:02.097119 В последних строках как раз надо выяснить, что именно возвращает getQuoteLevel2. В перерывах я люблю проводить время за игрой на https://mostbet.net.ua/promo/bonus/ По идее, с этой целью можно также проверять строкиbid_count, offer_countна символьный 0.И ещё: моя программка на обработкуКодstatic int forLua_OnAllTrade(lua_State *L)тратит 6500 тактов ЦП, а на вызовКодstatic int forLua_OnQuote(lua_State *L)
{ ...

 lua_getglobal(L, "getQuoteLevel2");
 lua_insert(L, 1); // Используем код класса и тикер, которые уже сидят в стеке
 lua_pcall(L, 2, 1, 0);
тратит 202 000 тактов!! Нельзя ли как-то ускорить работу getQuoteLevel2?Может быть, кто-то из программистов предложит ускорение? Я склоняюсь к тому, чтобы во время большой нагрузки на Quik не вызывать getQuoteLevel2, если с момента предыд. её вызова прошло мало времени.
Привет! Хочу поделиться своим опытом на случай если у кого еще возникнет такая проблема. Я уже работал с аналогичной ситуацией в проекте на QLua, связанном с автоматическим анализом стакана. Возвращаемое значение getQuoteLevel2 при отсутствии bid/offer действительно не всегда стабильно задокументировано: в некоторых версиях возвращается nil, в других пустая строка, что вызывает путаницу при дальнейшей обработке.

У себя решил проблему через проверку типа возвращаемого значения перед дальнейшей работой. Просто добавил обёртку, которая возвращает nil, если значение, пустая строка, и дальше уже работал с нормализованным типом. Это помогло избежать крашей и упростить отладку.

По поводу производительности: да, getQuoteLevel2 тяжёлый, особенно при частых вызовах. У себя реализовал кеширование с интервалом по времени, если прошло менее 300 мс с предыдущего вызова, использую кеш. Это сильно снизило нагрузку и ускорило работу скрипта в моменты высокой активности на рынке.

Страницы: 1
Наверх