Читать на блоге: https://daytradergt.com/kotirovki-akcij-gde-najti-i-kak-skachat-besplatno/
Многие расстроились, когда Yahoo.Finance закрыл все лазейки для получения бесплатных котировок. Но к всеобщему счастью, уже есть альтернативы бесплатных данных. В этот раз мы скачаем бесплатную дневную историю с биржи IEX для ~8 тысяч американских активов примерно за ~2 минуты. Поможет нам в этом Python 2.7. А рассказывать будет Роман Щеголихин.
Пытливые умы на сайте биржи могут найти бесплатную историю тиков за предыдущие 10 месяцев в формате pcap (tcpdump).
На бирже IEX совершается примерно ~2.5% оборота акций, что необходимо учесть. Тики не дадут построить идеальную историю изменения цены из-за недостатка данных по остальным биржам.
В отличие от многих зарубежных поставщиков данных, IEX (https://iextrading.com/) предоставляет исторические данные бесплатно. Дневная история за 5 последних лет доступна для более чем 8 тысяч активов, среди которых такие рынки как:
- New York Stock Exchange
- Nasdaq Global Select
- NYSE Arca
- NYSE American
- NASDAQ Global Market
- NASDAQ Capital Market
- BATS Exchange
Кстати, дневная история учитывает торги на всех американских биржах, в отличии от тиков. RAA.
Этот брокер имеет простой API, и главное, бесплатный. Даже регистрироваться не надо. Правда, есть ограничение на 100 запросов в секунду.
Документация по API: https://iextrading.com/developer/docs/
Список доступных активов: https://api.iextrading.com/1.0/ref-data/symbols
Запрос по нужному активу выглядит так: https://api.iextrading.com/1.0/stock/aapl/chart/1m
Это запрос по Apple inc. дневной истории за последний месяц. Котировки отрегулированны на сплиты и дивиденды.
Ну что же, список котировок есть, API есть. Как всё это дело скачать и побыстрей? Ниже скрипт на Python 2.7 с использованием технологии MultiCurl и библиотеки pycurl.
И на загрузку более 8 тысяч активов за месяц у меня уходит всего ~110 секунд. Здорово!
Код в студию
Список тикеров получаем “на лету” из IEX и берем из них только работающие инструменты. Замеры скорости приведены для красоты. Основную работу выполняет функция [code]performMyMulti[/code]. В данном примере она пачками по [code]block[/code] тикеров параллельно выкачивает историю дневок за последние 30 дней. В качестве пачки на вход этой функции поступает список [code]tools_[/code], который содержит строковые коды инструментов. Второй параметр этой функции, [code]time_frame[/code] — задает глубину. Чтобы скачать котировки за 5 лет, задайте [code]’5y’[/code]. Результаты складываются в текстовые файлы в каталог data. Данные в них — это объекты json, которые дальше можно парсить и использовать по назначению.
[raaAdSenceArticle]
[code python]
import pycurlimport requestsimport jsonimport timeimport osdef performMyMulti(tools_, time_frame = ‘1m’):”’Функция многопоточного скачивания. Принимает на вход списоккодов инструментов для скачивания. Количество инструментов в этомсписке не должно превышать 100шт.”’m = pycurl.CurlMulti()m.handles = []files = [] # список файлов для сохранения результатовstart_ = time.time() # замер времени для расчета скорости, начальная точка# создание и настройка curl-объектовfor tool_ in tools_:c = pycurl.Curl()# имя файла для сохранения результатов; файлы сохраняются в каталог datafileName = “data%s%s_%s.txt” % (os.sep, tool_, time_frame)fileName = fileName.replace(‘*’, ‘_’)f = open(fileName, “wb”)files.append(f) # файл добавляется в список, чтобы потом закрыть егоc.setopt(c.WRITEDATA, f) # кроме файла здесь можно указывать функцию, но файл нам наиболее удобенurl = “https://api.iextrading.com/1.0/stock/%s/chart/%s” % (tool_, time_frame)c.setopt(pycurl.URL, url)m.add_handle(c)m.handles.append(c)num_handles = len(m.handles)while num_handles:while 1:# выполнить запросыret, num_handles = m.perform()if ret != pycurl.E_CALL_MULTI_PERFORM:breakm.select(1.0)# очисткаfor c in m.handles:c.close()m.remove_handle(c)for f in files:f.close()m.close()del m.handlesend_ = time.time() # замер времени для расчета скорости, конечная точкаreturn len(tools_) / (end_–start_) # скорость в секунду# скачиваем список инструментовr = requests.get(‘https://api.iextrading.com/1.0/ref-data/symbols’)data = json.loads(r.text)tools = [] #список кодов инструментов# выбираем коды инструментов в отдельный массивfor tool in data:try:if tool[‘isEnabled’] is True:tools.append(tool[‘symbol’])except:continueblock = 80 #количество параллельных запросов (не более 100шт)tools_count = len(tools)print(u“Всего инструментов для скачивания: %d” % tools_count)loops = tools_count / block # количество полных циклов (циклов по block запросов)tail = tools_count % block # количество оставшихся запросовtools_ok = # общее количество выполненных запросовstart = time.time() # замер общего времени, начальная точкаfor i in range(loops): # в цикле по всем полным цикламsrez = tools[i*block:i*block+block:1] # формируем выборку из следующих block инструментовspeed = performMyMulti(srez) # выполняем параллельное скачиваниеtools_ok += blockprint(u“готово %d из %d, скорость %f в сек” % (tools_ok, tools_count, speed))if tail > : # “докачиваем” оставшиеся инструментыi += 1srez = tools[block*i:block*i+tail]speed = performMyMulti(srez)tools_ok += tailprint(u“готово %d из %d, скорость %f в сек” % (tools_ok, tools_count, speed))end = time.time() # замер общего времени, конечная точкаprint(u“Всё скачали! Ушло %f сек” % (end–start))
Заключение
Код можно адаптировать для скачивания минутной истории в реальном времени.
Также доступны тики в реальном времени через вебсокеты (websockets). Что делает данную биржу крайне ценной находкой.
Первым шагом в автоматизации трейдинга является разработка собственной торговой системы. Однако для того, чтобы протестировать механическую торговую систему (МТС) нужно где-то раздобыть котировки акций.
Напомню, что программа Wealth Lab позволяет самостоятельно делать торговые системы и тестировать их, используя исторические котировки акций. В нашем блоге ранее уже был пост, посвященный тому, как делать торговые системы в Wealth Lab с помощью программирования на языке C#.
Сегодня хочу рассказать – где найти исторические котировки акций и как их скачать для последующего анализа в программе Wealth Lab.
Как всегда существует несколько вариантов:
Вариант №1: котировки Финам
Самый привычный способ – зайти на сайт Финама по следующей ссылке: http://www.finam.ru/analysis/export/default.asp и там настроить экспорт необходимых Вам котировок. Большинство именно так и делают.
Но представьте, что будет, если Вы торгуете торговые системы с использованием нескольких десятков финансовых инструментов. Придется периодически заходить туда и тратить кучу времени на то, чтобы эти данные закачивать.
Вариант №2: Алор – сервер истории.
Разработчики механических торговых систем могут зайти по ссылке: http://www.alor-trade.ru/systems/history/ и воспользоваться алоровским сервером истории. Этот вариант появился относительно недавно.
Этот сервер предоставляет возможность по протоколу HTTP получить исторические котировки акций с основных торговых площадок России. Сервер легко интегрируется с аналитическими системами и МТС.
Большой плюс здесь в том, что теперь те, кто делает торговых роботов под алор (используя COM-объекты ATEAPI 6.x.150.211) могут настроить автоматическое получение истории котировок акций.
Для этого нужно воспользоваться таблицами HISTORY и HISTORY_DAILY.
Таблица HISTORY содержат информацию по историческим минутным данным (с периодом 1, 5, 10, 15, 20, 30, 60 и 1440 минут) по всем сделкам купли/продажи финансовых инструментов, совершенным в торговой системе.
Подробнее: 8 августа.ПолеТипНазначение
ID
Долго
Идентификатор строки
RECID
INT64
Идентификатор записи
Время
ВРЕМЯ
Время
Линеечку
BSTRТикер
Open
DOUBLE
Открытие
High
DOUBLE
Максимальная цена в периоде
Low
DOUBLE
Минимальная цена в периоде
Close
DOUBLE
Цена последней сделки в периоде
Volume
DOUBLE
Объем
период
Долго
Период, в минутах (возможные значения: 1, 5, 10, 15, 20, 30, 60, 1440)
Таблица HISTORY_DAILY содержат информацию по историческим дневным данным по всем сделкам купли/продажи финансовых инструментов, совершенным в торговой системе.
ПолеТипНазначение
ID
Долго
Идентификатор строки
RECID
INT64
Идентификатор записи
Время
ВРЕМЯ
Время
Линеечку
BSTRТикер
Open
DOUBLE
Открытие
High
DOUBLE
Максимальная цена в периоде
Low
DOUBLE
Минимальная цена в периоде
Close
DOUBLE
Цена последней сделки в периоде
Volume
DOUBLE
Объем
На основе данной информации можно настроить автоматическое получение данных. В общем, те, кому интересен этот вариант – заходите сюда: http://www.alorbroker.ru/technologies/at/ скачивайте терминал Алор Трейд с com объектами и вперёд.
Вариант №3: специальная программа для получения котировок акций owp.FDownloader
Этот вариант показался мне наиболее удобным, т.к. программа Fdownloader:
- Интуитивно понятна, проста в освоении и не требует навыков программирования;
- позволяет полностью автоматизировать получение котировок акций и затрачивать на эту рутинную работу минимум времени;
- Процесс получения данных можно настроить даже тогда, когда Вы пользуетесь прокси сервером;
- Данные можно получать и в формате *.csv и в формате wealth lab
- Автоматически присоединяет новые котировки акций к уже существующим ведя удобную базу данных
Сразу хочу сказать спасибо разработчикам данной программы. Почитать про них можно вот здесь: http://code.google.com/p/open-wealth-project/wiki/FDownloader
Скачать эту программу можно именно по этой ссылке. Если не получается – пишите vdv@finlabportal.ru – поможем.
Теперь по шагам – как организовать процесс получения исторических котировок акций:
Допустим, мы хотим получить часовые данные по наиболее ликвидным российским акциям с ММВБ: Газпром, Лукойл, Сбербанк
Для этого необходимо проделать следующие шаги:
Шаг №1:
Организация места на диске
На диске D: создаём специальный каталог, который называем MarketData
Внутри этого каталога делаем 3 подкаталога:
- CSV – здесь будут храниться котировки акций в формате CSV
- Downloader – здесь будет храниться сама программа загрузчик котировок акций и её настройки
- WL – здесь будут храниться котировки акций в формате Wealth Lab (WL4 Files)
Каталог должен выглядеть вот так:
Шаг №2:
В каталог Downloader копируем полученные при скачивании файлы.
В итоге получится вот такая картина:
Шаг №3:
Запускаем программу и настраиваем все данные
FDownloader
Нажимаем кнопку “Далее”
В появившемся окне нажимаем кнопку “Обновить” – чтобы скачать структуру данных.
После этого ставим галочки напротив тех инструментов, которые хотим получить.
И вновь нажимаем кнопку далее
Как результат – попадаем в 3-е окно, которое уже просто информирует нас о том, что делает программа.
Как результат – в папке D:\MarketData\CSV\1h\
Появятся данные в формате *.scv
А в папке: D:\MarketData\WL\1h\ММВБ Акции\
В формате *.wl
Теперь всё готово для анализа котировок акций в программах для технического анализа.
О том, как использовать эти котировки акций в программе wealth lab – расскажу в следующий раз.
https://daytradergt.com/kotirovki-akcij-gde-najti-i-kak-skachat-besplatno/