📊 Prezzo Medio di Carico (PMC)
💡 Cos'è il PMC?
Il Prezzo Medio di Carico (PMC) è il costo unitario medio di un asset in un portafoglio, ponderato per la quantità acquistata a ciascun prezzo.
Risponde alla domanda: "In media, quanto ho pagato per unità di questo asset?"
Altri nomi
- PMC — Prezzo Medio di Carico (Italia)
- ACB — Average Cost Basis (Canada, USA)
- CMP — Coût Moyen Pondéré (Francia)
🧮 Formula
Il PMC viene calcolato in modo iterativo man mano che ogni transazione viene elaborata cronologicamente:
Dove:
- \(PMC_{corrente}\) = prezzo medio di carico corrente prima di questa transazione
- \(Q_{pool}\) = quantità totale detenuta nel pool prima di questa transazione
- \(Costo_{unitario}\) = costo di acquisizione per unità della nuova transazione
- \(Q_{tx}\) = quantità aggiunta dalla nuova transazione
⚙️ Come LibreFolio Calcola il PMC
LibreFolio utilizza un algoritmo iterativo basato sull'inventario che elabora tutte le transazioni qualificanti per una data coppia (broker, asset) in ordine cronologico.
🏷️ Effetti delle Transazioni
Ogni transazione contribuisce al calcolo del PMC in uno di questi modi:
| Effetto | Condizione | Impatto sul PMC |
|---|---|---|
| Ponderato | qty > 0 e unit_cost > 0 |
Il PMC si avvicina al nuovo costo di acquisizione |
| Quantità ridotta | qty < 0 |
Uscita al PMC corrente — PMC invariato, pool si riduce |
| Diluizione | qty > 0 ma unit_cost = 0 |
Pool cresce, numeratore invariato → PMC diminuisce |
| PMC Automatico | qty > 0, cost_basis_mode = "auto" |
Pool invariato — le unità entrano al PMC corrente |
📅 Ordinamento Stesso Giorno
Quando più transazioni avvengono nella stessa data:
- Prima gli aumenti (qty > 0) — elaborati prima delle riduzioni
- Poi le riduzioni (qty < 0) — garantisce che il pool non diventi temporaneamente negativo
🔻 Esaurimento del Pool
- Quando
new_qty = 0: Il PMC si azzera (posizione chiusa) - Quando
new_qty < 0(caso limite di arrotondamento): bloccato a 0
📝 Esempi Pratici
Esempio 1: Due Acquisti — Il PMC sale
| Data | Tipo | Q.tà | Costo Unitario | Q.tà Pool | PMC |
|---|---|---|---|---|---|
| 1 Apr | ACQUISTO | 10 | 150 $ | 10 | 150,00 $ |
| 15 Apr | ACQUISTO | 5 | 180 $ | 15 | 160,00 $ |
Il secondo acquisto a un prezzo più alto spinge il PMC verso l'alto.
Esempio 2: Acquisto poi Vendita — PMC invariato
| Data | Tipo | Q.tà | Costo Unitario | Q.tà Pool | PMC |
|---|---|---|---|---|---|
| 1 Apr | ACQUISTO | 10 | 150 $ | 10 | 150,00 $ |
| 15 Apr | VENDITA | -5 | (al PMC) | 5 | 150,00 $ |
La VENDITA rimuove unità al PMC corrente (150 $). Il PMC rimane invariato — solo il pool si riduce.
Esempio 3: Acquisizione a Costo Zero — Diluizione
| Data | Tipo | Q.tà | Costo Unitario | Q.tà Pool | PMC |
|---|---|---|---|---|---|
| 1 Apr | ACQUISTO | 10 | 150 $ | 10 | 150,00 $ |
| 1 Mag | RETTIFICA | +5 | 0 $ | 15 | 100,00 $ |
Il PMC viene diluito perché 5 unità sono entrate a costo zero (es. frazionamento, airdrop, donazione).
🔄 Override della Base di Costo
Per trasferimenti e rettifiche, 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 PMC come una normale acquisizione ponderata
- Questo preserva la continuità del costo tra 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, donazioni o airdrop dove non esiste un prezzo di acquisto
Quando in modalità automatica (cost_basis_mode = "auto"):
- La transazione entra al PMC corrente del pool — il PMC rimane algebricamente invariato
- Questo è appropriato per trasferimenti o rettifiche dove la base di costo dovrebbe essere ereditata dal pool del broker di origine
PMC Automatico nell'interfaccia
Nel modulo di transazione, l'interruttore "Auto" utilizza questa modalità. La tabella di qualificazione mostra il badge dell'effetto PMC Automatico (o PMC Automatico in italiano), indicando che le unità sono entrate al costo corrente del pool senza alterare il PMC.
Esempio 4: Trasferimento in Modalità Auto — PMC invariato
| Data | Tipo | Q.tà | Costo Unitario | Q.tà Pool | PMC |
|---|---|---|---|---|---|
| 1 Apr | ACQUISTO | 10 | 150 $ | 10 | 150,00 $ |
| 15 Apr | ACQUISTO | 5 | 180 $ | 15 | 160,00 $ |
| 1 Mag | TRASFERIMENTO (auto) | +3 | 160 $ (=PMC) | 18 | 160,00 $ |
Il destinatario del trasferimento in modalità auto eredita il PMC corrente come costo unitario. Il pool cresce ma il PMC rimane invariato.
🌍 Gestione Multi-Valuta
Quando un portafoglio contiene acquisizioni in valute diverse, LibreFolio:
- Determina la valuta target (la più frequente tra le acquisizioni)
- Converte tutti i costi unitari nella valuta target utilizzando i tassi di cambio storici
- Calcola il PMC nella valuta target unificata
Disponibilità Tasso di Cambio
Se un tasso di cambio richiesto è mancante, il calcolo del PMC potrebbe essere incompleto. L'interfaccia avvisa riguardo alle coppie di cambio mancanti e fornisce azioni rapide per aggiungerle o sincronizzarle.
🎯 Dove viene utilizzato il PMC in LibreFolio
- Base di costo: \(\text{CB}(a,b,t) = q(a,b,t) \times \text{PMC}(a,b,t) \times \text{fx}(\cdot)\)
- P&L realizzato in VENDITA: \(\text{realizzato} = P_{\text{vendita}} - q_{\text{venduta}} \times \text{PMC}_{\text{pre-vendita}}\)
- Scomposizione del pool di cassa: La VENDITA restituisce \(C = q_{\text{venduta}} \times \text{PMC}\) al Pool di Capitale
- Modulo di trasferimento: suggerisce automaticamente cost_basis_override per i trasferimenti in uscita
Il PMC non viene mai utilizzato per la valutazione degli asset
Il PMC è un costrutto contabile per la base di costo. La catena di valutazione per il valore di mercato utilizza: MARKET_PRICE → LAST_BUY_PRICE → MISSING. Vedi NAV.
⚙️ Implementazione: Ambito a Livello di Posizione
Il PMC viene mantenuto per posizione \((a, b)\) — cioè, per coppia (asset, broker). Lo stesso asset detenuto su due broker ha due pool PMC indipendenti.
Il motore calcola il PMC inline durante il ciclo giornaliero delle transazioni — nessuna query separata al database necessaria. Ciò raggiunge un costo ammortizzato O(1) per transazione invece del costo O(N) di rieseguire query sull'intera cronologia.
Ordinamento delle transazioni nello stesso giorno
All'interno della stessa data, gli aumenti vengono elaborati prima delle riduzioni:
Questo previene quantità negative transitorie e garantisce che SELL legga sempre il PMC corretto che include gli BUY dello stesso giorno.
🔗 Correlati
- 🔬 Analisi dei Lotti FIFO — Complemento per lotto: traccia ogni batch di acquisizione individualmente invece di combinarli in una media
- 🔁 Acquisto & Vendita — Transazioni che alimentano il pool PMC
- 📈 NAV / Patrimonio Netto — Come il valore contabile basato sul PMC differisce dal NAV a prezzi di mercato