Passa al contenuto principale

Fase 2 — Indicatori tecnici e scoring giornaliero

La Fase 2 viene eseguita ogni giorno dopo la chiusura dei mercati. Legge i dati fondamentali da universe e i prezzi storici da market_daily, poi calcola tutti gli indicatori tecnici e gli score di sistema per ogni simbolo.

Il risultato viene salvato in daily_scores con chiave (symbol, score_date), costruendo uno storico giornaliero completo.


Scheda operativa

VoceDettaglio
ScopoGenerare indicatori e score di sistema standardizzati.
Punto di partenzauniverse + storico prezzi (market_daily).
Deliverabledaily_scores giornaliero (chiave (symbol, score_date)).
Microservizi coinvoltitickerscanner, cachemanager, scheduler.

Parametri di pilotaggio

ParametroTipoUso
score_datedataData logica di calcolo.
symbolslista opzionaleRicalcolo selettivo per subset ticker.
modenormal/forceGestione idempotenza e ricalcolo completo.
providerenumScelta provider dati prezzo quando previsto.
limit/batchSizenumeroControllo throughput job e consumo risorse.

Struttura della tabella daily_scores

Prezzi e rendimenti

CampoDescrizione
pricePrezzo di chiusura del giorno
ret_1dRendimento sull'ultimo giorno di trading
ret_5dRendimento sugli ultimi 5 giorni (~1 settimana)
ret_20dRendimento sugli ultimi 20 giorni (~1 mese)
ret_60dRendimento sugli ultimi 60 giorni (~3 mesi)

I rendimenti sono espressi come variazione decimale (es. 0.05 = +5%).

Medie mobili semplici (SMA)

Le Simple Moving Average sono la media aritmetica dei prezzi di chiusura sugli ultimi N giorni. Servono a identificare la direzione del trend principale.

CampoPeriodoUtilizzo tipico
sma_1010 giorniTrend di brevissimo periodo
sma_2020 giorniTrend di breve periodo (~1 mese)
sma_5050 giorniTrend di medio periodo (~2 mesi)
sma_200200 giorniTrend di lungo periodo (~10 mesi)

Lettura: quando il prezzo è sopra la SMA50, il titolo è in uptrend di medio periodo. Quando SMA50 > SMA200, si parla di "golden cross" (segnale rialzista).

Slope delle medie mobili

CampoDescrizione
sma_20_slopePendenza (variazione normalizzata) della SMA20 — positivo = trend crescente
sma_50_slopePendenza della SMA50

La slope indica non solo la direzione del trend, ma anche la sua accelerazione o decelerazione.

Volatilità — ATR (Average True Range)

L'ATR a 14 periodi misura la volatilità media giornaliera di un titolo, calcolata sul range reale (considerando anche i gap tra la chiusura precedente e l'apertura del giorno successivo).

CampoDescrizione
atr_14ATR assoluto in USD
atr_14_pctATR come percentuale del prezzo corrente

Utilizzo: l'ATR viene usato per dimensionare gli stop loss (es. "stop a 2×ATR dal prezzo di entrata") e per confrontare la volatilità tra titoli con prezzi molto diversi.

RSI — Relative Strength Index

Il RSI a 14 periodi è un oscillatore che misura la forza e la velocità dei movimenti di prezzo, con valori tra 0 e 100.

CampoValoreInterpretazione
rsi_14< 30Ipervenduto — possibile rimbalzo
rsi_1430 – 50Debolezza — trend ribassista
rsi_1450 – 70Forza — trend rialzista
rsi_14> 70Ipercomprato — possibile correzione

Il RSI viene usato sia come segnale di inversione (divergenze) sia come conferma del trend.

Gap medio e drawdown

CampoDescrizione
avg_gap_20Gap medio overnight (apertura - chiusura precedente) sugli ultimi 20 giorni, in percentuale. Gap positivi frequenti indicano domanda sostenuta.
max_dd_60Maximum Drawdown sugli ultimi 60 giorni: la perdita massima dal picco locale. Misura il rischio reale sopportato da chi ha comprato in un momento sfortunato.

Volume

CampoDescrizione
dollar_vol_20dDollar volume medio sugli ultimi 20 giorni = prezzo × volume. Indica la liquidità effettiva del titolo (non il numero di azioni scambiate, ma il valore in USD).

Un dollar_vol_20d elevato garantisce che sia possibile entrare e uscire da posizioni significative senza impatto sul prezzo.


Score di sistema

Gli score sono numeri in scala 0–100 (0 = pessimo, 100 = eccellente), calcolati con pesi di default uguali per tutti gli utenti. Ogni utente può poi personalizzarli in Fase 3.

Valuation Score

Misura quanto il titolo è economico rispetto al suo valore intrinseco. Rilevante solo per azioni (non ETF).

Componenti e pesi (media aritmetica dei componenti non-null):

ComponenteFonteDescrizione
pe_scorePE ratioScore PE (vedi Fase 1)
pb_scorePB ratioScore PB (vedi Fase 1)
dcf_scoreDCF upsideUpside DCF normalizzato tra -20% e +50%

Quality Score

Misura la solidità e la profittabilità dell'azienda. Rilevante solo per azioni (non ETF).

Componenti:

ComponenteFonteDescrizione
roe_scoreROEReturn on Equity (vedi Fase 1)
roa_scoreROAReturn on Assets (vedi Fase 1)
op_margin_scoreMargine operativoEfficienza operativa (vedi Fase 1)
piot_scorePiotroski F-ScoreSalute finanziaria (0–9 → 0–100)

