Indicatori di volatilità

#1c


Introduzione agli Indicatori di Volatilità

Teoria di Base

Gli indicatori di volatilità sono strumenti di analisi tecnica progettati per misurare l’ampiezza e la frequenza delle variazioni di prezzo di un asset finanziario. La volatilità riflette il grado di incertezza o rischio associato al movimento del prezzo, con valori elevati che indicano mercati instabili e valori bassi che suggeriscono stabilità. Questi indicatori sono essenziali per strategie di trading come i breakout, la gestione del rischio (es. posizionamento degli stop-loss) e l’identificazione di fasi di mercato laterali o trending.

La teoria sottostante si basa sulla quantificazione delle fluttuazioni di prezzo. Ad esempio, l’Average True Range (ATR) misura la volatilità media considerando l’intervallo reale dei prezzi:

\[
TR = \max(\text{High}_t – \text{Low}_t, |\text{High}_t – \text{Close}_{t-1}|, |\text{Low}_t – \text{Close}_{t-1}|)
\]
\[
ATR = \text{EMA}_n(TR)
\]

Altri indicatori, come le Bollinger Bands, usano la deviazione standard per costruire canali di volatilità attorno a una media mobile:

\[
\text{Upper Band} = \text{SMA}_n(\text{Close}) + k \cdot \text{StdDev}_n(\text{Close})
\]

Indicatori come la Standard Deviation, la Chaikin Volatility, l’Historical Volatility

Vantaggi degli Indicatori di Volatilità

Gli indicatori di volatilità offrono numerosi vantaggi per i trader e gli analisti tecnici:

  • Identificazione delle condizioni di mercato: Indicatori come ATR e Bollinger Bands aiutano a distinguere tra mercati volatili (trend o breakout) e mercati laterali (bassa volatilità), guidando le strategie di trading.
  • Gestione del rischio: L’ATR e i Keltner Channels sono utilizzati per impostare stop-loss e trailing stop, adattandosi alla volatilità corrente.
  • Efficienza computazionale: Molti indicatori, come l’ATR (\( O(1) \) per aggiornamento) e i Keltner Channels, sono veloci da calcolare, rendendoli adatti al trading in tempo reale.
  • Segnali di breakout: Le Bollinger Bands e i Keltner Channels segnalano potenziali breakout quando il prezzo attraversa le bande, utili in mercati trending.
  • Versatilità: Possono essere combinati con indicatori di tendenza e momentum per confermare segnali e migliorare l’accuratezza.

Limiti degli Indicatori di Volatilità

Nonostante i loro vantaggi, gli indicatori di volatilità presentano limitazioni che i trader devono considerare:

  • Mancanza di direzione: Indicatori come l’ATR e la Standard Deviation misurano l’ampiezza del movimento ma non la direzione, richiedendo l’integrazione con




Indicatori di Volatilità: Matematica e Implementazione in PineScript

Gli indicatori di volatilità misurano l’ampiezza delle variazioni di prezzo di un asset, fornendo informazioni sulla stabilità o l’instabilità del mercato. Questi strumenti sono fondamentali per identificare periodi di alta o bassa volatilità, utili per strategie di breakout, gestione del rischio e posizionamento degli stop-loss. Questo capitolo esplora sei indicatori di volatilità: Average True Range (ATR), Bollinger Bands, Standard Deviation, Chaikin Volatility, Historical Volatility e Keltner Channels. Per ciascun indicatore, presentiamo le equazioni matematiche, una spiegazione tecnica e due implementazioni in PineScript: una con funzioni native di TradingView e una con calcoli manuali.

1. Average True Range (ATR)

L’Average True Range (ATR) misura la volatilità media di un asset calcolando l’intervallo reale (True Range) e livellandolo con una media esponenziale.

\[
TR = \max(\text{High}_t – \text{Low}_t, |\text{High}_t – \text{Close}_{t-1}|, |\text{Low}_t – \text{Close}_{t-1}|)
\]
\[
ATR = \text{EMA}_n(TR)
\]

