Comprare vicino al massimo delle ultime 52 settimane mette un po’ a disagio: e se quella che sembra una rottura rialzista si trasformasse subito in un’inversione? Aggiungere i volumi o il volume relativo (RVOL) non permette di prevederlo. Il vantaggio che cerco è molto più concreto e viene prima di qualunque ordine.

Un titolo può trovarsi vicino al massimo annuale ma essere scambiato pochissimo. Un altro può registrare un’esplosione di volumi mentre il prezzo è ancora lontano dai massimi. Se ho tempo per analizzare solo poche società, quali dovrei prendere in esame per prime?

Parto quindi dalla posizione del prezzo rispetto al massimo a 52 settimane, applico un secondo filtro sui volumi assoluti e, soltanto sui candidati rimasti, controllo RVOL e liquidità. Nell’interfaccia che ho osservato, i due filtri effettivamente applicati erano 52W High e Volume. La colonna Relative Volume era visibile per la verifica successiva; non ho applicato né convalidato una soglia numerica RVOL in quella sessione.

Per me lo screener serve a distribuire il tempo di ricerca, non a generare segnali di acquisto.

Due filtri risolvono problemi diversi

Il massimo a 52 settimane dà un riferimento storico al prezzo attuale. Essere vicini a quel livello può suggerire una forza relativa interessante nell’ultimo anno. Non dimostra, però, che la rottura sia confermata o che il titolo continuerà a salire.

Bisogna anche definire che cosa significhi «vicino al massimo». La guida dello screener Finviz descrive i massimi di periodo e filtri basati sulla distanza percentuale. «Entro il 5% dal massimo» è una regola calcolabile per una ricerca. Questo non significa che digitando 10 nel campo 52W High di un altro prodotto si ottenga automaticamente «entro il 10% dal massimo».

Il volume risponde a un’altra domanda: quanto è facile scambiare quel titolo? Se gli scambi sono scarsi, devo controllare lo spread denaro-lettera, la profondità del book e la possibilità reale di entrare o uscire al prezzo che mi aspetto. Un bel grafico non garantisce l’esecuzione.

Lo considero un costo di ricerca. Ogni candidato poco liquido aggiunge un controllo sulla negoziabilità. Investor.gov, nella definizione di liquidità, si concentra sulla possibilità di vendere senza influenzare sensibilmente il prezzo. Più volume può essere una ragione per approfondire; da solo non dimostra che il book sia profondo o che lo spread sia contenuto.

Nemmeno cercare solo i volumi elevati basta: una discesa accompagnata da forti vendite può essere molto movimentata. Uso dunque i due criteri come intersezione, non come una somma di indicatori che promette una percentuale di successo più alta.

Sei azioni inventate: prima quattro, poi soltanto due

Per mostrare il meccanismo non ho bisogno di quotazioni reali. Ho inventato sei titoli, da S1 a S6, assegnando a ciascuno un prezzo corrente, un massimo a 52 settimane e un volume giornaliero ipotetici.

Il primo passaggio mantiene i prezzi pari almeno al 95% del massimo ipotetico. Il secondo richiede un volume ipotetico di almeno un milione di azioni. Il 95% e il milione di azioni sono soglie scelte per questa simulazione, non descrivono le unità o la semantica dei campi di uno screener in produzione.

// Dati interamente inventati; anche le unità di volume servono solo all'esempio.
const stocks = [
  ["S1",  96, 100,  600000],
  ["S2",  49,  50, 1800000],
  ["S3", 190, 200,  900000],
  ["S4", 9.8,  10, 2400000],
  ["S5",  80, 100, 1600000],
  ["S6",  60, 100, 2200000],
];
// [ID, prezzo ipotetico, massimo a 52 settimane ipotetico, volume ipotetico]
const nearHigh = stocks.filter(([, price, high]) => price / high >= 0.95);
const candidates = nearHigh.filter(([, , , volume]) => volume >= 1000000);
console.log(stocks.length, nearHigh.length, candidates.length); // 6 4 2
console.log(candidates.map(([id]) => id)); // ["S2", "S4"]

L’output è 6, 4, 2: restano S2 e S4.

PassaggioAzioni fittizie rimasteMotivo dell’esclusione
Inizio: 6S1, S2, S3, S4, S5, S6—
Almeno il 95% del massimo: 4S1, S2, S3, S4S5 e S6 sono più lontane dal massimo
Aggiunta della soglia di un milione: 2S2, S4S1 e S3 hanno troppo poco volume

È S3 a meritare una riflessione. Il suo prezzo inventato è 190 contro un massimo di 200: esattamente il 95%. Il volume, però, è di 900.000 azioni, appena 100.000 sotto la seconda soglia. Il codice la elimina senza esitazioni. Questo non rende S3 un’azienda peggiore né dimostra che non valga la pena studiarla.

È il compromesso di un filtro grossolano: la lista diventa più corta, ma possono sparire casi interessanti vicini alla soglia. Se oggi posso guardare pochissimi grafici, potrei accettare questa perdita. Se invece sto studiando anomalie di prezzo e volume su titoli con flottante ridotto, terrei S3 in una seconda lista di «casi al limite da ricontrollare». Una soglia aiuta a decidere dove spendere tempo; non assegna un voto alle aziende.

