В стакан попадают странные значения

Страницы: 1
RSS
В стакан попадают странные значения, Работа со стаканом из Lua
 
Добрый день! Заметил что данные по спреду как то странно себя ведут. Решил проверить вот таким скриптом лучшую цену продажи :

Цитата
function main()
is_run=true;
while is_run == true do
OnQuote("TQBR", "SBER");
sleep(2000);
end
end;
function OnQuote(class, sec)
tb = getQuoteLevel2(class, sec);
 message(tostring(tb.offer[1].price));
end

По идеи мне должны в окне сообщения показываться только лучшие цены, однако иногда попадается что то явно не то скрин:


Чаще всего конечно показывает правильную цену ~262.70 но проскальзывали и такие непонятные цены. Прошу, поясните - это баг, это фича, или это у меня руки кривые ?
 
Цитата
Илья написал:
Прошу, поясните - это баг, это фича, или это у меня руки кривые ?

Исправьте код так:

Код
function main() 
   is_run=true; 
   while is_run == true do 
      sleep(2000); 
   end 
end; 

function OnQuote(class, sec) 
if (class == "TQBR") and (sec == "SBER") then
   tb = getQuoteLevel2(class, sec); 
   message(tostring(tb.offer[1].price));
end   
end
 
Хотите сказать, что попадают значения других инструментов и нужно вводить дополнительную проверку?  Как такое возможно если у меня открыт только 1 стакан ?
 
Илья,
терминал сам вызывает функцию OnQuote при изменении данных по стакану.
В этом сама суть колбеков. И от того что Вы сами вызовите функцию OnQuote, терминал от этого не перестанет ее вызывать.
Вот и получается что терминал вызывает функцию по стакану который Вы не ожидаете.
Чтобы этого избежать надо добавить фильтр.
 
На счет коллбеков кажется врубился - функция будет вызываться постоянно, пока скрипт запущен (поэтому sleep(msec) - никак не влияет на частоту появления сообщений), поэтому даже если `while` будет пустой - он будет держать скрипт в работе а следовательно и обратный вызов OnQuote будет проходить.

Но все еще не понял - почему функция вызывается по СЛУЧАЙНОМУ стакану, вместо того который открыт или по нескольким если открыты несколько или не возвращает ноль если стаканы закрыты все?
 
Цитата
Илья написал:
Но все еще не понял - почему функция вызывается по СЛУЧАЙНОМУ стакану, вместо того который открыт или по нескольким если открыты несколько или не возвращает ноль если стаканы закрыты все?

Функция срабатывает при поступлении данных по любому заказанному стакану в любом порядке. Т.е. все в одну кучу. Далее программист сам фильтрует то что ему надо.
Раз функция OnQuote у Вас срабатывает по не нужному инструменту, значит где то у Вас заказан стакан по этому инструменту.
Заказ данных происходит либо при открытии стакана, либо при экспорте по ODBC, либо через скрипт LUA.
Если заказано 10 стаканов по разным инструментам, значит OnQuote будет срабатывать по 10 разным инструментам и не важно кто и как их заказал.
 
Цитата
Sergey Gorokhov написал:
Функция срабатывает при поступлении данных по любому заказанному стакану
Действительно, в таблице состояние счета указана позиция по еще одному инструменту. давно с ним не работал и даже забыл. Хотя в покупке/в продаже по нулям, это ф-ю не останавливает.
 
Илья,
Таблица "Состояние счета" никакого отношения к стаканам не имеет. Ищите лучше.
Либо у Вас все-таки где-то открыты стаканы по другим инструментам (посмотреть в меню Окна - Менеджер окон)
Либо у Вас настроен экспорт стаканов по ODBC (посмотреть в меню Сервисы - Экспорт/Импорт данных - Экспорт инструментов по ODBC)
Либо запущен какой-то Lua скрипт который заказывает стакан функцией Subscribe_Level_II_Quotes

Если Вы считаете что всё сказанное для Вас не верно, пришлите нам на quiksupport@arqatech.com папку с терминалом (без ключей доступа) мы проверим.
Страницы: 1
Читают тему
Наверх