Здравствуйте! Подскажите выскочила ошибка: "attempt to index a nil value" на строчку: "if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then"
Вроде как раз на nil проверяю.
Пользователь
Сообщений: Регистрация: 12.05.2020
19.03.2024 07:55:59
Цитата
Евгений написал: Подскажите выскочила ошибка: "attempt to index a nil value" на строчку: "if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then"Вроде как раз на nil проверяю.
У вас getFuturesLimit(FIRM, ACCOUNT, 0, "SUR") равно nil, а его индексировать нельзя.
написал: Подскажите выскочила ошибка: "attempt to index a nil value" на строчку: "if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then"Вроде как раз на nil проверяю.
У вас getFuturesLimit(FIRM, ACCOUNT, 0, "SUR") равно nil, а его индексировать нельзя.
if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR")==nil then break end
if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then break end
Ругается на строчку if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then
Пользователь
Сообщений: Регистрация: 12.05.2020
19.03.2024 14:48:47
Цитата
Евгений написал: Ругается на строчку if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then
Если функция, в которой это происходит небольшая, то выложите ее текст. Трудно определять птицу по заднему оперению
написал: Ругается на строчку if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then
Если функция, в которой это происходит небольшая, то выложите ее текст. Трудно определять птицу по заднему оперению ::
Нет никакой функции. Это происходит в main:
function main() while IsRun do sleep(1000) for q = 1, 1 do if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR")==nil then break end
if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then break end end end end
Пользователь
Сообщений: Регистрация: 20.03.2023
19.03.2024 15:35:41
Не вызывайте функцию два раза, сохраните результат в локальную переменную. Странно конечно, похоже почему-то при первом вызове результат нормальный, а при втором - nil
Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта. Хотелось бы узнать причину или как побороть данную ошибку, чтобы срипт не вылетал с ошибкой.
Пользователь
Сообщений: Регистрация: 12.05.2020
20.03.2024 09:01:10
Цитата
Евгений написал: Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта.
Следующий раз, пожалуйста, начинайте с нюансов и указывайте версию QUIK, а также версию QLua. А то вы мозги форуму чуть не свихнули .
Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта..
Сразу бы это сказали...
Цитата
Евгений написал: Хотелось бы узнать причину или как побороть данную ошибку, чтобы срипт не вылетал с ошибкой.
Вероятно при первой проверке getFuturesLimit вернул таблицу, а при второй у брокера что-нибудь глюкнуло, и getFuturesLimit вернул nil Надо было закинуть результат getFuturesLimit в переменную и ее уже проверять
Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта..
Сразу бы это сказали...
Цитата
написал: Хотелось бы узнать причину или как побороть данную ошибку, чтобы срипт не вылетал с ошибкой.
Вероятно при первой проверке getFuturesLimit вернул таблицу, а при второй у брокера что-нибудь глюкнуло, и getFuturesLimit вернул nil Надо было закинуть результат getFuturesLimit в переменную и ее уже проверять
Спасибо, так и сделаю
Пользователь
Сообщений: Регистрация: 27.12.2022
20.03.2024 17:37:02
А может быть такое, что Квик что-то меняет в своей таблице, а скрипт в это время читает это поле? Помню, в районе quik2dde.ru упоминаемый мною kalikazandr писал, что такое возможно, якобы, даже неполный кусок изменяемой Квиком строки можно прочитать. Или это байки алготрейдеров?
Пользователь
Сообщений: Регистрация: 20.03.2023
23.03.2024 01:59:25
Цитата
Евгений написал: Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта. Хотелось бы узнать причину или как побороть данную ошибку, чтобы срипт не вылетал с ошибкой.
Мысль посетила, совсем не уверен: вроде бы эта функция задействует библиотеку расчёта лимитов брокера, которая по идее обновляется даже если вы квик не обновляете, т.к. правила расчёта на бирже меняются. А она может в теории или сглючить, вдруг даже полезть в сеть за данными и не получить их (например двойной запрос воспринят как ддос). По какой-то же причине юзеры жалуются на тормоза при выставлении заявок на срочном рынке...
Пользователь
Сообщений: Регистрация: 30.01.2015
26.03.2024 11:59:24
Код
local t=getFuturesLimit(FIRM, ACCOUNT, 0, "SUR");
local x=t.cbplplanned or 0;
Пользователь
Сообщений: Регистрация: 30.01.2015
26.03.2024 12:00:59
Код
local x=0;
local t=getFuturesLimit(FIRM, ACCOUNT, 0, "SUR");
if t then x=t.cbplplanned end