Блог им. Albus
ticker="SBER"--тикер акции first_year=2013--первый сохранённый год last_year=2018--последний сохранённый год. Не должно быть пропущенных лет. is_run=true--техническая переменная --- function finam_parser(paper)--функция парсера giga_table={}--создаём пустую таблицу for i=first_year,last_year,1 do--крутим цикл с первого заданного года по последнего. local tmp_path=getScriptPath().."\\"..paper.."_"..i..".txt"--это путь к файлу с историей. getScriptPath получает путь, где лежит скрипт. В этой же папке лежат файлы с историей. Проверка есть ли такой файл, отключена. В моём рабочем роботе это делает функция path.exists. По умолчанию у вас её нет. Надо отдельно скачивать LuaForWindows. for line in io.lines(tmp_path) do--читаем файл с историей. Чтение идёт свечка за свечкой (строчка за строчкой) if string.find(line, "20") then--нам нужны только строчки, начинающиеся с цифры 20, (2018 например) new_line="{"..line.."}"--считали строку, превратили её в таблицу с помощью фигурных скобок и записали в переменную new_line local t = loadstring("local t = "..new_line.." return t")()--считали из строки мини-таблицу (свечку). if t[2]>100000 and t[2]<=184000 then--исключаем цены премаркета и пост-маркета. table.insert(giga_table,t)--вставляем свечу в создаваемую гигантскую таблицу giga_table end end end message(tmp_path.." полей в таблице="..#giga_table,1)--КВИК выдаст сообщение: путь к файлу и текущий размер таблицы giga_table end return giga_table--парсер возвращает удобную таблицу giga_table, с которой можно дальше работать. end function main()--основная функция КВИКа. finam_parser(ticker)--запускаем парсер с указанным тикером. message (ticker..": giga_table принята") message ("посчитаю что нибудь") max_range=0--задали переменную. Будем искать свечу, у которой наивысшее расстояние между high и low for i=1,#giga_table do local range=giga_table[i][4]-giga_table[i][5] if range>max_range then max_range=range data=giga_table[i][1] vremya=giga_table[i][2] end end message("Самая длинная свеча High-Low="..max_range.." была "..data.." "..vremya) message("The End") end function OnStop(s) --что делать при нажатии на кнопку "остановить" is_run=false--прерываем вечный цикл внутри main return 100--число возле return - это время в миллисекундах. Если выставить этот параметр, скрипт будет удобнее останавливаться (без подвисаний) end