Spiegazione: Il True Range (TR) considera il range giornaliero e i gap. L’ATR è efficiente (\( O(1) \)) ed è spesso usato per impostare stop-loss o trailing stop.

Codice


//@version=5
indicator("ATR - Funzioni Native", overlay=false)
length = input.int(14, "Periodo ATR", minval=1)
atr = ta.atr(length)
plot(atr, color=color.blue, title="ATR")
      

La funzione ta.atr calcola l’ATR in modo ottimizzato.

 

2. Bollinger Bands

Le Bollinger Bands misurano la volatilità costruendo bande sopra e sotto una media mobile, distanziate in base alla deviazione standard.

\[
\text{Middle Band} = \text{SMA}_n(\text{Close})
\]
\[
\text{Upper Band} = \text{Middle Band} + k \cdot \text{StdDev}_n(\text{Close})
\]
\[
\text{Lower Band} = \text{Middle Band} – k \cdot \text{StdDev}_n(\text{Close})
\]

Spiegazione: \( k \) è il moltiplicatore (tipicamente 2). Le bande si espandono con alta volatilità e si restringono con bassa volatilità. Complessità: \( O(n) \).

Codice


//@version=5
indicator("Bande di Bollinger (funzioni native)", overlay=true)

// === Parametri ===
length = input.int(20, title="Periodo")
mult = input.float(2.0, title="Deviazione standard")

// === Calcolo Bande con funzioni native ===
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)

upper = basis + dev
lower = basis - dev

// === Plot ===
plot_basis = plot(basis, title="Media", color=color.blue)
plot_upper = plot(upper, title="Banda Superiore", color=color.green)
plot_lower = plot(lower, title="Banda Inferiore", color=color.red)

// === Area riempita ===
fill(plot_upper, plot_lower, color=color.new(color.gray, 85), title="Area tra le bande")

      

La funzione ta.bb calcola le tre bande in modo ottimizzato.

Versione con Concetti Matematici di Base


//@version=5
indicator("Bande di Bollinger (manuale)", overlay=true)

// === Input ===
length = input.int(20, title="Periodo")
mult = input.float(2.0, title="Deviazione standard")

// === Media mobile semplice (SMA) ===
sma = ta.sma(close, length)

// === Deviazione standard ===
stddev = ta.stdev(close, length)  // Usa la versione nativa corretta

// === Calcolo bande ===
upper = sma + mult * stddev
lower = sma - mult * stddev

// === Plot ===
plot_sma = plot(sma, title="Media", color=color.blue)
plot_upper = plot(upper, title="Banda Superiore", color=color.green)
plot_lower = plot(lower, title="Banda Inferiore", color=color.red)

// === Fill tra le bande ===
fill(plot_upper, plot_lower, color=color.new(color.gray, 85), title="Area Banda")

      

Il codice calcola la SMA, la deviazione standard e le bande manualmente.

3. Standard Deviation

La Standard Deviation misura la dispersione dei prezzi rispetto alla loro media, un indicatore diretto della volatilità.

\[
\text{StdDev}_n = \sqrt{\frac{1}{n} \sum_{i=0}^{n-1} (\text{Close}_{t-i} – \text{SMA}_n(\text{Close}))^2}
\]

Spiegazione: Una deviazione standard alta indica alta volatilità. È usata in altri indicatori come le Bollinger Bands. Complessità: \( O(n) \).

Codice


//@version=5
indicator("Standard Deviation - Funzioni Native", overlay=false)
length = input.int(20, "Periodo", minval=1)
std_dev = ta.stdev(close, length)
plot(std_dev, color=color.orange, title="Standard Deviation")
      

La funzione ta.stdev calcola la deviazione standard.

Versione con Concetti Matematici di Base


//@version=5
indicator("Standard Deviation - Calcolo Manuale", overlay=false)
length = input.int(20, "Periodo", minval=1)
sma = ta.sma(close, length)
var float sum_squares = 0.0
for i = 0 to length - 1
    sum_squares := sum_squares + math.pow(close[i] - sma, 2)
std_dev_manual = math.sqrt(sum_squares / length)
plot(std_dev_manual, color=color.orange, title="Standard Deviation Manuale")
      

