0Pricing
AI Agents · Lektion

Integration von Marktdaten-APIs

Alpha Vantage, Yahoo Finance und Polygon.io für Echtzeit- und historische Daten.

Integration von Marktdaten-APIs ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Marktdaten in Finanzagenten

Finanzanalyseagenten benötigen Zugriff auf Echtzeit- und historische Marktdaten. Zu den gängigen Datentypen gehören OHLCV (Open/High/Low/Close/Volume), Veröffentlichungstermine von Geschäftszahlen, fundamentale Kennzahlen und Optionsketten.

Mehrere APIs stellen diese Daten bereit: yfinance (kostenlos, Yahoo Finance), Polygon.io (kostenpflichtig, zuverlässig) und Alpha Vantage (kostenlose Stufe verfügbar).

yfinance: Historische Kursdaten

yfinance kapselt die Yahoo-Finance-API und ist der schnellste Einstieg. Ticker.history() gibt einen pandas-DataFrame mit OHLCV-Daten zurück.

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: Benutzerdefinierte Zeiträume

Verwenden Sie die Parameter start und end für benutzerdefinierte Zeiträume oder interval für Intraday-Daten (1m, 5m, 1h). Beachten Sie, dass Intraday-Daten je nach Intervall auf die letzten 60 Tage begrenzt sind.

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 stellt professionelle Marktdaten mit höheren Ratenlimits und einer zuverlässigeren Verfügbarkeit als kostenlose Quellen bereit. Verwenden Sie die API für Finanzagenten in Produktionsumgebungen.

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 bietet eine kostenlose Stufe (25 Aufrufe pro Tag) und eine kostenpflichtige Stufe. Der Endpunkt TIME_SERIES_DAILY gibt OHLCV-Daten mit optional angepassten Kursen zurück.

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, ...}}

Ratenlimits und Wiederholungslogik

Alle Marktdaten-APIs setzen Ratenlimits durch. Wenn Sie diese überschreiten, erhalten Sie den Fehler 429 (Too Many Requests). Implementieren Sie immer exponentielles Backoff und halten Sie die Limits ein.

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)

Marktdaten zwischenspeichern

Historische Daten sind unveränderlich – der Schlusskurs von gestern ändert sich nicht mehr. Speichern Sie die Daten zwischen, um redundante API-Aufrufe zu vermeiden. Verwenden Sie einen einfachen Festplatten-Cache mit einem Schlüssel aus (Ticker, Zeitbereich).

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'))

Handelszeiten und Marktlücken berücksichtigen

Die Märkte sind an Wochenenden und Feiertagen geschlossen. Zeiträume, die handelsschlussfreie Tage umfassen, weisen daher Lücken in den Daten auf. Erkennen und behandeln Sie diese Lücken immer, statt von durchgängigen Tagesdaten auszugehen.

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)

Ein Marktdaten-Tool für Agenten erstellen

Registrieren Sie einen Marktdaten-Abruf als Agent-Tool. Das LLM kann es aufrufen, um Daten abzurufen, und anschließend ein weiteres Tool (zur Analyse) verwenden, um das Ergebnis zu verarbeiten.

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)})

Fundamentaldaten aus yfinance

Neben Kursdaten stellt yfinance auch Fundamentaldaten bereit: Kurs-Gewinn-Verhältnis, Gewinn je Aktie, Marktkapitalisierung und mehr. Fundamentaldaten erweitern die Analyse eines Agenten über die reine Kursentwicklung hinaus.

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'))

Fehlerbehandlung: Dekotierte und ungültige Ticker

Nicht alle Tickersymbole sind gültig oder werden derzeit gehandelt. Für ein dekotiertes Unternehmen wird eine leere Historie zurückgegeben. Validieren Sie die Antwort immer, bevor Sie mit der Analyse fortfahren.

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

Welche Daten gibt die Ausgabegröße „compact“ im Alpha-Vantage-Endpunkt TIME_SERIES_DAILY zurück?

Für die Verwaltung von Bandbreite, Latenz und API-Kontingenten in Finanzagenten ist es wichtig, die Parameter für die Ausgabegröße von APIs zu verstehen.

Zusammenfassung zur Integration von Marktdaten-APIs

Verwenden Sie yfinance für schnelles Prototyping (kostenlos), Polygon.io für die Produktion (zuverlässig, kostenpflichtig) und Alpha Vantage als Option mit kostenloser Stufe. Implementieren Sie immer Ratenbegrenzung, Festplatten-Caching für historische Daten und Lückenerkennung für Nicht-Handelstage.

Stellen Sie den Datenabruf als Agent-Tool bereit, damit das LLM bei Bedarf Daten anfordern kann.

Häufig gestellte Fragen

Ist die Lektion „Integration von Marktdaten-APIs“ kostenlos?

Ja — der vollständige Text von „Integration von Marktdaten-APIs“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Agents-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Integration von Marktdaten-APIs“?

Alpha Vantage, Yahoo Finance und Polygon.io für Echtzeit- und historische Daten. Du übst AI Agents mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Agents zu starten?

Keine Vorkenntnisse erforderlich. AI Agents auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Integration von Marktdaten-APIs“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Agents-Lektion Code schreiben und ausführen?

Ja. Jede AI Agents-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Integration von Marktdaten-APIs
  2. Tools für Agenten zur Portfolioanalyse
  3. Leitplanken für Risiko und Compliance
  4. Entscheidungen von Agenten backtesten
← Zurück zu AI Agents