Особенности OnQuote и getQuoteLevel2

Страницы: 1
RSS
Особенности OnQuote и getQuoteLevel2
 
1) Если в стакане отсутствуют биды/офера, то в таблице, которую возвращает getQuoteLevel2 поле bid/offer является не таблицей, как написано в документации, а пустыми строками. Наверное, надо либо исправить документацию, либо QLua.

2) В документации в разделе "Функции для заказа стакана котировок" опечатка в последнем пункте (должно быть IsSubscribed_Level_II_Quotes):
Цитата

  • Subscribe_Level_II_Quotes - заказывает на сервер  получение стакана по указанному классу и бумаге.
  • Unsubscribe_Level_II_Quotes - отменяет заказ на  получение с сервера стакана по указанному классу и бумаге.
  • Unsubscribe_Level_II_Quotes - позволяет узнать,  заказан ли с сервера стакан по указанному классу и бумаге.
3) Допустим, что я заказываю получение стакана по какому-нибудь малоликвидному опциону с помощью Subscribe. Как понять, что уже можно получать данные с помощью функции getQuoteLevel2? Эксперименты показали, что первое событие OnQuote придёт только после изменения стакана, а мне нужен и первый снапшот, как только данные стали доступными. Как понять: стакан пуст или ещё не пришли данные с сервера? Можно, конечно, долбиться раз в N секунд командой getQuoteLevel2 если стакан пуст, но как-то это неправильно выглядит.

Просьба к разработчикам прокомментировать написанное и принять меры, если это будет признано необходимым.
 
Цитата
_sk_ написал:
1) Если в стакане отсутствуют биды/офера, то в таблице, которую возвращает getQuoteLevel2 поле bid/offer является не таблицей, как написано в документации, а пустыми строками. Наверное, надо либо исправить документацию, либо QLua.
Добрый день,

Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.

Цитата
_sk_ написал:
2) В документации в разделе "Функции для заказа стакана котировок" опечатка в последнем пункте (должно быть IsSubscribed_Level_II_Quotes):
Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.

Цитата
_sk_ написал:
3) Допустим, что я заказываю получение стакана по какому-нибудь малоликвидному опциону с помощью Subscribe. Как понять, что уже можно получать данные с помощью функции getQuoteLevel2? Эксперименты показали, что первое событие OnQuote придёт только после изменения стакана, а мне нужен и первый снапшот, как только данные стали доступными. Как понять: стакан пуст или ещё не пришли данные с сервера? Можно, конечно, долбиться раз в N секунд командой getQuoteLevel2 если стакан пуст, но как-то это неправильно выглядит.
Данную задачу как раз должен решать вызов функции OnQuote, которая вызывается терминалом QUIK при получении изменения стакана котировок (с первичными значениями). Если данная функция по какой-либо причине не получает первое значение котировок, просьба направить нам запрос на адрес: quiksupport@arqatech.com прикрепив используемый Вами код и указав ссылку на данную ветку форума.
 
Письмо выслал. Код дублирую ниже.
Код
local myClassCode = "SPBOPT" -- код класса
local mySecCode = "RI100000BC6" -- какой-нибудь РЕДКО меняющийся в стакане опцион

-- Предполагаем, что 
-- 1) стакан по этому инструменту в терминале НЕ ОТКРЫТ
-- 2) Subscribe_Level_II_Quotes для этого инструмента не вызывался,
-- 3) известно (из другого терминала, например), что в стакане есть биды/офера

local interrupted = false

function OnQuote(classCode, secCode)
    if classCode == myClassCode and secCode == mySecCode then
        message("OnQuote(" .. classCode .. ", " .. secCode .. ")", 1)
    end
end

function OnStop()
  interrupted = true
end

function main()
    -- Что сейчас в стакане? Надо, чтобы ничего не было, т.к. данные ещё не заказаны.
    local q = getQuoteLevel2(myClassCode, mySecCode)
    message("QuoteLevel2: bid_count=" .. tonumber(q.bid_count) .. ", offer_count=" .. tonumber(q.offer_count), 1)
    -- Запрашиваем данные
    Subscribe_Level_II_Quotes(myClassCode, mySecCode)
    -- По идее, если в стакане стоят какие-то котировки,
    -- через некоторое НЕПРОДОЛЖИТЕЛЬНОЕ время придёт снапшот стакана в OnQuote
    while not interrupted do
        sleep(1000)
    end
end
 
Я провёл ещё один эксперимент на другом "свежем" инструменте, на стакан которого ещё не было подписок. Получается так, что при первом запуске скрипта приходит коллбэк OnQuote с первоначальным снапшотом стакана, а при повторных запусках скрипта уже нет, т.к. первый запуск скрипта сделал заказ данных по стакану.

Выходит, что алгоритм получения первоначального снапшота и последующих обновлений таков:
1) вызвать getQuoteLevel2(), который может вернуть нормальный стакан (первоначальный снапшот), а может и пустой, т.к. данные не заказаны;
2) вызвать Subscribe_Level_II_Quotes(), чтобы заказать данные, на всякий случай;
3) реагировать на OnQuote(), который вернёт первоначальный снапшот, если данных не было, и последующие обновления в любом случае.
 
Цитата
Stanislav Tvorogov написал:
Цитата
_sk_   написал:
1) Если в стакане отсутствуют биды/офера, то в таблице, которую возвращает getQuoteLevel2 поле bid/offer является не таблицей, как написано в документации, а пустыми строками. Наверное, надо либо исправить документацию, либо QLua.
Добрый день,

Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
Цитата
_sk_   написал:
2) В документации в разделе "Функции для заказа стакана котировок" опечатка в последнем пункте (должно быть IsSubscribed_Level_II_Quotes):
Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
Добрый день.
   
    Документация будет исправлена в одной из ближайших версий программы. Приносим извинения за причиненные неудобства.
 
_sk_,      Добрый день,
   
    Описаннная в данном инциденте проблема была устранена в версии 7.2.0     терминала QUIK.
    Рекомендуем Вам обновить версию программы.
   
    Приносим извинения за причиненные неудобства.
Страницы: 1
Читают тему
Наверх