function round(number, znaq) -- функция округления числа num до знаков znaq local num = tonumber(number) local idp = tonumber(znaq) if num then local mult = 10 ^ (idp or 0) if num >= 0 then return math.floor(num * mult + 0.5) / mult else return math.ceil(num * mult - 0.5) / mult end else return num end end
function DaysToDie(class_code, sec_code) -- Получаем количество дней до погашения инструмента,<br />-- class_code - для фьючерсов SPBFUT<br />-- sec_code - код инструмента SiZ2, BRZ2, CRZ2 и т.д. -- если < 4, просим заменить инструмент -- для работы необходима ф-ция round (округляем до целого числа) -- is_run - глобальный флаг работы робота - false = отключаемся. --- local daysToDie = 0 -- количество дней до погашения инструмента ----- получаем количество дней до погашения, если < 4, рекомендуем перейти на новый инструмент ---------- daysToDie = round(getParamEx(class_code, sec_code, "DAYS_TO_MAT_DATE").param_value, 0) if daysToDie <= 4 and daysToDie > 0 then message("Количество дней до погашения инструмента " .. SEC_CODE .. " равно " .. tostring(daysToDie) .. ". Необходимо заменить инструмент в настройках робота") elseif daysToDie == 0 or daysToDie == nil then message("Инструмент больше не торгуется") is_run = false end return daysToDie end
— Функция возвращает имя запускаемого скрипта
— может пригодиться для логирования результата (лог_<имя_запускаемого_скрипта>)
scName="" function OnInit(script_path) scName=tostring(get_file_name(script_path)) -- получение полного пути к исполняемому скрипту end function main() message("имя файла = "..scName) end function get_file_name (file) local file_name = file:match("[^\\]*.lua$") -- поиск в строке полного пути к файлу названия скрипта.lua return file_name:sub(0, #file_name - 4) -- обрезка '.lua' в конце строки end