проблема с функцией getDepo

Страницы: 1
RSS
проблема с функцией getDepo
 
Добрый день,
тестирую функции на демо сервере.
Сделал лишь старт квика. т е ничего не покупал и не продавал.
-----------------
поясняю:
колбек OnParam принимает сделки:function OnParam(c,s)
Код
for i=1,#tparam do local t=tparam[i]; if t=="table" then if t[1]==14 and t[3]==s then return end end end
local t={14,c,s}; if #tparam==0 then tparam[1]=t; ESet(event); else table.sinsert(tparam,t); end
end 
и загружает clas и sec в таблицу tparam

фунция main  в цикле принимает значения из tparam и вызывает функцию getDemo
Код
Log:write("clas="..clas..",sec="..sec..",firm="..firm..",account="..account..",client="..client.."\n");Log:flush();
local t1=getDepo(client,firm,sec,account);
Log:write("type="..type(t1).."\n");Log:flush();

1 строка выводит в лог файл все параметры функции getDemo, которая вызывается  во 2-ой строке
3 строка - выводим в лог файл тип возвращенного значения t1
------------------
В результате получаем следующий кирдык:
---------------------
Таблица позиций по инструментам имеет вид:

т е в таблице есть лишь SBER c нулевыми значениями
================
А теперь смотрим лог файл
Код
 clas=CETS,sec=EURUSD000TOM
clas=CETS,sec=EURUSD000TOM,firm=MB1000100000,account=MB1000100002,client=10323
type=table
tim=29.6543,tim1=0.061899999999998

 clas=CETS,sec=USD000UTSTOM
clas=CETS,sec=USD000UTSTOM,firm=MB1000100000,account=MB1000100002,client=10323
type=table
tim=28.3573,tim1=0.041400000000007

 clas=CETS,sec=CNYRUB_TOM
clas=CETS,sec=CNYRUB_TOM,firm=MB1000100000,account=MB1000100002,client=10323
type=table
tim=26.3304,tim1=0.044000000000008

 clas=CETS,sec=USD000000TOD
clas=CETS,sec=USD000000TOD,firm=MB1000100000,account=MB1000100002,client=10323
type=table
tim=26.163,tim1=0.048399999999997

 clas=CETS,sec=EUR_RUB__TOM
clas=CETS,sec=EUR_RUB__TOM,firm=MB1000100000,account=MB1000100002,client=10323
type=table
tim=26.6879,tim1=0.0442

 clas=QJSIM,sec=ALRS
clas=QJSIM,sec=ALRS,firm=NC0011100000,account=NL0011100043,client=10323
type=table
tim=27.8828,tim1=0.052700000000005

 clas=QJSIM,sec=MSTT
clas=QJSIM,sec=MSTT,firm=NC0011100000,account=NL0011100043,client=10323
type=table
tim=27.8581,tim1=0.125

 clas=QJSIM,sec=PLZL
clas=QJSIM,sec=PLZL,firm=NC0011100000,account=NL0011100043,client=10323
type=table
tim=27.1135,tim1=0.051300000000001

 clas=QJSIM,sec=SBER
clas=QJSIM,sec=SBER,firm=NC0011100000,account=NL0011100043,client=10323
до последней строки инструменты в таблице позиций отсутствуют
в последней строке SBER и QUIK висит.
--------------------
Что не так?
 
и еще
вот такое сообщение :
 
 
специально для очень занятых разработчиков написал очень простой тест
Код
Log=io.open("D:/test.log","w") --лог файл
------------------------
tparam={}
function main()
   local firm,account,client,x;
   while true do
      while #tparam>0 do
         local t=tparam[1]; local clas=t[1]; local sec=t[2]; w=nil;
         local z=string.find(clas,'FUT');
         for i=0,getNumberOf("client_codes")-1 do
            x=getItem("client_codes",i);
            if e~="" then local z1=string.find(clas,'FUT');if z1==z2 then  client=x; break; end end
         end
--------------------
         for i=0,getNumberOf("trade_accounts")-1 do
            x=getItem("trade_accounts",i);
            if string.find(x.class_codes,clas) and x.status==0 then firm=x.firmid; account=x.trdaccid;break; end
         end
