Предварительная проверка наличия в базе Quik инструмента (опциона)

Страницы: 1
RSS
Предварительная проверка наличия в базе Quik инструмента (опциона), Subscribe_Level_II_Quotes и getParamEx не существующего опциона приводят к зависанию Quik
 
Периодически сервера Quik перестают транслировать данные по некоторым опционам.
Выглядит это так как опцион был и все его параметры транслировались, эти опционы постоянно мониторятся lua скриптом - который был запущен в тот момент когда опционы все ещё были живы.
В какой то момент некоторые дальние опционы "дохнут" (ещё до истечения по сроку) и исчезают из трансляции серверов Quik как доступные инструменты.

Если эти опционы находятся в таблице торгов то у них в таблице пропадают такие параметры как:
Спрос    Предл.    Цена послед.    Волатильность    Теор. цена

Вместо нулевых значений начинает отображаться пустое значение.

Если таблицу отредактировать и заново заполнить по фильтру - то эти опционы исчезают.

В итоге по DDE из указанной таблицы начинают транслироваться пустые значения - что приводит к зависанию DDE сервера - до тех пор пока сдохнувшие опционы не будут удалены из таблицы

В lua мониторятся стаканы этих опционов - запускается скрипт и формируется список для мониторинга в тот момент когда опцион ещё жив, но в тот момент когда опционы дохнут - попытка мониторинга приводит к зависанию Quik намертво (даже ошибок lua не показывает)

Подобная конструкция - для предварительной проверки успешности запроса getParamEx через параметр result - не помогает, скрипт всё равно вешает Quik.
Какие функции позволят заблаговременно отследить исчезновение инструмента из трансляции сервера Quik ?

Код
function Quotes(code)
local ther_price_hz = getParamEx(class_code, code, "THEORPRICE")
   if(ther_price_hz.result == "1") then
   local ther_price = tonumber(ther_price_hz.param_value)
   
-- ....
end
end
 
Я бы проверку на корректность возвращаемых значений сделал посерьезнее
попробуйте вместо
Код
   if(ther_price_hz.result == "1") then
примерно так
Код
   if(ther_price_hz.result=="1")and(ther_price_hz.param_image~="")and(ther_price_hz.param_type=="1")then
 
Цитата
Boris написал:
Периодически сервера Quik перестают транслировать данные по некоторым опционам.
Выглядит это так как опцион был и все его параметры транслировались, эти опционы постоянно мониторятся lua скриптом - который был запущен в тот момент когда опционы все ещё были живы.
В какой то момент некоторые дальние опционы "дохнут" (ещё до истечения по сроку) и исчезают из трансляции серверов Quik как доступные инструменты.

Если эти опционы находятся в таблице торгов то у них в таблице пропадают такие параметры как:
Спрос    Предл.    Цена послед.    Волатильность    Теор. цена

Вместо нулевых значений начинает отображаться пустое значение.

Если таблицу отредактировать и заново заполнить по фильтру - то эти опционы исчезают.

В итоге по DDE из указанной таблицы начинают транслироваться пустые значения - что приводит к зависанию DDE сервера - до тех пор пока сдохнувшие опционы не будут удалены из таблицы

В lua мониторятся стаканы этих опционов - запускается скрипт и формируется список для мониторинга в тот момент когда опцион ещё жив, но в тот момент когда опционы дохнут - попытка мониторинга приводит к зависанию Quik намертво (даже ошибок lua не показывает)

Подобная конструкция - для предварительной проверки успешности запроса getParamEx через параметр result - не помогает, скрипт всё равно вешает Quik.
Какие функции позволят заблаговременно отследить исчезновение инструмента из трансляции сервера Quik ?
Вы в своем вопросе написали ответ.
-----------------------
Если эти опционы находятся в таблице торгов то у них в таблице пропадают такие параметры как:
Спрос Предл. Цена послед. Волатильность Теор. цена

Вместо нулевых значений начинает отображаться пустое значение.
-----------------
вот это и нужно проверять.
Т е читайте любой из указанных параметров и проверяйте его на вшивость.
 
Цитата
nikolz написал:
Т е читайте любой из указанных параметров и проверяйте его на вшивость.
я это пробовал задолго до того как тут на форуме вопрос задать.

Проверял и на пустую строку и то что в значении число и что оно не nul
Но всё равно Quik намертво виснет.

Вероятно он виснет не на этапе getParamEx, а ещё ранее и где именно - абсолютно непонятно.
Но происходит это точно в тот момент когда в Quik обновляются данные и появляются сдохнувшие опционы.
Памяти скрипт ест - 8-15мб - не более.

Может какой то кэллбэк есть "инструмент исключён из базы" ??
 
Цитата
Boris написал:
Цитата
nikolz написал:
Т е читайте любой из указанных параметров и проверяйте его на вшивость.
я это пробовал задолго до того как тут на форуме вопрос задать.

Проверял и на пустую строку и то что в значении число и что оно не nul
Но всё равно Quik намертво виснет.

Вероятно он виснет не на этапе getParamEx, а ещё ранее и где именно - абсолютно непонятно.
Но происходит это точно в тот момент когда в Quik обновляются данные и появляются сдохнувшие опционы.
Памяти скрипт ест - 8-15мб - не более.

Может какой то кэллбэк есть "инструмент исключён из базы" ??
как я понял Вы используете вывод по dde.
Я тоже с ним работаю, но сервер у меня свой на СИ.
поэтому пару слов по особенностям этого вывода. Так как это может быть причиной зависания.
--------------
В документации по применению DDE в квик, есть указание (место не помню где, но действительно влияет на результата вывода)
что нельзя использовать фильтры в таблице если она выводится по DDE.
Поэтому для начала отключите все фильтры на выводимой по DDE таблице.
-------------
Кроме того, зависание возможно по причине некорректной обработки пустых строк в вашем приложении  DDE
Примерно так.
 
Цитата
nikolz написал:
Кроме того, зависание возможно по причине некорректной обработки пустых строк в вашем приложении  DDE
так и есть, но с DDE в сервере там всё непросто - не пойми как сделано на базе библиотеки сторонней.
Экспорт такой таблицы по DDE  просто даёт сбой сервера - сам квик не виснет.
Проблема не в этом - хотя было бы логично автоматически исключать из таблиц quik исчезнувшие опционы.

Виснет Квик когда я для обхода этой проблемы - запускаю lua скрипт фильтрующий таблицу для передачи по DDE, ну и плюс всяких полезностей на lua добавил.
Работает всё это стабильно днями и сутками без тормозов, но в тот момент когда на сервере quik "дохнут" опционы (около 10 штук сразу обычно), то виснет сам Quik.
Возможно какое то сочетание множественности запросов:
Subscribe_Level_II_Quotes, getParamEx, getQuoteLevel2и момент обновление базы Quik с сервера - с исчезнувшими опционами.
Страницы: 1
Читают тему (гостей: 1)
Наверх