- Dati Grezzi (Raw Data): Mostrano il prezzo di chiusura effettivo del titolo, senza tenere conto di split azionari (divisione di azioni) o dividendi, che riducono il prezzo.
- Dati Aggiustati (Adjusted Data): Rettificano i prezzi passati per riflettere dividendi e split, offrendo una visione più accurata della performance storica, fondamentale per l’analisi a lungo termine e i backtest.
Analisi Dettagliata: Split e Dividendi nelle Serie Storiche
Come Vengono Gestiti i Dati
TradingView
Split:
- I dati sono adjusted (aggiustati) di default
- Gli split vengono retroattivamente applicati a tutta la serie storica
- Non fornisce facilmente accesso ai dati “raw” (non aggiustati)
- Es: uno split 2:1 dimezza tutti i prezzi storici precedenti
Dividendi:
- Generalmente i prezzi non sono aggiustati per i dividendi di default
- Alcuni feed premium potrebbero offrire dati total return adjusted
- Le date ex-dividend causano gap nei prezzi non aggiustati
Limitazioni:
- Difficile ottenere dati raw via API gratuita
- Non sempre chiaro quale aggiustamento è applicato
- Accesso API limitato per uso sistematico
yFinance (Yahoo Finance)
Split:
- Fornisce dati adjusted di default nella colonna “Close”
- La colonna “Adj Close” include aggiustamenti per split E dividendi
- Mantiene “Open”, “High”, “Low”, “Close” aggiustati solo per split
- Fornisce storico split separato accessibile
Dividendi:
- “Adj Close” applica l’aggiustamento backward per tutti i dividendi
- Mantiene uno storico separato dei dividendi pagati
- Accessibile via
ticker.dividendseticker.splits
Esempio pratico:
import yfinance as yf
ticker = yf.Ticker("AAPL")
# Storico dividendi
dividends = ticker.dividends
# Storico split
splits = ticker.splits
# Dati OHLCV
data = ticker.history(period="max")Cosa Significa “Adjusted”
Split Adjustment
Esempio split 2:1:
- Prima dello split: $100/azione, 1000 azioni
- Dopo lo split: $50/azione, 2000 azioni
- Serie storica aggiustata: tutti i prezzi pre-split vengono divisi per 2
Dividend Adjustment
Esempio dividendo 100:
- Ex-dividend: prezzo scende naturalmente a ~$98
- Serie aggiustata: tutti i prezzi precedenti vengono moltiplicati per 0.98
Confronto per Algo Trading e AI
Per Strategie di Algo Trading
Raccomandazione: yFinance con dati ADJUSTED
Vantaggi:
- Gratuito e affidabile per la maggior parte degli asset
- API Python semplice e ben documentata
- Dati aggiustati prevengono falsi segnali da split/dividendi
- Accesso separato a storico dividendi e split
Cosa usare:
# Per backtesting: usa Adj Close
data = yf.download("AAPL", start="2020-01-01")
prices = data['Adj Close'] # Aggiustato per split E dividendi
# Per analisi tecnica su OHLC: usa dati aggiustati per split
ohlc = data[['Open', 'High', 'Low', 'Close']] # Solo split-adjustedPerché Adj Close:
- Riflette il vero ritorno dell’investimento
- Elimina discontinuità artificiose
- Permette confronti corretti tra periodi
Per Training Modelli AI/ML
Raccomandazione: Dipende dall’obiettivo
Scenario 1: Predizione Prezzi/Rendimenti
Usa: Dati ADJUSTED (yFinance)
# Training per predire rendimenti
data = yf.download("AAPL", start="2010-01-01")
returns = data['Adj Close'].pct_change()Motivi:
- I modelli devono imparare pattern di prezzo reali
- Split/dividendi non sono pattern predittivi
- Evita che il modello impari discontinuità artificiose
- Migliora generalizzazione
Scenario 2: Predizione Eventi Corporate
Usa: Dati RAW + Feature Engineering
Se vuoi predire split o dividendi come eventi:
# Aggiungi flag per eventi
data['has_split'] = data.index.isin(splits.index).astype(int)
data['has_dividend'] = data.index.isin(dividends.index).astype(int)Alternative Professionali
Per produzione seria:
-
Alpha Vantage (API gratuita con limiti)
- Dati adjusted e raw separati
- Più affidabile per trading live
-
Polygon.io (Paid)
- Dati tick-level
- Aggiustamenti dettagliati e configurabili
-
Interactive Brokers API
- Dati real-time
- Ideale per trading automatico
-
Bloomberg/Refinitiv (Enterprise)
- Massima qualità
- Costoso
Best Practices
Per Backtesting
import yfinance as yf
import pandas as pd
# Download dati aggiustati
data = yf.download("AAPL MSFT GOOGL", start="2020-01-01")['Adj Close']
# Calcola rendimenti
returns = data.pct_change()
# Backtesting strategia
# ... usa returns per evitare biasPer ML Training
# Feature engineering su dati adjusted
data = yf.download("AAPL", start="2015-01-01")
# Crea features tecniche
data['SMA_20'] = data['Adj Close'].rolling(20).mean()
data['RSI'] = calculate_rsi(data['Adj Close'])
# Target: rendimento futuro
data['target'] = data['Adj Close'].pct_change().shift(-1)Attenzione ai Pitfalls
- Look-ahead bias: Non usare dati futuri per decisioni passate
- Survivorship bias: Includi aziende delisted
- Corporate actions: Verifica sempre la qualità degli aggiustamenti
- Data frequency: Alta frequenza (minute/tick) richiede fonti specializzate
Conclusione
Per la maggior parte dei casi:
- Algo Trading e AI: yFinance con
Adj Close - Gratuito, affidabile, Python-friendly
- Dati adjusted prevengono errori sistematici
Upgrade quando:
- Hai budget per dati professionali
- Necessiti tick-level data
- Trading ad alta frequenza
- Produzione enterprise
yFinance è ottimo per ricerca, sviluppo strategie e training modelli. Per produzione seria, considera upgrade a fonti professionali.