Tekoälyagentit · Oppitunti

Markkinadatan API-integraatio

Alpha Vantage, Yahoo Finance ja Polygon.io reaaliaikaiseen ja historialliseen dataan.

Oppitunti 1/413 vaihetta

Markkinadatan API-integraatio on ilmainen Tekoälyagentit-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Tekoälyagentit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.

Markkinadata talousalan agenteissa

Talousanalyysiin tarkoitetut agentit tarvitsevat reaaliaikaista ja historiallista markkinadataa. Yleisiä datatyyppejä ovat OHLCV (Open/High/Low/Close/Volume), tulosjulkistusten päivämäärät, fundamentaaliset tunnusluvut ja optioketjut.

Useat API:t tarjoavat näitä tietoja: yfinance (maksuton, Yahoo Finance), Polygon.io (maksullinen ja luotettava) sekä Alpha Vantage (maksuton käyttöoikeustaso saatavilla).

yfinance: historialliset hintatiedot

yfinance käärii Yahoo Finance -API:n, ja se on nopein tapa aloittaa. Ticker.history() palauttaa OHLCV-tiedot pandas DataFrame -muodossa.

import yfinance as yf

ticker = yf.Ticker('AAPL')

# 1 year of daily data
history = ticker.history(period='1y')
print(history.tail(3))
#                  Open        High         Low       Close    Volume
# Date
# 2026-05-27  189.1500  190.3200  188.9200  190.0500  55234000
# 2026-05-28  190.4200  191.5600  189.7800  191.1200  62345000
print(f'Rows: {len(history)}')

yfinance: mukautetut päivämäärävälit

Käyttäkää start- ja end-parametreja mukautettuihin päivämääräväleihin tai interval-parametria päivänsisäisiin tietoihin (1m, 5m, 1h). Huomioikaa, että päivänsisäiset tiedot ovat aikavälistä riippuen saatavilla vain viimeiseltä 60 päivältä.

import yfinance as yf

ticker = yf.Ticker('MSFT')

# Custom date range
history = ticker.history(start='2024-01-01', end='2024-12-31')
print(f'Trading days in 2024: {len(history)}')

# Batch multiple tickers
tickers = yf.download(['AAPL', 'MSFT', 'GOOGL'],
                       start='2025-01-01', end='2025-12-31')
print(tickers['Close'].head())

Polygon.io REST API

Polygon.io tarjoaa ammattitason markkinadataa, suuremmat kutsurajat ja luotettavamman käytettävyyden kuin maksuttomat lähteet. Käyttäkää sitä tuotantokäyttöön tarkoitetuissa talousagenteissa.

import requests

POLYGON_KEY = 'YOUR_POLYGON_API_KEY'

def get_polygon_daily(ticker: str, from_date: str, to_date: str) -> list[dict]:
    url = f'https://api.polygon.io/v2/aggs/ticker/{ticker}/range/1/day/{from_date}/{to_date}'
    resp = requests.get(url, params={'apiKey': POLYGON_KEY, 'limit': 365})
    resp.raise_for_status()
    data = resp.json()
    return data.get('results', [])

bars = get_polygon_daily('AAPL', '2025-01-01', '2025-12-31')
print(f'Bars returned: {len(bars)}')
if bars:
    print('Latest close:', bars[-1]['c'])

Alpha Vantage TIME_SERIES_DAILY

Alpha Vantage tarjoaa maksuttoman käyttöoikeustason (25 kutsua päivässä) ja maksullisen tason. TIME_SERIES_DAILY-päätepiste palauttaa OHLCV-tiedot sekä valinnaisesti oikaistut hinnat.

import requests

ALPHA_KEY = 'YOUR_ALPHA_VANTAGE_KEY'

def get_alpha_vantage_daily(symbol: str, outputsize: str = 'compact') -> dict:
    # outputsize: 'compact' (100 days) or 'full' (20+ years)
    resp = requests.get('https://www.alphavantage.co/query', params={
        'function':   'TIME_SERIES_DAILY_ADJUSTED',
        'symbol':     symbol,
        'outputsize': outputsize,
        'apikey':     ALPHA_KEY
    })
    resp.raise_for_status()
    data = resp.json()
    series = data.get('Time Series (Daily)', {})
    return series   # dict: {date_str: {open, high, low, close, volume, ...}}

