0Pricing
AI Agents · Leçon

Intégration d’API de données de marché

Alpha Vantage, Yahoo Finance et Polygon.io pour les données en temps réel et historiques.

Intégration d’API de données de marché est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.

Données de marché dans les agents financiers

Les agents d’analyse financière doivent accéder aux données de marché en temps réel et aux données historiques. Les types de données courants comprennent les données OHLCV (Ouverture/Haut/Bas/Clôture/Volume), les dates de publication des résultats, les ratios fondamentaux et les chaînes d’options.

Plusieurs interfaces de programmation fournissent ces données : yfinance (gratuite, Yahoo Finance), Polygon.io (payante, fiable) et Alpha Vantage (formule gratuite disponible).

yfinance : données historiques de prix

yfinance encapsule l’interface de programmation de Yahoo Finance et constitue le moyen le plus rapide de commencer. Ticker.history() renvoie un DataFrame pandas contenant des données OHLCV.

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 : plages de dates personnalisées

Utilisez les paramètres start et end pour définir des plages de dates personnalisées, ou interval pour les données intrajournalières (1m, 5m, 1h). Notez que les données intrajournalières sont limitées aux 60 derniers jours, selon l’intervalle.

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

Interface REST de Polygon.io

Polygon.io fournit des données de marché de niveau professionnel, avec des limites de débit plus élevées et une disponibilité plus fiable que les sources gratuites. Utilisez-le pour les agents financiers destinés à la production.

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 propose une formule gratuite (25 appels par jour) et une formule payante. Le point de terminaison TIME_SERIES_DAILY renvoie des données OHLCV, avec la possibilité d’utiliser des prix ajustés.

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

Limites de débit et logique de nouvelle tentative

Toutes les interfaces de programmation de données de marché imposent des limites de débit. Si vous les dépassez, vous obtenez l’erreur 429 (Trop de requêtes). Implémentez toujours une temporisation exponentielle et respectez ces limites.

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)

Mise en cache des données de marché

Les données historiques sont immuables : le cours de clôture d’hier ne change jamais. Mettez-les en cache pour éviter les appels d’interface de programmation redondants. Utilisez un cache disque simple indexé par (symbole, plage de dates).

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

Gérer les heures de cotation et les lacunes du marché

Les marchés sont fermés les week-ends et les jours fériés. Les plages de dates qui couvrent des jours sans cotation présenteront des lacunes dans les données. Détectez et traitez toujours ces lacunes au lieu de supposer que les données quotidiennes sont continues.

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)

Créer un outil de données de marché pour les agents

Enregistrez un récupérateur de données de marché comme outil d’agent. Le LLM peut l’appeler pour récupérer des données, puis utiliser un autre outil d’analyse pour traiter le résultat.

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

Données fondamentales provenant de yfinance

Au-delà des données de prix, yfinance fournit des données fondamentales : ratio cours/bénéfice, bénéfice par action, capitalisation boursière et bien plus encore. Les données fondamentales enrichissent l’analyse d’un agent au-delà de la seule évolution des prix.

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

Gestion des erreurs : symboles boursiers radiés ou invalides

Tous les symboles boursiers ne sont pas valides ou ne sont pas actuellement négociés. Une entreprise radiée renvoie un history vide. Validez toujours la réponse avant de poursuivre l’analyse.

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

Que renvoie la valeur « compact » du paramètre de taille de sortie dans le point de terminaison TIME_SERIES_DAILY d’Alpha Vantage ?

Il est important de comprendre les paramètres de taille de sortie d’une interface de programmation pour gérer la bande passante, la latence et les quotas d’appels des agents financiers.

Récapitulatif de l’intégration des interfaces de programmation de données de marché

Utilisez yfinance pour le prototypage rapide (gratuit), Polygon.io pour la production (fiable et payant) et Alpha Vantage comme solution avec formule gratuite. Implémentez toujours une limitation du débit, une mise en cache sur disque des données historiques et une détection des lacunes pour les jours sans cotation.

Exposez la récupération sous forme d’outil d’agent afin que le LLM puisse demander des données lorsque cela est nécessaire.

Questions Fréquemment Posées

La leçon « Intégration d’API de données de marché » est-elle gratuite ?

Oui — le texte complet de « Intégration d’API de données de marché » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Intégration d’API de données de marché » ?

Alpha Vantage, Yahoo Finance et Polygon.io pour les données en temps réel et historiques. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer AI Agents ?

Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Intégration d’API de données de marché » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?

Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Intégration d’API de données de marché
  2. Outils d’agent pour l’analyse de portefeuille
  3. Garde-fous de risque et de conformité
  4. Rétrosimulation des décisions de l’agent
← Retour à AI Agents