Il codice calcola manualmente la SMA e la deviazione standard.

4. Chaikin Volatility

La Chaikin Volatility misura la volatilità calcolando la variazione percentuale del range (High-Low) su un periodo, livellato con una EMA.

\[
\text{Range} = \text{High}_t – \text{Low}_t
\]
\[
\text{Chaikin Volatility} = \text{EMA}_n(\text{Range}) – \text{EMA}_n(\text{Range})_{t-m}
\]

Spiegazione: \( m \) è il periodo di confronto (es. 10). Valori positivi indicano un aumento della volatilità. Complessità: \( O(1) \) per aggiornamento.

Codice


//@version=5
indicator("Chaikin Volatility - Funzioni Native", overlay=false)
length = input.int(10, "Periodo EMA", minval=1)
lag = input.int(10, "Lag", minval=1)
range1 = high - low
ema_range = ta.ema(range1, length)
chaikin_vol = ema_range - ema_range[lag]
plot(chaikin_vol, color=color.purple, title="Chaikin Volatility")
hline(0, "Zero", color=color.gray, linestyle=hline.style_dashed)
      

La funzione ta.ema calcola l’EMA del range per derivare la volatilità.

Versione con Concetti Matematici di Base


//@version=5
indicator("Chaikin Volatility - Calcolo Manuale", overlay=false)
length = input.int(10, "Periodo EMA", minval=1)
lag = input.int(10, "Lag", minval=1)
k = 2 / (length + 1)
range1 = high - low
var float ema_range_manual = 0.0
if bar_index < length
    ema_range_manual := ta.sma(range1, length)
else
    ema_range_manual := range1 * k + ema_range_manual[1] * (1 - k)
chaikin_vol_manual = ema_range_manual - ema_range_manual[lag]
plot(chaikin_vol_manual, color=color.purple, title="Chaikin Volatility Manuale")
hline(0, "Zero", color=color.gray, linestyle=hline.style_dashed)
      

Il codice calcola manualmente l’EMA del range e la variazione.

5. Historical Volatility

L’Historical Volatility misura la volatilità passata calcolando la deviazione standard dei rendimenti logaritmici annualizzati.

\[
\text{Return}_t = \ln\left(\frac{\text{Close}_t}{\text{Close}_{t-1}}\right)
\]
\[
\text{HV} = \text{StdDev}_n(\text{Return}) \cdot \sqrt{252} \cdot 100
\]

Spiegazione: \( \sqrt{252} \) annualizza la volatilità (252 giorni di trading in un anno). È utile per confronti storici. Complessità: \( O(n) \).

Codice


//@version=5
indicator("Historical Volatility - Funzioni Native", overlay=false)
length = input.int(20, "Periodo", minval=1)
returns = math.log(close / close[1])
std_dev = ta.stdev(returns, length)
hv = std_dev * math.sqrt(252) * 100
plot(hv, color=color.red, title="Historical Volatility")
      

La funzione ta.stdev calcola la deviazione standard dei rendimenti.

 

6. Keltner Channels

I Keltner Channels sono canali di volatilità basati su una EMA e sull’ATR, con bande sopra e sotto la media.

\[
\text{Middle Line} = \text{EMA}_n(\text{Close})
\]
\[
\text{Upper Channel} = \text{Middle Line} + k \cdot \text{ATR}_m
\]
\[
\text{Lower Channel} = \text{Middle Line} – k \cdot \text{ATR}_m
\]

Spiegazione: \( k \) è il moltiplicatore (es. 2), e \( m \) è il periodo dell’ATR. Sono simili alle Bollinger Bands ma usano l’ATR invece della deviazione standard. Complessità: \( O(1) \) per aggiornamento.

Codice


//@version=5
indicator("Keltner Channels - Funzioni Native", overlay=true)

// === Input ===
length_ema = input.int(20, "Periodo EMA", minval=1)
length_atr = input.int(10, "Periodo ATR", minval=1)
mult = input.float(2.0, "Moltiplicatore", step=0.1)

