Блог им. morefinances
Благодаря наводке @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, кружок авиамоделизма.



