📊 Costo Medio Ponderato (WAC)
💡 Cos'è il WAC?
Il Costo Medio Ponderato (WAC, dall'inglese Weighted Average Cost) è il costo unitario medio di un asset in un portafoglio, ponderato per la quantità acquisita a ogni prezzo.
Risponde alla domanda: "In media, quanto ho pagato per singola unità di questo asset?"
Altri nomi
- PMC — Prezzo Medio di Carico (Italia)
- ACB — Average Cost Basis (Canada, US)
- CMP — Coût Moyen Pondéré (Francia)
🧮 Formula
Il WAC viene calcolato iterativamente man mano che ogni transazione viene elaborata in ordine cronologico:
Dove:
- \(WAC_{current}\) = costo medio ponderato attuale prima di questa transazione
- \(Q_{pool}\) = quantità totale detenuta nel pool prima di questa transazione
- \(Cost_{unit}\) = costo di acquisizione unitario della nuova transazione
- \(Q_{tx}\) = quantità aggiunta dalla nuova transazione
⚙️ Come LibreFolio calcola il WAC
LibreFolio utilizza un algoritmo iterativo consapevole dell'inventario che elabora tutte le transazioni idonee per una determinata coppia (broker, asset) in ordine cronologico.
🏷️ Effetti delle Transazioni
Ogni transazione contribuisce al calcolo del WAC in uno di questi modi:
| Effetto | Condizione | Impatto sul WAC |
|---|---|---|
| Ponderato | qty > 0 e unit_cost > 0 |
Il WAC si sposta verso il nuovo costo di acquisizione |
| Quantità ridotta | qty < 0 |
Uscite al WAC attuale — WAC invariato, il pool diminuisce |
| Diluizione | qty > 0 ma unit_cost = 0 |
Il pool cresce, il numeratore resta invariato → il WAC diminuisce |
| Auto WAC | qty > 0, cost_basis_mode = "auto" |
Pool invariato — le unità entrano al WAC attuale |
📅 Ordinamento nello stesso giorno
Quando si verificano più transazioni nella stessa data:
- Prima le aggiunte (qty > 0) — elaborate prima delle riduzioni
- Dopo le riduzioni (qty < 0) — assicura che il pool non diventi transitoriamente negativo
🔻 Esaurimento del Pool
- Quando
new_qty = 0: il WAC viene azzerato (posizione chiusa) - Quando
new_qty < 0(caso limite di arrotondamento): limitato a 0
📝 Esempi Pratici
Esempio 1: Due acquisti — il WAC sale
| Data | Tipo | Qty | Costo Unitario | Pool Qty | WAC |
|---|---|---|---|---|---|
| 1 apr | BUY | 10 | $150 | 10 | $150.00 |
| 15 apr | BUY | 5 | $180 | 15 | $160.00 |
Il secondo acquisto a un prezzo più alto trascina il WAC verso l'alto.
Esempio 2: Acquisto poi vendita — WAC invariato
| Data | Tipo | Qty | Costo Unitario | Pool Qty | WAC |
|---|---|---|---|---|---|
| 1 apr | BUY | 10 | $150 | 10 | $150.00 |
| 15 apr | SELL | -5 | (al WAC) | 5 | $150.00 |
La vendita (SELL) rimuove unità al WAC attuale ($150). Il WAC rimane invariato — diminuisce solo il pool.
Esempio 3: Acquisizione a costo zero — Diluizione
| Data | Tipo | Qty | Costo Unitario | Pool Qty | WAC |
|---|---|---|---|---|---|
| 1 apr | BUY | 10 | $150 | 10 | $150.00 |
| 1 mag | ADJUSTMENT | +5 | $0 | 15 | $100.00 |
Il WAC viene diluito perché 5 unità sono entrate a costo zero (es. frazionamento, airdrop, regalo).
🔄 Override della Base di Costo
Per i trasferimenti e gli aggiustamenti, LibreFolio supporta un override della base di costo: un costo unitario specificato dall'utente che rappresenta il costo storico delle unità trasferite.
Quando impostato (modalità manuale):
- La transazione entra nel calcolo del WAC come una normale acquisizione ponderata
- Ciò preserva la continuità dei costi tra diversi broker (es. quando si trasferisce dal broker A al broker B)
Quando non impostato (nessuna modalità specificata):
- La transazione entra con
unit_cost = 0(effetto diluizione) - Questo è appropriato per frazionamenti, regali o airdrop in cui non esiste un prezzo d'acquisto
Quando in modalità auto (cost_basis_mode = "auto"):
- La transazione entra al WAC attuale del pool — il WAC rimane algebricamente invariato
- Questo è appropriato per trasferimenti o aggiustamenti in cui la base di costo dovrebbe essere ereditata dal pool del broker di origine
Auto WAC nell'interfaccia utente
Nel modulo di transazione, l'interruttore "Auto" utilizza questa modalità. La tabella dei risultati mostra il badge dell'effetto Auto WAC (o Auto PMC in italiano), indicando che le unità sono entrate al costo attuale del pool senza alterare il WAC.
Esempio 4: Trasferimento in modalità Auto — WAC invariato
| Data | Tipo | Qty | Costo Unitario | Pool Qty | WAC |
|---|---|---|---|---|---|
| 1 apr | BUY | 10 | $150 | 10 | $150.00 |
| 15 apr | BUY | 5 | $180 | 15 | $160.00 |
| 1 mag | TRANSFER (auto) | +3 | $160 (=WAC) | 18 | $160.00 |
Il ricevente del trasferimento in modalità auto eredita il WAC attuale come costo unitario. Il pool cresce ma il WAC rimane invariato.
🌍 Gestione Multi-Valuta
Quando un portafoglio contiene acquisizioni in valute diverse, LibreFolio:
- Determina la valuta di destinazione (la più frequente tra le acquisizioni)
- Converte tutti i costi unitari nella valuta di destinazione utilizzando i tassi di cambio FX storici
- Calcola il WAC nella valuta di destinazione unificata
Disponibilità dei tassi FX
Se un tasso di cambio FX richiesto è mancante, il calcolo del WAC potrebbe essere incompleto. L'interfaccia utente avvisa della mancanza di coppie FX e fornisce azioni rapide per aggiungerle o sincronizzarle.
🎯 Dove viene utilizzato il WAC in LibreFolio
- Modulo di trasferimento: suggerisce automaticamente il cost_basis_override per i trasferimenti in uscita
- Calcolo P&L: guadagni realizzati = prezzo_vendita − WAC (FIFO al runtime, WAC per la base di costo)
- Vista Portafoglio: prezzo medio di ingresso per ogni posizione