Risk Score

Misura la rischiosità strutturale del titolo. Valido anche per ETF (solo beta).

Componenti:

ComponenteFonteDescrizione
beta_scoreBetaDistanza da beta=1: score = (1 - |beta-1|/1.5) × 100
debt_equity_scoreD/E ratioLeva finanziaria (vedi Fase 1)
altman_z_scoreAltman ZRischio insolvenza, normalizzato tra 1 e 3

Nota Beta: il punteggio è massimo (100) per beta=1 (perfettamente allineato al mercato) e diminuisce sia per beta troppo basso (<0, inversamente correlato) sia per beta troppo alto (>2, molto più volatile del mercato).

Score di Momentum

Gli score di momentum derivano dall'analisi tecnica dei prezzi e dei volumi storici. Sono calcolati dal MomentumCalculator che usa le candele OHLCV degli ultimi 12+ mesi.

Momentum Long Score

Cattura il momentum di lungo periodo (1, 3, 6, 12 mesi) e la qualità del trend.

Sotto-componenteDescrizione
mom12mScorePerformance sull'anno solare vs peers
mom6mScorePerformance sui 6 mesi
mom3mScorePerformance sugli ultimi 3 mesi
mom1mScorePerformance sull'ultimo mese
trendScoreQualità e coerenza del trend (SMA alignment)

Momentum Short Score

Cattura il momentum di breve-medio periodo (settimane).

Sotto-componenteDescrizione
retScoreRendimento recente normalizzato
trendScoreNormAllineamento del prezzo alle medie mobili
structureScoreNormStruttura di minimi e massimi crescenti/decrescenti
rsiScoreRSI normalizzato (favorisce zone 50–70)

Volume Score

Valuta la qualità e la direzione dei volumi.

Sotto-componenteDescrizione
volSpikeScorePicchi di volume nelle sessioni rialziste vs ribassiste
directionalVolumePrevalenza di giorni ad alto volume rialzista
efficiencyScoreEfficienza del movimento (rendimento per unità di volume)
rangeScoreAmpiezza delle candele nei giorni ad alto volume

Market Risk Score

Valuta il rischio di mercato corrente (volatilità, drawdown, gap risk).

Sotto-componenteDescrizione
volSafeSicurezza rispetto alla volatilità storica (ATR)
ddSafeSicurezza rispetto al drawdown massimo recente
gapSafeSicurezza rispetto ai gap overnight
trendSafeSicurezza rispetto alla direzione del trend

Score totale (default)

Il total_score è la media ponderata degli score principali con i pesi di default:

ScorePeso (Azioni)Peso (ETF)
Valuation Score30%
Quality Score40%
Risk Score20%50%
Momentum Score10%50%
Personalizzazione

Questi sono i pesi di sistema, usati per daily_scores. Ogni utente può impostare pesi diversi in Fase 3, generando un total_score personalizzato in scores_daily.

Growth Probability

Un indicatore composito che stima la probabilità che il titolo abbia una performance positiva nel breve periodo, combinando forza del trend, rischio e momentum.


Fase successiva

L'output di questa fase (daily_scores) è il punto di partenza di due percorsi paralleli:

  • Fase 3: Ranking personalizzato — ricalcola gli score con i pesi dell'utente e genera classifiche per ogni combinazione utente/pipe in scores_daily.
  • Fase 4: Ranking di sistema — usa gli score di default per produrre il ranking globale per bucket di asset in AST_RANKING_DAILY.

Frequenza e aggiornamento

  • La Fase 2a aggiorna prima market_daily con i prezzi EOD del giorno
  • La Fase 2b legge da market_daily e universe, calcola tutto e scrive in daily_scores
  • I dati vengono aggiunti come nuova riga giornaliera (non sovrascrivono i giorni precedenti)
  • Il sistema mantiene quindi uno storico completo di indicatori e score, interrogabile per qualsiasi data

Avvio manuale e monitoraggio

Fase 2a — Aggiornamento prezzi EOD (market_daily)

POST /tickerscanner/fundamentals/update-market-daily

Body opzionale:

{
"score_date": "2026-03-15",
"mode": "normal"
}

Risponde con jobId. Scarica i prezzi di chiusura del giorno da FMP per tutti i simboli in universe.

Fase 2b — Calcolo indicatori e score (daily_scores)

Il calcolo degli score avviene automaticamente dopo l'aggiornamento market_daily, oppure può essere avviato manualmente. Lo stato del job può essere monitorato con:

GET /tickerscanner/fundamentals/market-daily-jobs

Verifica dati prodotti

GET /tickerscanner/fundamentals/market-daily/compare?score_date=2026-03-15

Confronta il numero di simboli in universe con quelli aggiornati in market_daily per la data, utile per rilevare simboli mancanti.


Errori comuni e recovery

ErroreCausa probabileRecovery
daily_scores vuota per una dataFase 2 non ancora eseguita per quella dataAvviare update-market-daily con la data desiderata
Simbolo senza scorePrezzi storici insufficienti (< 200 candele)Atteso per ticker nuovi; si autocorregge col tempo
Score invariati rispetto al giorno primamode=normal ha rilevato dati già presentiUsare mode=force per rigenerare
market_daily aggiornata ma daily_scores noJob 2b non eseguito o fallitoControllare i log del job; riavviare il calcolo score
Prezzi anomali o spike nei rendimentiDati FMP errati (split non gestito, dati mancanti)Segnalare il simbolo; escluderlo temporaneamente dalla scansione