Останавливается скрипт

Страницы: 1
RSS
Останавливается скрипт
 
Всем доброго! Подскажите в чем может быть причина остановки скрипта по ошибке: "attempt to index a nil value" (попытка индекса нулевой стоимости)? Скрипт останавливается только при запуске Квика (скрипт не выключаю - только закрываю и открываю квик)?
local left =    -- эмитенты в таблице left задаем в самом начале
{
{
name = "SiU5"
     }
}
function oprosstakanov()                                   -- функция получения данных стакана работает не прекращая
     for i = 1,#left do                                         -- здесь перебираются эмитенты
local b = getQuoteLevel2(getSecurityInfo('',left[i].name).class_code, left[i].name)   -- ОШИБКА в этой строке
if b.bid and b.bid_count+0>0 then
local a = tonumber(b.bid[tonumber(b.bid_count)].price) * left[i].quantity
                 ------
           end
     end
end

Если запускать скрипт, при запущенном Квике - все в полном порядке.
 
Что ж такое? что никому не понятная проблема? Как по мне то она точно странная. Квиковцы жду от Вас ответа!
 
Здравствуйте,
Ошибка возникает из за того что в момент вызова функции getQuoteLevel2 еще нет запрошенных данных.
Для решения проблему рекомендуем выставить проверку isConnected данных перед обработкой.
Например так:
if isConnected() then
--остальной код
end
 
Спасибо понял пробую!
 
Нет изменений - скрипт останавливается! Сделал так:

function main()
     if isConnected() then  
     for i = 1, #left do
     Subscribe_Level_II_Quotes (getSecurityInfo('',left[i].name).class_code, left[i].name) -- заказ стаканов через цикл
           end
     while aRun do
           oprosstakanov()            -- опрос стаканов
--остальной код
           end
     end
end

Потом так:
function main()
while QRun do
     if isConnected() then       --делал и так: if isConnected() == 1 then
           QRun = fals
     for i = 1, #left do
     Subscribe_Level_II_Quotes (getSecurityInfo('',left[i].name).class_code, left[i].name) -- заказ стаканов через цикл
           end
     end
end
     while aRun do
           oprosstakanov()            -- опрос стаканов
           --остальной код
     end
end
 
Цитата
Юрий пишет:
getSecurityInfo('',left.name).class_code
Искать код класса по коду бумаги не очень хорошая идея, можно запросто получить неверный результат. Судя по коду бумаги, проще явно указать код класса "SPBFUT"
 
Попробуйте так:
------------------------------
local ClassCode=getSecurityInfo('',left[i].name).class_code
if ClassCode~=nil and type(ClassCode~="table") and ClassCode~=""  then
   Subscribe_Level_II_Quotes (ClssCode, left[i].name)
end
 
Цитата
Николай Камынин пишет:
ClassCode~=nil and type(ClassCode~="table") and ClassCode~=""then
К сожалению тоже самое: ошибка возникает в строке - local ClassCode = getSecurityInfo('',left[i].name).class_code
 
Цитата
Michael Bulychev пишет:
Цитата
Юрий пишет:
getSecurityInfo('',left .name).class_code
Искать код класса по коду бумаги не очень хорошая идея, можно запросто получить неверный результат. Судя по коду бумаги, проще явно указать код класса "SPBFUT"
Хочется универсальности -  сегодня торгую фьючерсы, а завтра акции - вот и проблема с явным указанием кода класса.
 
Кстати, при явном указании кода класса, проблем таких действительно не возникает.
Что же делать?
 
Один код бумаги может содержаться в разных классах. В результате вы можете получить не тот класс, который ожидали.
Надо делать так, как надо. А как не надо - делать не надо.
 
и как быть в таком случае?
 
Цитата
Юрий пишет:
и как быть в таком случае?
Указывать код вручную. Вы же знаете, к какому классу относится инструмент, которым торгуете.
А если не знаете - то это не трудно узнать.
 
Да понятно. Придется этот момент переделать. Всем спасибо!
 
Попробуйте так:
------------------------------
local t=getSecurityInfo('',left.name)
if t~=nil  then
local ClassCode=t.class_code
if ClassCode~=nil and type(ClassCode~="table") and ClassCode~="" then
Subscribe_Level_II_Quotes (ClssCode, left.name)
end
end
 
Цитата
Николай Камынин пишет:
Попробуйте так:
------------------------------
local t=getSecurityInfo('',left .name)
if t~=nil then
local ClassCode=t .class_code
if ClassCode~=nil and type(ClassCode~="table") and ClassCode~="" then
Subscribe_Level_II_Quotes (ClssCode, left .name)
end
end
Да Николай! Так действительно помогло! Скрипт не останавливается. Большое спасибо!
Страницы: 1
Читают тему
Наверх