Помнится, я уже спрашивал об уточнении док-ции по getQuoteLevel2... Надо, наконец уточнить: что возвращается в случае, если отсутствуют bid/offer? Это таблицы, поэтому логично возвращать nil. А в док-ции написано, что возвращается пустая строка. Если это так, то это бардак... Только что посмотрел описание этой функции в QLUA.chm (дата файла аж 2023 г.!) последней версии Quik. А между тем, ещё в 2016 г. запрос, якобы, начал рассматриваться:https://forum.quik.ru/forum10/topic1502/
Видимо, придётся самостоятельно проверять, что там возвращается: nil (NULL или 0 на Си) или ссылка на "". Но чтобы это проверить, нужно ждать конца вечерней сессии в 23:50. Он выглядит так (2 варианта):
В последних строках как раз надо выяснить, что именно возвращает getQuoteLevel2.
По идее, с этой целью можно также проверять строки 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, если с момента предыд. её вызова прошло мало времени.
Serge123 написал: Помнится, я уже спрашивал об уточнении док-ции по getQuoteLevel2... Надо, наконец уточнить: что возвращается в случае, если отсутствуют bid/offer? Это таблицы, поэтому логично возвращать nil. А в док-ции написано, что возвращается пустая строка. Если это так, то это бардак... Только что посмотрел описание этой функции в QLUA.chm (дата файла аж 2023 г.!) последней версии Quik. А между тем, ещё в 2016 г. запрос, якобы, начал рассматриваться: https://forum.quik.ru/forum10/topic1502/
Видимо, придётся самостоятельно проверять, что там возвращается: nil (NULL или 0 на Си) или ссылка на "". Но чтобы это проверить, нужно ждать конца вечерней сессии в 23:50. Он выглядит так (2 варианта):
В последних строках как раз надо выяснить, что именно возвращает getQuoteLevel2.
По идее, с этой целью можно также проверять строки 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, если с момента предыд. её вызова прошло мало времени.
Измерьте сколько затрачивает время каждый из операторов lua_getglobal(L, "getQuoteLevel2" ); lua_insert(L, 1 ); // Используем код класса и тикер, которые уже сидят в стеке lua_pcall(L, 2 , 1 , 0 ); а также пустая функция static int forLua_OnQuote(lua_State * L) Тогда можно сказать как ускорить и на сколько.
Сегодня попробую выяснить, что там getQuoteLevel2 выдаёт/не выдаёт.
Я ещё заметил противоречие в самой справке QLUA.chm: сначала там говорится, что
Код
При отсутствии и спроса и предложения функция возвращает таблицу без параметров bid и offer.
А потом, что
Код
bid TABLE Котировки спроса (покупки). При отсутствии спроса возвращается пустая строка.
offer TABLE Котировки предложений (продажи). При отсутствии предложения возвращается пустая строка.
Насколько я помню, bid и offer - таблицы, которые состоят из массива таблиц, каждый элемент массива - таблица, которая содержит 2 строки - price и quantity.
Я почему-то уверен, что при отсутствии спроса (bid_count == "0") таблица bid будет отсутствовать, а при отсутствии предложения (offer_count == "0") таблица offer будет отсутствовать.
Сейчас смотрел свои исходники, вспоминал, что там давно уже делал и пришёл к выводу, что на том тикере, с которым я работаю, не получится узнать, что там возвращается, nil или "", потому что при вызове OnQuote всегда есть спрос и предложение в стакане. За исключением последней строки, что я приводил выше:
Код
LQDT 23:50:02.061765
В этом последнем вызове перед окончанием вечерней сессии, по моему мнению, getQuoteLevel2 возвращает nil.
Сегодня в конце раб. дня мосбиржа выдала ответ на getQuoteLevel2 не такой, как всегда (как будто они там прочитали то, что я сегодня здесь написал ). Моя программка выдала отладочное сообщение, что вернулось не nil. Остаётся считать, что вернулось bid_count == '0' и offer_count == '0'. В этом случае моя программка не проверяет, что там с таблицами bid и offer.