• 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.dividends e ticker.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-adjusted

Perché 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:

  1. Alpha Vantage (API gratuita con limiti)

    • Dati adjusted e raw separati
    • Più affidabile per trading live
  2. Polygon.io (Paid)

    • Dati tick-level
    • Aggiustamenti dettagliati e configurabili
  3. Interactive Brokers API

    • Dati real-time
    • Ideale per trading automatico
  4. 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 bias

Per 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

  1. Look-ahead bias: Non usare dati futuri per decisioni passate
  2. Survivorship bias: Includi aziende delisted
  3. Corporate actions: Verifica sempre la qualità degli aggiustamenti
  4. 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.