Kutsurajat ja uudelleenyrityslogiikka

Kaikki markkinadata-API:t käyttävät kutsurajoja. Jos ylitätte ne, saatte vastauksen 429 (Too Many Requests). Toteuttakaa aina eksponentiaalinen perääntyminen ja noudattakaa rajoja.

import time, requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

def make_rate_limited_session(calls_per_minute: int = 5) -> requests.Session:
    session = requests.Session()
    retry = Retry(
        total=3,
        backoff_factor=2,         # 1s, 2s, 4s waits
        status_forcelist=[429, 500, 502, 503, 504]
    )
    adapter = HTTPAdapter(max_retries=retry)
    session.mount('https://', adapter)
    session._calls_per_min = calls_per_minute
    session._min_interval  = 60.0 / calls_per_minute
    session._last_call     = 0.0
    return session

def rate_limited_get(session, url, **kwargs):
    elapsed = time.time() - session._last_call
    if elapsed < session._min_interval:
        time.sleep(session._min_interval - elapsed)
    session._last_call = time.time()
    return session.get(url, **kwargs)

Markkinadatan välimuistitus

Historiallinen data on muuttumatonta — eilisen päätöskurssi ei muutu. Tallentakaa se välimuistiin tarpeettomien API-kutsujen välttämiseksi. Käyttäkää yksinkertaista lev välimuistia, jonka avain muodostuu parista (ticker, date_range).

import hashlib, json, os

CACHE_DIR = '/tmp/market_cache'
os.makedirs(CACHE_DIR, exist_ok=True)

def cache_key(ticker: str, start: str, end: str) -> str:
    return hashlib.md5(f'{ticker}_{start}_{end}'.encode()).hexdigest()

def get_cached(ticker: str, start: str, end: str):
    key = cache_key(ticker, start, end)
    path = os.path.join(CACHE_DIR, f'{key}.json')
    if os.path.exists(path):
        with open(path) as f:
            return json.load(f)
    return None

def set_cached(ticker: str, start: str, end: str, data):
    key = cache_key(ticker, start, end)
    path = os.path.join(CACHE_DIR, f'{key}.json')
    with open(path, 'w') as f:
        json.dump(data, f)

if __name__ == '__main__':
    set_cached('AAPL', '2024-01-01', '2024-01-31', {'close': [150, 151, 149]})
    cached = get_cached('AAPL', '2024-01-01', '2024-01-31')
    print('Cached data for AAPL:', cached)
    print('Cache miss for MSFT:', get_cached('MSFT', '2024-01-01', '2024-01-31'))

Kaupankäyntiaikojen ja markkinakatkosten käsittely

Markkinat ovat suljettuina viikonloppuisin ja pyhäpäivinä. Muiden kuin kaupankäyntipäivien yli ulottuvissa päivämääräväleissä datassa on aukkoja. Tunnistakaa ja käsitelkää nämä aukot aina sen sijaan, että olettaisitte päivittäisen datan olevan jatkuvaa.

import pandas as pd
from pandas.tseries.offsets import BDay

def detect_gaps(history: pd.DataFrame) -> list[str]:
    if history.empty:
        return []
    date_range = pd.date_range(
        start=history.index.min(),
        end=history.index.max(),
        freq=BDay()  # Business days only
    )
    missing = date_range.difference(history.index)
    return [str(d.date()) for d in missing]

import yfinance as yf
history = yf.Ticker('AAPL').history(start='2024-12-23', end='2025-01-07')
gaps = detect_gaps(history)
print('Missing business days (holidays):', gaps)

Markkinadatatyökalun rakentaminen agenteille

Rekisteröikää markkinadatan hakija agentin työkaluksi. LLM voi kutsua sitä tietojen hakemiseen ja käyttää sen jälkeen toista työkalua (analyysia) tuloksen käsittelyyn.

import yfinance as yf, json

def get_market_data_tool(ticker: str, period: str = '1y') -> str:
    cached = get_cached(ticker, period, 'yfinance')
    if cached:
        return json.dumps(cached)
    try:
        hist = yf.Ticker(ticker).history(period=period)
        if hist.empty:
            return json.dumps({'error': f'No data for {ticker}'})
        result = {
            'ticker':     ticker,
            'period':     period,
            'start':      str(hist.index.min().date()),
            'end':        str(hist.index.max().date()),
            'latest_close': float(hist['Close'].iloc[-1]),
            'pct_change_ytd': float((hist['Close'].iloc[-1] / hist['Close'].iloc[0] - 1) * 100),
            'rows':       len(hist)
        }
        set_cached(ticker, period, 'yfinance', result)
        return json.dumps(result)
    except Exception as e:
        return json.dumps({'error': str(e)})