----------------------------------
         Log:write("clas="..clas..",sec="..sec..",firm="..firm..",account="..account..",client="..client.."\n");Log:flush();
         local t1=getDepo(client,firm,sec,account);
         Log:write("type="..type(t1).."\n");Log:flush();
         table.sremove(tparam, 1)
      end
      sleep(1);
   end
end
--------------
function OnInit(pfile)    sleep(1000); end
-------------------
function OnParam(c,s)    table.sinsert(tparam,{c,s}); end 
условия тестирования такие же как указаны выше.
В таблице позиций лишь SBER с нулями
----------------
если в тесте закомментировать  строку
local t1=getDepo(client,firm,sec,account);
то работает без проблем
------------------
с активной строкой в лог файле получаем:
Код
clas=QJSIM,sec=APTK,firm=NC0011100000,account=NL0011100043,client=10323
type=table
clas=QJSIM,sec=CHKZ,firm=NC0011100000,account=NL0011100043,client=10323
type=table
clas=QJSIM,sec=DIOD,firm=NC0011100000,account=NL0011100043,client=10323
type=table
clas=QJSIM,sec=KROT,firm=NC0011100000,account=NL0011100043,client=10323
type=table
clas=QJSIM,sec=KZOSP,firm=NC0011100000,account=NL0011100043,client=10323
type=table
clas=QJSIM,sec=LIFE,firm=NC0011100000,account=NL0011100043,client=10323
type=table
clas=QJSIM,sec=RNFT,firm=NC0011100000,account=NL0011100043,client=10323
type=table
clas=QJSIM,sec=SBER,firm=NC0011100000,account=NL0011100043,client=10323
и на экране:

 
 
упростил и поправил тест,
результат тот же.
Код
Log=io.open("D:/test.log","w") --лог файл
tparam={}

function main()
   local firm,account,client,x;
   while true do
      while #tparam>0 do
         local t=tparam[1];
      local clas=t[1]; local sec=t[2]; w=nil;    local z=string.find(clas,'FUT');
         for i=0,getNumberOf("client_codes")-1 do
            x=getItem("client_codes",i); if x~="" then if string.find(clas,'FUT')==z then  client=x; break; end end
         end
         for i=0,getNumberOf("trade_accounts")-1 do
            x=getItem("trade_accounts",i);
            if string.find(x.class_codes,clas) and x.status==0 then firm=x.firmid; account=x.trdaccid;break; end
         end
         Log:write("clas="..clas..",sec="..sec..",firm="..firm..",account="..account..",client="..client.."\n");Log:flush();
         local t1=getDepo(client,firm,sec,account);
         Log:write("type="..type(t1).."\n");Log:flush();
         table.sremove(tparam, 1)
      end
      sleep(1);
   end
end
--------------
function OnInit(pfile)    sleep(1000); end
-------------------
function OnParam(c,s)    table.sinsert(tparam,{c,s}); end 
 
nikolz, добрый день.

Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
 
Цитата
Anton Belonogov написал:
проблема изучается. Постараемся в ближайшее время дать ответ.
 Проверил у себя в "песочнице" (QUIK версия последняя 10.1). Ситуация возникает постоянно. По всем признакам (возникает в разное время, сообщение не lua) ошибка синхронизации в QUIK.
 
nikolz, добрый день.

Действительно, при вызове getDepo из Lua-скрипта из-за синхронизационных проблем могут возникать ошибки. Данная проблема будет устранена в одной из ближайших версий ПО.
В качестве решения проблемы рекомендуем использовать вызов getDepoEx.

Приносим извинения за причиненные неудобства.
 
Цитата
Anton Belonogov написал:
Действительно, при вызове getDepo из Lua-скрипта из-за синхронизационных проблем могут возникать ошибки.
 Что характерно, вы появились вскоре, после того, как на форуме исчез известный пользователь Anton. В любом случае, для поддержки, это правильное решение  :smile: .
 
nikolz, добрый день.

Описанная в данном обращении проблема была устранена в версии 10.2.0 Рабочего места QUIK, рекомендуем Вам обновить версию ПО.
Приносим свои извинения за причиненные неудобства.
Страницы: 1
Читают тему
Наверх