Блог им. morefinances

Получение тикеров торгуемых бумаг через getClassSecurities

Благодаря наводке @quant_trader (за что отдельное спасибо!), переписал свой первый скрипт из поста https://smart-lab.ru/blog/916765.php по выгрузке из терминала всех торгуемых бумаг. Теперь всё выполняется штатными средствами с помощью getClassSecurities.

Далее второй скрипт (из поста выше) выгружает из торгового терминала под закрытие дня (под закрытие основной, либо вечерней сессии — можно устанавливать, я делаю обе выгрузки) необходимые данные по всем бумагам списка.

Особенности запроса. Если ввести:

sec_list = getClassSecurities("TQBR")<br />message(sec_list)

то терминал выдаст строку, где через запятую будут все тикеры, при этом видим, что список не полон, обрывается на RTSB:

Получение тикеров торгуемых бумаг через getClassSecurities

Как выяснилось, это связано только с ограничением самого терминала на вывод строки (не более 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, кружок авиамоделизма.

★8
3 комментария
Хорошо, ну выгрузили вы список бумаг, а дальше что? Зачем он вам? Могли бы скачать с сайта биржи или ещё кучи мест.
avatar
Михаил К., в самом первом предложении есть ссылка на первый пост, где указано зачем.
avatar
Спасибо большое, давно искал нечто подобное!
avatar

теги блога alfacentavra

....все тэги



UPDONW
Новый дизайн