Strasmore Research
Formazione Matt ConnorDi Matt Connor · Aggiornato 2026-08-08

Anchored VWAP: formula e utilizzi spiegati

Scopri formula e usi dell’anchored VWAP, con un esempio in Python: capisci come la scelta della barra di ancoraggio cambia il prezzo medio calcolato.

L’anchored VWAP è un prezzo medio ponderato per i volumi che inizia a sommare i dati dalla barra scelta e non li azzera mai. Il VWAP di sessione riparte a ogni apertura del mercato. Risponde quindi solo alla domanda: a quale prezzo medio sono state scambiate le azioni oggi? La versione anchored risponde a una domanda diversa: a quale prezzo medio sono state scambiate le azioni dal momento scelto come punto di partenza?

Che cos’è l’anchored VWAP?

Le due versioni usano lo stesso calcolo. Per ogni barra dall’inizio, si moltiplica il prezzo della barra per il relativo volume e si mantiene un totale progressivo. Si mantiene anche un secondo totale progressivo del volume. Il primo totale viene diviso per il secondo. In formula, l’anchored VWAP alla barra n è la somma di prezzo per volume dalla barra di ancoraggio fino alla barra n, divisa per la somma dei volumi delle stesse barre.

Il prezzo della barra è di solito il typical price, cioè la media di massimo, minimo e chiusura, oppure il VWAP della barra se il feed ne pubblica uno.

Nessun dato viene mai eliminato dai due totali. Una media mobile a 50 giorni elimina l’osservazione più vecchia ogni volta che ne aggiunge una nuova. È questo che le permette di cambiare direzione. L’anchored VWAP aggiunge soltanto dati, quindi conserva una memoria permanente. Il VWAP di sessione usa lo stesso calcolo, ma azzera entrambi i totali a ogni apertura. È quindi un anchored VWAP il cui punto di ancoraggio è l’apertura del mercato.

Qual è la differenza tra VWAP e anchored VWAP?

Il pannello seguente calcola entrambe le serie sulle barre giornaliere di Apple per un trimestre. La colonna session_vwap mostra il prezzo medio ponderato per i volumi all’interno di ogni singola sessione. Il valore riparte da zero ogni giorno. La colonna anchored_vwap parte dalla prima sessione dell’intervallo e accumula i dati da quel momento.

