Благодаря наводке @quant_trader (за что отдельное спасибо!), переписал свой первый скрипт из поста https://smart-lab.ru/blog/916765.php по выгрузке из терминала всех торгуемых бумаг. Теперь всё выполняется штатными средствами с помощью getClassSecurities.
Далее второй скрипт (из поста выше) выгружает из торгового терминала под закрытие дня (под закрытие основной, либо вечерней сессии — можно устанавливать, я делаю обе выгрузки) необходимые данные по всем бумагам списка.
Особенности запроса. Если ввести:
sec_list = getClassSecurities("TQBR")<br />message(sec_list)
то терминал выдаст строку, где через запятую будут все тикеры, при этом видим, что список не полон, обрывается на RTSB:
Как выяснилось, это связано только с ограничением самого терминала на вывод строки (не более 899 символов).
При этом если посмотреть длину строки, то будет видно, что символов больше:
sec_list = getClassSecurities("TQBR") message(tostring(string.len(sec_list)))
выдаст 1281
Разбив строку по запятым получим весь массив тикеров для дальнейшей работы:
sec_list = getClassSecurities("TQBR") ind = 1 for msec in string.gmatch(sec_list, "[^,]+") do message(ind..": "..msec) ind = ind + 1 end
Итого первый скрипт, который создавал файл с торгуемыми тикерами на C:\files\ получится следующим:
function main() message('[ = = = = = = = = = = start = = = = = = = = = = ]') datetime = os.date("!*t",os.time()) message('') message(os.date("%d.%m.%Y")) message('Начало работы скрипта '..os.date("%X",os.time())) DirectionSaveFile=tostring("C:\\files\\tickers.csv") my_csv=io.open(DirectionSaveFile,"w") sec_list = getClassSecurities("TQBR") -- тикеры в одну строчку ind = 1 -- индекс подсчета количество бумаг sprint = "" -- склейка массивов для вывода -- разбивка строки с тикерами for TIKER in string.gmatch(sec_list, "[^,]+") do -- запись в файл my_csv:write(TIKER.."\n") sprint = sprint..tostring(ind).."/ "..TIKER.." " ind = ind + 1 -- индекс бумаги if ind%5 == 1 then message(sprint) sprint = "" end sleep(5) end if sprint ~= "" then message(sprint) end -- -- закрытие файла my_csv:flush() my_csv:close() message('Завершение работы скрипта '.. os.date("%X",os.time())) message('Общее количество торгуемых бумаг : '..tostring(ind - 1)) message("[ = = = = = = = = = = end = = = = = = = = = = ]") end
В таком варианте он исключает минусы предыдущего скрипта, в который могли не попасть бумаги с нестандартными тикерами (вроде VEON-RX).
Второй скрипт без изменений, запускается после данного.
Их можно объединить, либо сделать вызов одного скрипта из другого, но мне удобнее делать это пошагово: сперва один, потом второй, чтобы контролировать процесс. Плюс иногда нужны не все бумаги, тогда в полученном csv файле в Excel можно оставить список необходимых бумаг, второй скрипт сделает выгрузку только по нему.
Оба скрипта с комментариями на github (кодировка Windows-1251).
теги: выгрузки тикеров штатными средствами квика через getClassSecurities, кружок авиамоделизма.