// === Calcoli principali ===
middle = ta.ema(close, length_ema)
atr = ta.atr(length_atr)
upper = middle + mult * atr
lower = middle - mult * atr

// === Plot assegnati a variabili ===
plot_middle = plot(middle, color=color.blue, title="Middle Line")
plot_upper = plot(upper, color=color.red, title="Upper Channel")
plot_lower = plot(lower, color=color.green, title="Lower Channel")

// === Fill tra upper e lower ===
fill(plot_upper, plot_lower, color=color.new(color.purple, 90), title="Fill")

      

Le funzioni ta.ema e ta.atr calcolano la media e l’ATR.

Versione con Concetti Matematici di Base


//@version=5
indicator("Keltner Channels - Calcolo Manuale", overlay=true)
length_ema = input.int(20, "Periodo EMA", minval=1)
length_atr = input.int(10, "Periodo ATR", minval=1)
mult = input.float(2.0, "Moltiplicatore", step=0.1)
k_ema = 2 / (length_ema + 1)
k_atr = 2 / (length_atr + 1)
var float ema_manual = 0.0
if bar_index < length_ema
    ema_manual := ta.sma(close, length_ema)
else
    ema_manual := close * k_ema + ema_manual[1] * (1 - k_ema)
tr = math.max(high - low, math.abs(high - close[1]), math.abs(low - close[1]))
var float atr_manual = 0.0
if bar_index < length_atr
    atr_manual := ta.sma(tr, length_atr)
else
    atr_manual := tr * k_atr + atr_manual[1] * (1 - k_atr)
upper_manual = ema_manual + mult * atr_manual
lower_manual = ema_manual - mult * atr_manual
a = plot(ema_manual, color=color.blue, title="Middle Line Manuale")
b = plot(upper_manual, color=color.red, title="Upper Channel Manuale")
c = plot(lower_manual, color=color.green, title="Lower Channel Manuale")
fill(b,c, color=color.new(color.purple, 90), title="Fill Manuale")
      

Il codice calcola manualmente l’EMA e l’ATR per costruire i canali.

Conclusione

Gli indicatori di volatilità sono strumenti essenziali per comprendere e sfruttare le dinamiche di mercato. L’ATR (\( ATR = \text{EMA}_n(TR) \)) e i Keltner Channels (\( \text{Upper} = \text{EMA}_n + k \cdot \text{ATR} \)) offrono misure dirette della volatilità, utili per stop-loss e breakout; le Bollinger Bands (\( \text{Upper} = \text{SMA}_n + k \cdot \text{StdDev}_n \)) e la Standard Deviation (\( \text{StdDev}_n = \sqrt{\frac{1}{n} \sum (\text{Close} – \text{SMA}_n)^2} \)) evidenziano la dispersione dei prezzi; la Chaikin Volatility (\( \text{CV} = \text{EMA}_n(\text{Range}) – \text{EMA}_n(\text{Range})_{t-m} \)) e l’Historical Volatility (\( \text{HV} = \text{StdDev}_n(\text{Return}) \cdot \sqrt{252} \cdot 100 \)) analizzano variazioni di volatilità nel tempo. Le implementazioni PineScript mostrano che le funzioni native (\( O(1) \)) sono più efficienti rispetto ai calcoli manuali (\( O(n) \)). Per un uso efficace, è consigliabile combinarli con indicatori di tendenza e momentum, ottimizzare i parametri tramite backtesting e usarli per strategie di gestione del rischio in mercati volatili.

📬 Vuoi contenuti ancora più approfonditi?

Iscriviti alla nostra newsletter per ricevere:
  • 📚 Guide gratuite
  • 📈 Strategie avanzate di trading
  • 🧠 Analisi di libri e paper scientifici
Facebook
X
Telegram
WhatsApp
LinkedIn
Altri articoli
Ricerca
Bottom Up

Trading Algoritmico – Analisi Bibliometrica

🧩 Introduzione Negli ultimi trent’anni il trading algoritmico è passato dall’essere una nicchia sperimentale a una componente centrale dei mercati finanziari e, più recentemente, anche dei mercati energetici. Questo sviluppo

Read More »

Iscriviti alla newsletter