Fundamentaaliset tiedot yfinance-palvelusta

Hintatietojen lisäksi yfinance tarjoaa fundamentaalisia tietoja, kuten P/E-luvun, osakekohtaisen tuloksen ja markkina-arvon. Fundamentaaliset tiedot rikastavat agentin analyysia pelkkää hintakehitystä laajemmaksi.

import yfinance as yf

ticker = yf.Ticker('AAPL')
info  = ticker.info

print('Market Cap:      ', info.get('marketCap'))
print('P/E Ratio:       ', info.get('trailingPE'))
print('EPS:             ', info.get('trailingEps'))
print('52-Week High:    ', info.get('fiftyTwoWeekHigh'))
print('52-Week Low:     ', info.get('fiftyTwoWeekLow'))
print('Dividend Yield:  ', info.get('dividendYield'))
print('Analyst Target:  ', info.get('targetMeanPrice'))

Virheenkäsittely: listalta poistuneet ja virheelliset tickerit

Kaikki ticker-symbolit eivät ole kelvollisia tai parhaillaan kaupankäynnin kohteena. Listalta poistettu yhtiö palauttaa tyhjän historian. Vahvistakaa vastaus aina ennen analyysin jatkamista.

import yfinance as yf

def safe_fetch(ticker_symbol: str, period: str = '1y') -> dict:
    try:
        ticker = yf.Ticker(ticker_symbol)
        history = ticker.history(period=period)

        if history.empty:
            return {
                'error': f'No data for {ticker_symbol}. May be delisted or invalid.',
                'ticker': ticker_symbol
            }
        return {
            'ticker':       ticker_symbol,
            'latest_close': float(history['Close'].iloc[-1]),
            'data_start':   str(history.index.min().date()),
            'bars':         len(history)
        }
    except Exception as e:
        return {'error': str(e), 'ticker': ticker_symbol}

print(safe_fetch('AAPL'))    # valid
print(safe_fetch('INVALID')) # returns error dict

Mitä Alpha Vantage TIME_SERIES_DAILY -päätepisteen ”compact” outputsize palauttaa?

API:n tulosteen kokoparametrien ymmärtäminen on tärkeää kaistanleveyden, viiveen ja talousagenttien API-kiintiöiden hallinnassa.

Markkinadata-API:en integroinnin yhteenveto

Käyttäkää yfinance-palvelua nopeaan prototyyppien kehitykseen (maksuton), Polygon.io-palvelua tuotantokäyttöön (luotettava ja maksullinen) ja Alpha Vantage -palvelua maksuttoman käyttöoikeustason vaihtoehtona. Toteuttakaa aina kutsurajoitus, käyttäkää historiallisen datan yhteydessä levyvälimuistia ja tunnistakaa aukot muiden kuin kaupankäyntipäivien kohdalta.

Tarjotkaa tietojen haku agentin työkaluna, jotta LLM voi pyytää tietoja tarvittaessa.

Aloita maksutta

Opi Tekoälyagentit tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
60
Oppitunnit
239

Usein kysytyt kysymykset

Onko oppitunti ”Markkinadatan API-integraatio” ilmainen?

Kyllä – oppitunnin ”Markkinadatan API-integraatio” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Tekoälyagentit-kurssin, päivitä CoddyKit PROhon. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Markkinadatan API-integraatio”?

Alpha Vantage, Yahoo Finance ja Polygon.io reaaliaikaiseen ja historialliseen dataan. Harjoittelet Tekoälyagentit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Tekoälyagentit-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyagentit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Markkinadatan API-integraatio”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Tekoälyagentit-oppitunnilla?

Kyllä. Jokainen Tekoälyagentit-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Markkinadatan API-integraatio
  2. Salkkuanalyysin agenttityökalut
  3. Riskien ja vaatimustenmukaisuuden suojakaiteet
  4. Agentin päätösten backtestaus
← Takaisin: Tekoälyagentit