Функция getDepoEx возвращает nil на имеющийся в портфеле инструмент

Страницы: 1
RSS
Функция getDepoEx возвращает nil на имеющийся в портфеле инструмент, В каких случая такой возможно?
 
Моя функция для получения количества бумаг+ордеров по инструменту:

-- Получает текущую чистую позицию по инструменту
function GetTotalPos(stock_id,firm_id,client_code_id,account_id,pos_type)
local temp_stock1=getDepoEx(firm_id, client_code_id,stock_id, account_id, 2)
local temp_stock_info=getSecurityInfo(GetClassBySec(stock_id),stock_id)

if temp_stock1==nil then
message (temp_stock_info.name..' nilll ');
sleep(1000);
return nil;
else

local pos=temp_stock1.currentbal+temp_stock1.locked_buy;

if pos_type==0 then pos=temp_stock1.currentbal; end;
if pos_type==1 then pos=temp_stock1.currentbal+temp_stock1.locked_buy; end;
if pos_type==2 then pos=temp_stock1.locked_buy; end;
if pos_type==-1 then pos=temp_stock1.currentbal+temp_stock1.locked_sell; end;
if pos_type==-2 then pos=temp_stock1.locked_sell; end;

return pos/temp_stock_info.lot_size
end

end

Периодически при пробегании по всему портфелю бумаг возвращает nil на существующие в портфеле бумаги. Иногда. Раз в 3-5 минут. Почему такое может происходить? параметры переданы верно. Бумага в портфеле есть, но иногда getDepoEx её не видит. Какие есть скрытые особенности у getDepoEx, из за чего бы она могла выдавать nil на реально существующую бумагу в портфеле?
 
возвращает nil на этапе проверки:
if temp_stock1==nil then
message (temp_stock_info.name..' nilll ');
sleep(1000);
 
Александр, Проблема не только в том, что getDepoEx возвращает nil, она иногда возвращает валидные, но неверные данные. Я когда-то и спрашивал, и полный код своей функции сверки портфелей выкладывал, и пытался не колодой тикеров к ней обращаться, а с задержкой в секунду после каждого вызова. Короче, отключил нафиг всю сверку - глазами сравниваю периодически, как и раньше, до знакомства с getDepoEx.
 
Если эта функция - врушка, то как тогда програмно узнавать количество тех или иных бумаг бумаг?
 
Пробую getDepo, она тупа нули возвращает по всем позициям
 
Александр,
Цитата
Если эта функция - врушка, то как тогда програмно узнавать количество тех или иных бумаг бумаг?
Никак.
 
Цитата
Для ответа на ваш вопрос добавьте все параметры в message и покажите сообщения.
---------------------------
Зачем sleep на 1 секунду?
l
 
https://forum.quik.ru/messages/forum10/message56117/topic6503/#message56117
Надо делать так, как надо. А как не надо - делать не надо.
 
предположу, что проблема в том, что все функции в QLUA глобальные.
Это значит, что когда колбеки исполняются, то блокируют доступ getDepoEx к архиву инструментов.
А  main не ждет. В итоге ему возвращают nil.
 
если есть желание могу сказать какие сделать тесты и как устранить проблему.
мне это делать лень, так как у меня сделано иначе и проблемы нет.
Страницы: 1
Читают тему (гостей: 1)
Наверх