eDoK
eDoK личный блог
09 апреля 2023, 17:57

Intraday данные

Понадобились мне минутки по SPY в формате csv для проверки некоторых теорий. Ожидаемо дневки любой Yahoo выдает, а с минутками все сложнее. Платных подписок на Market Data от eSignal, Iqfeed у меня нет, поэтому пошел за советом к ChatGPT.

Intraday данные
Отлично, нам бесплатно — идем по ссылке по п.2.

Там База данных с интерфейсом в мир по API. За бесплатно дают: Our standard API call frequency is 5 calls per minute and 500 calls per day. Меня устраивает, только вот интрадейные данные выдает порциями по 1 месяцу и максимальной глубиной в 2 года. Глубина норм, а собирать 24 файла для каждого тикера не очень.

Two years of minute-level intraday data contains over 2 million data points, which can take up to Gigabytes of memory. To ensure optimal API response speed, the trailing 2 years of intraday data is evenly divided into 24 «slices» — year1month1, year1month2, year1month3, ..., year1month11, year1month12, year2month1, year2month2, year2month3, ..., year2month11, year2month12. Each slice is a 30-day window, with year1month1 being the most recent and year2month12 being the farthest from today. By default, slice=year1month1.

Идем назад к ChatGPT и просим помочь:

Intraday данные

Потом еще 3-4 часа на пошаговое уточнение постановки задачи, исправление багов и в результате получаем вполне рабочий код для Pyton:

import csv
import requests
import time
from datetime import datetime, timedelta

api_key = "YOUR_API_KEY"
symbols = ["SPY", "MSFT", "AMZN"]
interval = "1min"
now = datetime.now()
start_date = (now.replace(year=now.year-2)+timedelta(days=1)).strftime("%Y-%m-%d")
end_date = now.strftime("%Y-%m-%d")

for symbol in symbols:
    file_name = f"{symbol}_{start_date}_{end_date}.csv"
    with open(file_name, mode='w', newline='') as csv_file:
        writer = csv.writer(csv_file)
        for year in range(1, 3):
            for month in range(1, 13):
                if year == 2 and month > 12:
                    break
                csv_url = f"https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY_EXTENDED&symbol={symbol}&interval={interval}&slice=year{year}month{month}&apikey={api_key}"
                with requests.Session() as s:
                    while True:
                        download = s.get(csv_url)
                        decoded_content = download.content.decode('utf-8')
                        if "Our standard API call frequency is 5 calls per minute and 500 calls per day" in decoded_content:
                            print("API call limit exceeded, waiting for 60 seconds...")
                            time.sleep(60)
                        else:
                            break
                    cr = csv.reader(decoded_content.splitlines(), delimiter=',')
                    my_list = list(cr)
                    writer.writerows(my_list)
                time.sleep(15)
При запуске через некоторое время получаем csv файлы с минутками по указанным тикерам. Ну там еще нужно немного их причесать, лишние заголовки поубирать и доп. торги отсеять если не нужны, но работать уже можно.

PS: возможно это «велосипед» и кто-то поделится более изящным решением данной задачи
8 Комментариев
  • DrugGoracio
    09 апреля 2023, 18:22

    А можешь приоткрыть завесу: чего ты проверяешь сейчас?

    Есть закон перехода количественных изменений в качественные и на сегодняшний день их накопилось столько, что любая логика (если она там  и была, что не факт!☝️), а равно статистическая взаимосвязь разрушается по экспоненте…

    Разве только ты хочешь проанализировать короткие данные в критические дни, как то черный понедельник 1987 или август 2011.

    Но скорее всего все это и так разобрано под микроскопом.

    Извини, что не даю совета🤷‍♂️

    Но правда интересно: что там хочешь найти на старых минутках?

  • Mr Big Kos
    10 апреля 2023, 11:28
    Прикольно. Слава чату джипити!
  • Андрей Стрижак
    10 апреля 2023, 15:15
    На самом деле пугает это все. Это уже все очень близко к реальному разуму, а учитывая что прогресс в микроэлектронике идет дальше семимильными шагами, и как таковых пределы вычислительных возможностей пока не просматриваются, даже наоборот, то очень скоро мы можем получить разум, значительно превосходящий нас. И это будет плохо во всех смыслах — он будет сильнее человека в деятельности, которую наверное человек более всего ассоциирует с тем, что называется быть человеком, и отличает нас от животных. Это будет удар по эго людей.  Потом, этот интеллект когда-то найдет способ выбраться из под контроля, причем так, что мы даже этого и не заметим, или наоборот, поможем. Это как шахматист считающий на 20 ходов, против того, кто считает на три хода — математически, шансов нет. Причем эта штука похоже сможет заменить не таксистов там и продавцов, как беспокоились недавно теоретики об умирающих в будущем профессиях, а вообще почти всех, в т.ч. самый высокоинтеллектуальный труд. Да, этот «интеллект» еще интегрально наверное не превосходит человеческий, но очевидно, что создание моделей в 10-100 раз более мощных — вопрос ближайшего десятилетия. И как-то не хорошо коррелируют потрясающие успехи человечества в области ИИ, с действиями глобалистов. Как-бы не оказалось, что всех нас уже списали в планах. Это все может очень реально и очень опасно, причем почти для всех. В молодости, в 90-е я сам интересовался сильно данной тематикой, просто была очень интересна эта идея как таковая. Но сейчас понимаешь, что люди как правило не справляются со своими исчадиями ада. Через несколько итераций эта штука будет умнее любого ученого, политика, мыслителя. Мы будем бегать к ней за советами, а сами — тупеть.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн