Трейдерский Клуб

Общение о рынках, рисках и жизни. Без пиара и без рекламы. Здесь рады только своим.

Freeware US datafeed RT

Freeware US datafeed RT

Сообщение druidkgm » Пн авг 06, 2018 5:02 pm

С рынка:
https://iextrading.com/
НАпример, чтоб хзапросить дату по Эпл за последний месяц, надо подать запрос: https://api.iextrading.com/1.0/stock/aapl/chart/1m

(за год будет 1y)


Запросить полный список инструментов:
https://api.iextrading.com/1.0/ref-data/symbols


5 лет, 8 тысяч активов


рынки:
New York Stock Exchange
Nasdaq Global Select
NYSE Arca
NYSE American
NASDAQ Global Market
NASDAQ Capital Market
BATS Exchange


есть ограничение на 100 запросов в секунду
Код на питоне приаттачен
Код: Выделить всё
# -*- coding: utf-8 -*-
"""
Created on Mon Aug  6 19:57:08 2018

@author: Druid
"""

import pycurl
import requests
import json
import time
import os

def performMyMulti(tools_, time_frame = '1m'):
    '''
    Функция многопоточного скачивания. Принимает на вход список
    кодов инструментов для скачивания. Количество инструментов в этом
    списке не должно превышать 100шт.
    '''
    m = pycurl.CurlMulti()
    m.handles = []
    files = [] # список файлов для сохранения результатов

    start_ = time.time() # замер времени для расчета скорости, начальная точка
    # создание и настройка curl-объектов
    for tool_ in tools_:
        c = pycurl.Curl()
       
        # имя файла для сохранения результатов; файлы сохраняются в каталог data
        fileName = "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:
                break
        m.select(1.0)

    # очистка
    for c in m.handles:
        c.close()
        m.remove_handle(c)

    for f in files:
        f.close()

    m.close()
    del m.handles
    end_ = 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:
        continue

block = 80 #количество параллельных запросов (не более 100шт)

tools_count = len(tools)
print(u"Всего инструментов для скачивания: %d" % tools_count)
loops = tools_count / block # количество полных циклов (циклов по block запросов)
tail = tools_count % block # количество оставшихся запросов
tools_ok = 0 # общее количество выполненных запросов

start = time.time() # замер общего времени, начальная точка
for i in range(loops): # в цикле по всем полным циклам
    srez = tools[i*block:i*block+block:1] # формируем выборку из следующих block инструментов
    speed = performMyMulti(srez) # выполняем параллельное скачивание
    tools_ok += block
    print(u"готово %d из %d, скорость %f в сек" % (tools_ok, tools_count, speed))
if tail > 0: # "докачиваем" оставшиеся инструменты
    i += 1
    srez = tools[block*i:block*i+tail]
    speed = performMyMulti(srez)
    tools_ok += tail
    print(u"готово %d из %d, скорость %f в сек" % (tools_ok, tools_count, speed))
end = time.time() # замер общего времени, конечная точка
print(u"Всё скачали! Ушло %f сек" % (end-start))
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
druidkgm
Dr. Druid
 
Сообщения: 981
Зарегистрирован: Чт мар 03, 2011 5:14 am

Re: Freeware US datafeed RT

Сообщение zxweed » Ср авг 08, 2018 7:30 am

zxweed
 
Сообщения: 78
Зарегистрирован: Сб авг 24, 2013 5:25 pm

Re: Freeware US datafeed RT

Сообщение dowsurfer » Чт авг 16, 2018 10:30 pm

а какой минимальный таймфрейм?
dowsurfer
 
Сообщения: 8
Зарегистрирован: Вс янв 15, 2012 2:31 pm

Re: Freeware US datafeed RT

Сообщение druidkgm » Ср сен 05, 2018 8:08 am

eod
Аватара пользователя
druidkgm
Dr. Druid
 
Сообщения: 981
Зарегистрирован: Чт мар 03, 2011 5:14 am


Вернуться в PUB: Вопросы и Ответы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

cron