Passa al contenuto principale

ML Prediction — Fonti dati esterne e API

Questa pagina descrive le fonti dati alternative utilizzate dal sistema ML, i provider, gli endpoint API specifici e il formato dei dati atteso.


Provider disponibili

ProviderChiave envTipo datiNote
FMP (Financial Modeling Prep)FMP_API_KEYPrezzi, news, macroGià in uso nel sistema
FRED (Federal Reserve)FRED_API_KEYMacro USAGià in .env.paper
ComputedDerivati da FMPCalcolati internamente (es. VIX/VIX3M ratio)

Indici e prezzi (FMP)

Formato generale

Tutti i prezzi vengono convertiti in variazione % giornaliera prima del salvataggio:

value = (close_oggi - close_ieri) / close_ieri * 100

Endpoint prezzi storici FMP

GET https://financialmodelingprep.com/api/v3/historical-price-full/{symbol}?from={YYYY-MM-DD}&to={YYYY-MM-DD}&apikey={FMP_API_KEY}

Simboli prioritari da raccogliere:

source_idSimbolo FMPDescrizione
vix%5EVIXCBOE Volatility Index
vix3m%5EVIX3MVIX a 3 mesi
spySPYS&P 500 ETF
qqqQQQNASDAQ 100 ETF
diaDIADow Jones ETF
xlkXLKTech sector ETF
xlfXLFFinancial sector ETF
xleXLEEnergy sector ETF
xlvXLVHealthcare sector ETF
xlyXLYConsumer Discretionary ETF
xlpXLPConsumer Staples ETF
xliXLIIndustrials ETF
xlbXLBMaterials ETF
xlreXLREReal Estate ETF
xluXLUUtilities ETF
eemEEMEmerging Markets ETF
hygHYGHigh Yield Corporate Bond ETF
tltTLT20+ Year Treasury Bond ETF
gldGLDGold ETF
cl_futuresOUSX o CL=FCrude Oil futures (approssimazione via FMP)

Risposta FMP (esempio):

{
"symbol": "SPY",
"historical": [
{ "date": "2026-03-07", "open": 561.2, "high": 563.1, "low": 559.8, "close": 562.4, "volume": 75234000 },
{ "date": "2026-03-06", "close": 558.9 }
]
}

Il servizio usa historical[0].close e historical[1].close per calcolare la % change giornaliera.


VIX term structure (computed)

Il ratio VIX / VIX3M misura la struttura a termine della volatilità implicita:

  • ratio > 1 → backwardation (mercato sotto stress acuto)
  • ratio < 1 → contango (situazione normale)

Calcolato internamente a partire dai due valori FMP:

vix_term_ratio = vix_close / vix3m_close
// salvato come valore assoluto (non pct_change) in alt_data_daily
// source_id = "vix_term_ratio", value_type = "absolute"

Dati macro (FRED)

Base URL:

GET https://api.stlouisfed.org/fred/series/observations?series_id={SERIES}&observation_start={YYYY-MM-DD}&api_key={FRED_API_KEY}&file_type=json

Serie FRED prioritarie:

source_idSerie FREDDescrizioneFrequenzaValue type
t10y2yT10Y2YCurva rendimenti 10Y-2Y (spread)Giornalieraabsolute
t10y3mT10Y3MCurva 10Y-3M (recessione proxy)Giornalieraabsolute
fedfundsFEDFUNDSFed Funds RateMensileabsolute
cpi_yoyCPIAUCSLCPI Year-over-YearMensilepct_change_yoy
hy_spreadBAMLH0A0HYM2HY bond spread (OAS)Giornalieraabsolute
ig_spreadBAMLC0A0CMIG bond spread (OAS)Giornalieraabsolute
real_yield_10yDFII10Real yield 10Y TIPSGiornalieraabsolute

Risposta FRED (esempio):

{
"observations": [
{ "date": "2026-03-07", "value": "1.23" },
{ "date": "2026-03-06", "value": "1.19" }
]
}

Nota: FRED restituisce "." per osservazioni mancanti (weekend, festività). Il servizio mappa questo valore a NULL.

Dati mensili (CPI, FEDFUNDS): i valori mensili vengono propagati forward-fill su ogni giorno del mese (con available_at pari al giorno di pubblicazione FRED, non al primo del mese).


News sentiment (FMP)

Endpoint news per ticker

GET https://financialmodelingprep.com/api/v3/stock_news?tickers={SYMBOL}&limit=50&apikey={FMP_API_KEY}

Endpoint news generali (macro/mercato)

GET https://financialmodelingprep.com/api/v4/general_news?page=0&apikey={FMP_API_KEY}

Risposta (esempio):

[
{
"symbol": "AAPL",
"publishedDate": "2026-03-07 18:23:00",
"title": "Apple beats earnings expectations",
"text": "Apple Inc. reported strong quarterly earnings...",
"sentiment": "Positive",
"sentimentScore": 0.82
}
]

FMP fornisce già sentiment e sentimentScore in risposta — non serve NLP custom per la prima versione.

Calcolo del sentiment score giornaliero per ticker

sentiment_daily = media(sentimentScore) di tutti gli articoli del giorno

Con pesi opzionali per recency (articoli più recenti nella giornata pesano di più).

Range output: [-1, +1]

Salvato in alt_data_daily come source_id = "news_sentiment_{symbol}" (es. news_sentiment_XLE).

Attenzione available_at: un articolo pubblicato alle 18:00 ET è disponibile dopo market close. Un articolo pubblicato alle 6:00 ET è disponibile a mercato aperto. Il campo available_at viene impostato a publishedDate arrotondato alle 23:59 del giorno per sicurezza (si usa solo per segnali del giorno successivo).


Stagionalità (computed)

Feature computate internamente — nessuna API esterna.

source_idTipoValori possibili
day_of_weekbinary0=Lunedì, 4=Venerdì
monthabsolute1–12
quarterabsolute1–4
is_option_expiry_weekbinary1 se settimana con scadenza opzioni mensili
days_to_fed_meetingabsolutegiorni al prossimo FOMC (da calendario FMP/FRED)

Catalogo iniziale alt_data_sources (dati di seed)

Al bootstrap, il sistema popola la tabella alt_data_sources con questo catalogo:

idcategoryproviderfetch_config (sintesi)value_type
vixvolatilityfmpsymbol: %5EVIXpct_change
vix3mvolatilityfmpsymbol: %5EVIX3Mpct_change
vix_term_ratiovolatilitycomputedderived: vix/vix3mabsolute
spymacro_indexfmpsymbol: SPYpct_change
qqqmacro_indexfmpsymbol: QQQpct_change
xlkmacro_indexfmpsymbol: XLKpct_change
xlemacro_indexfmpsymbol: XLEpct_change
xlfmacro_indexfmpsymbol: XLFpct_change
hygcreditfmpsymbol: HYGpct_change
tltcreditfmpsymbol: TLTpct_change
t10y2ycreditfredseries: T10Y2Yabsolute
hy_spreadcreditfredseries: BAMLH0A0HYM2absolute
real_yield_10ycreditfredseries: DFII10absolute
news_sentiment_XLEnews_sentimentfmpticker: XLEscore
day_of_weekseasonalitycomputedbinary
is_option_expiry_weekseasonalitycomputedbinary

Le voci news_sentiment_{symbol} vengono aggiunte dinamicamente quando un titolo viene marcato come candidato ML.