QueryVWAP della sessione giornaliera rispetto a un VWAP ancorato a una data (AAPL)
L'esatto SQL dietro ogni numero
SELECT
    toString(date)                AS session_date,
    formatDateTime(date, '%b %e') AS bar_label,
    round(toFloat64(vwap), 2)     AS session_vwap,
    round(
        sum(toFloat64(vwap) * toFloat64(volume)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
      / sum(toFloat64(volume))                   OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
    , 2)                          AS anchored_vwap
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'AAPL'
  AND date >= '2026-04-01'
  AND date <= '2026-06-30'
ORDER BY date
Run this yourself

Nelle 62 sessioni, dal Apr 1 al Jun 30, la serie giornaliera segue l’andamento degli scambi, mentre la serie anchored cambia direzione più lentamente. La linea anchored parte da 255.02, perché il primo giorno una singola sessione costituisce l’intera storia disponibile, e arriva a 286.86 alla fine dell’intervallo, contro un VWAP di sessione finale pari a 288.09. La forma della curva è il punto centrale. All’inizio la linea anchored segue da vicino quella giornaliera. Poi si appiattisce, man mano che il volume accumulato aumenta.

Dove si colloca il punto di ancoraggio?

I punti di ancoraggio più comuni sono la pubblicazione dei risultati, la prima barra di un gap, un minimo a 52 settimane o il primo print di una società appena quotata. La tesi è la stessa in tutti i casi. Chiunque abbia effettuato transazioni dopo quel momento ha pagato, in media, l’anchored VWAP. Un prezzo sopra la linea indica quindi un partecipante medio con una plusvalenza non realizzata.

C’è però un aspetto spesso omesso. Il punto di ancoraggio è una scelta discrezionale, e il risultato dipende da quella scelta. Il pannello seguente ancora lo stesso titolo all’inizio di ciascuno degli ultimi dodici mesi e calcola il prezzo medio pagato da quel mese fino a una stessa data finale.

QueryLo stesso titolo e lo stesso ultimo prezzo, dodici ancoraggi diversi (AAPL)
L'esatto SQL dietro ogni numero
WITH
    monthly AS (
        SELECT
            toStartOfMonth(date)                     AS m,
            sum(toFloat64(vwap) * toFloat64(volume)) AS pv,
            sum(toFloat64(volume))                   AS vol
        FROM global_markets.stocks_daily_aggs
        WHERE ticker = 'AAPL'
          AND date >= '2025-07-01'
          AND date <= '2026-06-30'
        GROUP BY m
    ),
    anchored AS (
        SELECT
            m,
            sum(pv)  OVER (ORDER BY m ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
          / sum(vol) OVER (ORDER BY m ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS avwap
        FROM monthly
    ),
    final_close AS (
        SELECT toFloat64(argMax(close, date)) AS last_close
        FROM global_markets.stocks_daily_aggs
        WHERE ticker = 'AAPL'
          AND date >= '2026-06-01'
          AND date <= '2026-06-30'
    )
SELECT
    formatDateTime(a.m, '%b %Y')                 AS anchor_from,
    round(a.avwap, 2)                            AS anchored_vwap,
    round(100 * (f.last_close / a.avwap - 1), 2) AS close_vs_avwap_pct
FROM anchored AS a
CROSS JOIN final_close AS f
ORDER BY a.m
Run this yourself

Con un ancoraggio a Jul 2025, il prezzo medio pagato è 259.52. L’ultima chiusura dell’intervallo è pari a 11.5% rispetto a quel livello. Il valore è positivo quando la chiusura si trova sopra la linea. Con un ancoraggio a Jun 2026, i valori sono 294.07 e -1.6%. Stesso titolo, stesso ultimo prezzo, dodici giudizi diversi sul fatto che i detentori dall’ancoraggio si trovino o meno in guadagno. Il calcolo non sceglie il punto di ancoraggio al posto tuo. Un ancoraggio scelto a posteriori può essere spostato fino a sostenere la conclusione che il grafico dovrebbe mostrare. Per questo la data di ancoraggio deve comparire nella didascalia di ogni grafico anchored VWAP.

Come si calcola l’anchored VWAP in Python?

Entrambe le serie vengono calcolate in un’unica scansione delle barre. Lo script seguente usa Python 3 della standard library, senza pacchetti e senza connessione di rete. Legge trenta barre e stampa la serie di sessione accanto alla serie anchored. Poi individua la prima barra in cui il prezzo attraversa nuovamente la linea anchored. Le barre sono inventate per la dimostrazione. Applicando lo stesso ciclo a barre reali, il calcolo non cambia.

"""Session VWAP and anchored VWAP from the same running totals. Standard library only."""
import csv
import io

# Illustrative bars, not market data: three sessions of ten 30 minute bars.
BARS = """bar,price,volume
2026-03-02 09:30,100.40,240000
2026-03-02 10:00,100.90,180000
2026-03-02 10:30,101.30,150000
2026-03-02 11:00,101.10,130000
2026-03-02 11:30,100.60,120000
2026-03-02 12:00,100.20,110000
2026-03-02 12:30,99.80,120000
2026-03-02 13:00,99.50,140000
2026-03-02 13:30,99.70,170000
2026-03-02 14:00,99.40,260000
2026-03-03 09:30,99.10,300000
2026-03-03 10:00,98.70,210000
2026-03-03 10:30,98.90,160000
2026-03-03 11:00,98.40,150000
2026-03-03 11:30,98.10,140000
2026-03-03 12:00,98.30,120000
2026-03-03 12:30,98.80,130000
2026-03-03 13:00,99.20,150000
2026-03-03 13:30,99.60,190000
2026-03-03 14:00,99.90,280000
2026-03-04 09:30,100.20,320000
2026-03-04 10:00,100.60,230000
2026-03-04 10:30,100.90,170000
2026-03-04 11:00,101.40,160000
2026-03-04 11:30,101.20,140000
2026-03-04 12:00,101.60,130000
2026-03-04 12:30,102.10,140000
2026-03-04 13:00,102.40,160000
2026-03-04 13:30,102.20,200000
2026-03-04 14:00,102.60,290000
"""

ANCHOR = "2026-03-02 10:30"   # the bar the anchored series starts on

session_pv = session_vol = 0.0
anchor_pv = anchor_vol = 0.0
current_day = None
anchored = False
start_side = None
crossover = None

print(f"{'bar':<18}{'price':>8}{'session':>10}{'anchored':>10}")

for row in csv.DictReader(io.StringIO(BARS)):
    stamp = row["bar"]
    day, price, vol = stamp[:10], float(row["price"]), float(row["volume"])

    if day != current_day:                  # the session totals reset at every open
        session_pv = session_vol = 0.0
        current_day = day
    session_pv += price * vol
    session_vol += vol
    session_vwap = session_pv / session_vol

    anchored = anchored or stamp == ANCHOR
    if not anchored:
        print(f"{stamp:<18}{price:>8.2f}{session_vwap:>10.2f}{'.':>10}")
        continue

    anchor_pv += price * vol                # the anchored totals never reset
    anchor_vol += vol
    anchored_vwap = anchor_pv / anchor_vol
    print(f"{stamp:<18}{price:>8.2f}{session_vwap:>10.2f}{anchored_vwap:>10.2f}")

    gap = price - anchored_vwap
    if start_side is None and abs(gap) > 1e-9:
        start_side = gap > 0
    elif start_side is not None and crossover is None and (gap > 0) != start_side:
        crossover = stamp

print("first bar back through the anchored VWAP:", crossover or "no crossing here")

Le due coppie di contatori sono il cuore del calcolo. session_pv e session_vol vengono azzerati quando cambia la data. anchor_pv e anchor_vol non vengono mai azzerati. Tutto il resto serve a stampare i risultati.

Perché la linea anchored smette di muoversi

L’anchored VWAP diventa più difficile da spostare con il passare del tempo per un motivo meccanico. Ogni nuova barra entra nella media con un peso pari al proprio volume diviso per tutto il volume scambiato dall’ancoraggio. Il secondo giorno, una sessione può rappresentare metà del totale. Dopo duecento sessioni, la stessa sessione pesa una frazione dell’uno per cento. Il pannello seguente misura questo peso sulle barre di Apple, raggruppandole in blocchi di dieci sessioni.

QueryQuanto la sessione più recente può spostare un VWAP ancorato (AAPL)
L'esatto SQL dietro ogni numero
WITH running AS (
    SELECT
        row_number() OVER (ORDER BY date) AS n,
        toFloat64(volume)
      / sum(toFloat64(volume)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS weight
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'AAPL'
      AND date >= '2026-01-02'
      AND date <= '2026-06-30'
)
SELECT
    intDiv(n - 1, 10) * 10 + 10 AS bars_since_anchor,
    round(100 * avg(weight), 2) AS newest_bar_weight_pct
FROM running
GROUP BY bars_since_anchor
ORDER BY bars_since_anchor
Run this yourself

Nelle prime dieci sessioni, la nuova barra pesa in media 30.09% della linea. La barra di ancoraggio pesa invece il totale. Alla sessione 130, la nuova barra pesa soltanto 2.14%. Da questi grafici emergono due conclusioni. Un ancoraggio vecchio produce una linea quasi piatta, che reagisce poco a ciò che accade nel presente. Un ancoraggio recente produce una linea che oscilla intorno al prezzo e lo attraversa spesso. Nessuna delle due è più corretta. È la stessa formula applicata a serie con età diversa. Per una lettura diretta del volume in arrivo rispetto alla norma, il volume medio giornaliero e il volume relativo forniscono questa informazione.

Che cosa pretende di mostrare l’anchored VWAP?

La tesi standard riguarda il posizionamento. Se l’ancoraggio coincide con un evento, la linea rappresenta il prezzo medio pagato da tutti coloro che hanno effettuato transazioni da quel momento. Un prezzo sopra la linea descrive quindi la maggioranza dei detentori con una plusvalenza non realizzata. Un prezzo sotto la linea indica la situazione opposta. Il pannello seguente ancora cinque società note al minimo di chiusura giornaliero raggiunto da ciascuna negli ultimi dodici mesi. Poi misura l’ultima chiusura dell’intervallo rispetto alla media risultante.

QueryAncorato alla chiusura minima degli ultimi dodici mesi di ciascun titolo
L'esatto SQL dietro ogni numero
WITH
    bars AS (
        SELECT
            ticker,
            date,
            toFloat64(vwap)   AS px,
            toFloat64(volume) AS vol,
            toFloat64(close)  AS c
        FROM global_markets.stocks_daily_aggs
        WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'KO', 'SPY')
          AND date >= '2025-07-01'
          AND date <= '2026-06-30'
    ),
    lows AS (
        SELECT
            ticker,
            argMin(date, c) AS low_date
        FROM bars
        GROUP BY ticker
    )
SELECT
    b.ticker                                AS symbol,
    formatDateTime(l.low_date, '%b %e, %Y') AS anchored_at,
    round(sumIf(b.px * b.vol, b.date >= l.low_date) / sumIf(b.vol, b.date >= l.low_date), 2) AS anchored_vwap,
    round(argMax(b.c, b.date), 2)           AS last_close,
    round(100 * (argMax(b.c, b.date)
        / (sumIf(b.px * b.vol, b.date >= l.low_date) / sumIf(b.vol, b.date >= l.low_date)) - 1), 1) AS close_vs_avwap_pct
FROM bars AS b
INNER JOIN lows AS l ON b.ticker = l.ticker
GROUP BY b.ticker, l.low_date
ORDER BY close_vs_avwap_pct DESC
Run this yourself

I cinque titoli vanno da SPY a 10.4% fino a MSFT a 1.3%, ciascuno misurato rispetto alla propria data di ancoraggio. Questa dispersione descrive ciò che è accaduto. Occorre però essere precisi sui limiti del metodo. L’anchored VWAP è una statistica descrittiva calcolata su prezzi e volumi già registrati. Non è una previsione né una regola con un edge dimostrato dalla ricerca pubblicata. Non contiene informazioni che non siano già presenti nella storia di prezzi e volumi. Inoltre, il punto di ancoraggio è stato scelto da una persona. Letto come sintesi degli scambi da una certa data, il dato è corretto. Letto come un verdetto, è il punto di ancoraggio a parlare.

Domande frequenti

Qual è la differenza tra VWAP e anchored VWAP?

Il VWAP di sessione azzera i totali progressivi a ogni apertura del mercato. Descrive quindi soltanto la giornata in corso. L’anchored VWAP inizia a sommare i dati dalla barra scelta e non si azzera mai. Descrive quindi il prezzo medio pagato in tutte le sessioni successive a quella barra.

Dove collocano i trader il punto di ancoraggio di un VWAP?

Le scelte più comuni sono la data di pubblicazione dei risultati, la prima barra di un gap, un massimo o un minimo di swing e il primo giorno di contrattazione di una nuova quotazione. Qualsiasi barra può fungere da punto di ancoraggio. Per interpretare la linea, il lettore deve conoscere la data di ancoraggio.

L’anchored VWAP si azzera durante la notte?

No. Questa è la sua caratteristica distintiva. La somma progressiva di prezzo per volume e la somma progressiva dei volumi attraversano la chiusura e riprendono nella sessione successiva, anche se tra le due sessioni trascorrono molti giorni.

L’anchored VWAP fa previsioni?

È una statistica descrittiva, non una previsione. Riassume quanto è già stato pagato dall’ancoraggio. Spostare l’ancoraggio sposta la linea e può capovolgere la conclusione apparente. Qualsiasi tesi costruita su questa base è quindi solida solo quanto lo è la motivazione per quella data di ancoraggio.

Si può calcolare l’anchored VWAP su barre giornaliere?

Sì. I pannelli di questa pagina usano barre giornaliere, con il VWAP di ogni sessione come prezzo della barra. I grafici intraday usano invece barre al minuto. La formula è identica a entrambe le risoluzioni. Cambia soltanto la dimensione degli incrementi.


Ogni pannello precedente include l’SQL che lo ha prodotto. Puoi aprirne uno e modificare la data di ancoraggio. Per calcolare gli stessi totali progressivi a partire dalla data che ti interessa, chiedilo in linguaggio naturale sul terminale Strasmore.