Anche un milione di azioni può rappresentare situazioni molto diverse. Come esempio puramente aritmetico, a 10 yuan per azione equivarrebbe a circa 10 milioni di yuan di controvalore scambiato, assumendo tutte le esecuzioni a quel prezzo; a 100 yuan sarebbero circa 100 milioni. Non sono scambi osservati. E nessuno dei due importi sostituisce la profondità effettiva del book. Controvalore, turnover e spread possono essere più importanti di una soglia fissa nel numero di pezzi.

Nell’interfaccia reale bisogna distinguere i filtri dall’ordinamento

In un array JavaScript intersecare due condizioni è semplice. In uno screener reale posso invece convincermi di aver aggiunto una condizione quando ho soltanto cambiato l’ordine delle righe.

Ho verificato il flusso con lo screener NuvexLens, alla cui manutenzione collaboro. La constatazione è limitata ma utile: aggiungendo la seconda condizione, il chip del primo filtro restava visibile e il riepilogo dei candidati si restringeva. È più comodo che esportare due elenchi e calcolarne l’intersezione a mano. Non dimostra alcun algoritmo speciale nel backend.

In una verifica della schermata Overview del mercato US, erano presenti le colonne Volume e Relative Volume, oltre all’accesso al filtro 52W High. Vedere la colonna RVOL non significa che fosse applicata una soglia numerica. Non pubblico qui i titoli e le quotazioni effettive mostrate in quella schermata.

L’osservazione dei due chip di filtro proviene da un’altra sessione, sul mercato CN. Attraverso Add New Filter ho aggiunto 52W High > 10 e poi Volume > 1000000. Entrambi i chip risultavano visibili contemporaneamente, mentre il numero di candidati mostrato diminuiva. È una verifica di quanto mostrava la UI in quegli istanti, non un backtest storico, una lista congelata degli stessi titoli o un’ispezione del motore sottostante. L’Overview US e l’operazione sui filtri CN non possono essere unite in un unico snapshot di mercato.

Ora controllo sempre tre aspetti quando uso più condizioni: il primo filtro sul prezzo è ancora presente? Il secondo è stato inserito dall’editor dei filtri o solo dal menu di una colonna? L’insieme dei candidati è davvero cambiato o ho soltanto riordinato le righe?

È una distinzione che ho imparato anche da un mio errore. Durante una verifica ho aperto il menu di ordinamento della colonna Volume invece del filtro numerico. Ripetendo l’operazione tramite Add New Filter sono riuscito a vedere i due chip insieme. Ordinare cambia la sequenza dei risultati; filtrare cambia quali titoli soddisfano i criteri. Se tra due osservazioni cambia il mercato o il momento del dato, nemmeno un numero inferiore di candidati dimostra che il secondo insieme sia un sottoinsieme del primo.

C’è un altro salto logico da evitare. Nel codice immaginario ho usato «entro il 5% dal massimo a 52 settimane». Nell’interfaccia reale il campo riportava 52W High > 10. Senza una definizione verificata delle unità, non posso trasformare arbitrariamente quel 10 in «entro il 10% dal massimo».

La lista è più breve, non la decisione

Anche se S2 e S4 fossero titoli reali, non li comprerei solo perché hanno superato due filtri. Mi chiederei prima se i volumi odierni siano elevati rispetto all’attività abituale dello stesso titolo. Il volume assoluto è un primo taglio approssimativo; RVOL o una media storica costruita con periodi confrontabili servono per approfondire.

In generale, RVOL mette in rapporto il volume corrente con una media storica appropriata. La documentazione ufficiale di TradingView descrive un metodo basato sui dieci periodi precedenti e una distinta modalità di confronto alla stessa ora della seduta. Questa è la spiegazione dei calcoli di TradingView, non la formula di backend verificata per lo screener che ho esaminato. Non ho nemmeno applicato una regola RVOL > 1,5 né ne ho misurato i risultati.

Resta poi la struttura del prezzo. Il titolo si sta avvicinando al vecchio massimo, lo ha appena superato o sta già ritracciando dopo un’impennata? Ci sono resistenze vicine? Controvalore, profondità del book, spread, livello di stop e dimensione della posizione possono portare a decisioni molto diverse per due azioni che superano gli stessi filtri iniziali.

Il risultato 6 → 4 → 2 è una dimostrazione fittizia e riproducibile, non un test sul mercato reale. La verifica dell’interfaccia mostra soltanto due chip di filtro contemporanei e il cambiamento nel riepilogo dei candidati; non dimostra alcun miglioramento nei rendimenti.

La sequenza che voglio conservare è semplice: restringere una volta per posizione del prezzo, una seconda per attività degli scambi e riservare il tempo rimasto ai giudizi che richiedono davvero una persona. Uno screener può evitarmi di aprire centinaia di grafici. Non può assumersi al mio posto la decisione di investimento.

Questo articolo ha finalità didattiche e di ricerca e non costituisce consulenza finanziaria.