Найти в Дзене

Котировки акций: где найти и как скачать? Бесплатно

Читать на блоге: 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 тысяч активов, среди которых такие рынки как: Кстати, дневная история учит
Оглавление

Читать на блоге: 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/

Читайте также