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 dictQue 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
- Intégration d’API de données de marché
- Outils d’agent pour l’analyse de portefeuille
- Garde-fous de risque et de conformité
- Rétrosimulation des décisions de l’agent