Окончательное решение вопроса с getQuoteLevel2. Вопрос к разработчикам QLua

Страницы: 1
RSS
Окончательное решение вопроса с getQuoteLevel2. Вопрос к разработчикам QLua, Нужно, наконец, что-то исправить?
 
Помнится, я уже спрашивал об уточнении док-ции по 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 S
LQDT 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/25340331
LQDT 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/25340331
LQDT 23:50:02.061765

LQDT 23:49:57.962624 1.7186 4123207 S
LQDT 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/25105969
LQDT 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/25105969
LQDT 23:50:02.097119

В последних строках как раз надо выяснить, что именно возвращает 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_pcall быстрее использовать lua_call?

Пардон: надо было вывод программки тоже заключить в блок code...
 
Цитата
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 S
LQDT 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/25340331
LQDT 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/25340331
LQDT 23:50:02.061765

LQDT 23:49:57.962624 1.7186 4123207 S
LQDT 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/25105969
LQDT 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/25105969
LQDT 23:50:02.097119

В последних строках как раз надо выяснить, что именно возвращает 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 не такой, как всегда (как будто они там прочитали то, что я сегодня здесь написал  :smile: ). Моя программка выдала отладочное сообщение, что вернулось не nil. Остаётся считать, что вернулось bid_count == '0' и offer_count == '0'. В этом случае моя программка не проверяет, что там с таблицами bid и offer.
Страницы: 1
Читают тему
Наверх