Salta al contenuto principale

Traccia un portafoglio crypto con base di costo in Beancount

Traccia un portafoglio crypto in Beancount su più exchange, con base di costo, lotti e analisi delle performance in un unico registro.

Gestire un portafoglio di criptovalute su più exchange, wallet e protocolli DeFi può essere complicato. Questa guida completa ti mostra come impostare e mantenere un monitoraggio accurato del portafoglio di criptovalute utilizzando il potente sistema di contabilità in testo semplice di Beancount.io.

Esplora un esempio di ledger di criptovalute dal vivo:

Apri Cryptocurrency Example Ledger in una nuova scheda

Perché i Tracker Tradizionali di Portafoglio Sono Insufficienti​

Problemi Comuni con gli Strumenti per Portafogli Cripto​

  • Supporto limitato agli exchange: molti strumenti non supportano tutti gli exchange o i protocolli DeFi
  • Base di costo imprecisa: i calcoli semplificati FIFO/LIFO non coprono gli scenari complessi
  • Transazioni mancanti: limitazioni delle API e lacune nell'inserimento manuale
  • Nessuna personalizzazione: categorie e strutture di reporting fisse
  • Preoccupazioni sulla privacy: condividere le chiavi API con servizi di terze parti
  • Vendor lock-in: formati dati proprietari e opzioni di esportazione limitate

Vantaggi di Beancount.io​

  • Controllo completo: possiedi i tuoi dati in formato testo semplice
  • Personalizzazione illimitata: crea qualsiasi struttura di conti di cui hai bisogno
  • Base di costo precisa: tracciamento basato su lotti con identificazione specifica
  • Supporto multi-protocollo: gestisci qualsiasi exchange, wallet o protocollo DeFi
  • Calcoli trasparenti: vedi esattamente come vengono calcolati i numeri
  • A prova di futuro: il formato testo semplice garantisce accessibilità a lungo termine

Configurazione della Struttura del Tuo Portafoglio Crypto​

Gerarchia Base dei Conti​

Inizia con una struttura di conti completa che rifletta il tuo ecosistema crypto:

; Exchange Accounts - Organized by Platform
1970-01-01 open Assets:Crypto:Coinbase:USD
1970-01-01 open Assets:Crypto:Coinbase:BTC
1970-01-01 open Assets:Crypto:Coinbase:ETH
1970-01-01 open Assets:Crypto:Coinbase:ADA
 
1970-01-01 open Assets:Crypto:Binance:USD
1970-01-01 open Assets:Crypto:Binance:BTC
1970-01-01 open Assets:Crypto:Binance:ETH
1970-01-01 open Assets:Crypto:Binance:BNB
 
1970-01-01 open Assets:Crypto:Kraken:USD
1970-01-01 open Assets:Crypto:Kraken:BTC
1970-01-01 open Assets:Crypto:Kraken:ETH
1970-01-01 open Assets:Crypto:Kraken:ADA
1970-01-01 open Assets:Crypto:Binance:ADA
 
; Wallet Accounts - Organized by Type
1970-01-01 open Assets:Crypto:Wallet:Ledger:BTC
1970-01-01 open Assets:Crypto:Wallet:Ledger:ETH
1970-01-01 open Assets:Crypto:Wallet:MetaMask:ETH
1970-01-01 open Assets:Crypto:Wallet:MetaMask:USDC
1970-01-01 open Assets:Crypto:Wallet:MetaMask:UNI
1970-01-01 open Assets:Crypto:Wallet:TrustWallet:BNB
 
; DeFi Protocol Accounts
1970-01-01 open Assets:DeFi:Uniswap:ETH-USDC-LP
1970-01-01 open Assets:DeFi:Compound:CUSDC
1970-01-01 open Assets:Staking:Ethereum:ETH
1970-01-01 open Assets:Staking:Cardano:ADA
 
; Income Tracking
1970-01-01 open Income:Crypto:Staking:ETH
1970-01-01 open Income:Crypto:Staking:ADA
1970-01-01 open Income:Crypto:Mining:BTC
1970-01-01 open Income:Crypto:Airdrops
1970-01-01 open Income:Crypto:DeFi:Yield
1970-01-01 open Income:Crypto:Arbitrage
1970-01-01 open Income:CapitalGains:Crypto
1970-01-01 open Income:CapitalGains:LongTerm
 
; Expense Tracking
1970-01-01 open Expenses:Crypto:Fees:Trading
1970-01-01 open Expenses:Crypto:Fees:Network
1970-01-01 open Expenses:Crypto:Fees:Withdrawal
1970-01-01 open Expenses:CapitalLoss:Crypto

Una regola di denominazione morde qui, e il parser la impone più che come convenzione: ogni componente di un conto, e ogni simbolo di commodity, deve iniziare con una lettera maiuscola o una cifra. Compound scrive il suo token di ricevuta cUSDC in tutta la propria interfaccia, ma Assets:DeFi:Compound:cUSDC e una commodity cUSDC sono entrambi errori del lexer. Scrivili CUSDC e conserva la grafia propria del protocollo nei metadati name: della commodity.

Definizioni di Commodity con Metadata​

Definisci le tue criptovalute con metadati ricchi per un monitoraggio migliore:

1970-01-01 commodity BTC
  name: "Bitcoin"
  asset-class: "cryptocurrency"
  sector: "digital-currency"
  price-source: "coinbase"
  website: "https://bitcoin.org"
 
1970-01-01 commodity ETH
  name: "Ethereum"
  asset-class: "cryptocurrency"
  sector: "smart-contract-platform"
  price-source: "coinbase"
  website: "https://ethereum.org"
 
1970-01-01 commodity ADA
  name: "Cardano"
  asset-class: "cryptocurrency"
  sector: "smart-contract-platform"
  price-source: "binance"
  website: "https://cardano.org"
 
1970-01-01 commodity DOT
  name: "Polkadot"
  asset-class: "cryptocurrency"
  sector: "interoperability"
  price-source: "kraken"
  website: "https://polkadot.network"

Monitoraggio del Portafoglio Multi-Exchange​

Registrare gli Acquisti Attraverso gli Exchange​

Monitora la stessa criptovaluta su exchange diversi con una base di costo precisa:

; Bitcoin purchases on different exchanges
2024-01-15 * "Buy BTC on Coinbase"
  Assets:Crypto:Coinbase:BTC      1.0 BTC {45000.00 USD}
  Assets:Crypto:Coinbase:USD  -45000.00 USD
  Expenses:Crypto:Fees:Trading    50.00 USD
  Assets:Crypto:Coinbase:USD     -50.00 USD
 
2024-01-20 * "Buy BTC on Binance"
  Assets:Crypto:Binance:BTC       0.5 BTC {46000.00 USD}
  Assets:Crypto:Binance:USD   -23000.00 USD
  Expenses:Crypto:Fees:Trading    25.00 USD
  Assets:Crypto:Binance:USD      -25.00 USD
 
2024-01-25 * "Buy BTC on Kraken"
  Assets:Crypto:Kraken:BTC        0.8 BTC {44000.00 USD}
  Assets:Crypto:Kraken:USD    -35200.00 USD
  Expenses:Crypto:Fees:Trading    30.00 USD
  Assets:Crypto:Kraken:USD       -30.00 USD

Trasferimenti tra Exchange​

Monitora i trasferimenti tra exchange mantenendo la base di costo:

2024-02-01 * "Transfer BTC from Coinbase to Ledger"
  Assets:Crypto:Coinbase:BTC      -0.5 BTC {45000.00 USD}
  Assets:Crypto:Wallet:Ledger:BTC  0.5 BTC {45000.00 USD}
  Expenses:Crypto:Fees:Withdrawal  0.0005 BTC {45000.00 USD}
  Assets:Crypto:Coinbase:BTC      -0.0005 BTC {45000.00 USD}

Opportunità di Arbitraggio​

Un arbitraggio è un unico evento economico su due venue, quindi registralo come una sola transazione. Questa voce vende 10 ETH che già possiedi su Coinbase a $2.580,00 e ripristina immediatamente la posizione su Binance a $2.500,00:

2024-02-10 * "Arbitrage: Buy ETH on Binance, Sell on Coinbase"
  ; Buy leg on Binance
  Assets:Crypto:Binance:ETH       10 ETH {2500.00 USD}
  Assets:Crypto:Binance:USD   -25000.00 USD
  Expenses:Crypto:Fees:Trading    25.00 USD
  Assets:Crypto:Binance:USD      -25.00 USD
  ; Sell leg on Coinbase, at the higher price
  Assets:Crypto:Coinbase:ETH     -10 ETH {2500.00 USD} @ 2580.00 USD
  Assets:Crypto:Coinbase:USD   25800.00 USD
  Expenses:Crypto:Fees:Trading    30.00 USD
  Assets:Crypto:Coinbase:USD     -30.00 USD
  Income:Crypto:Arbitrage       -800.00 USD  ; 25,800.00 proceeds - 25,000.00 basis

Tre cose da copiare:

  • Non lasciare mai una riga vuota tra le posting. Una riga vuota termina la transazione, e Beancount segnala un errore di sintassi sulle posting successive. Usa commenti ; indentati per etichettare le gambe — che è ciò che stanno facendo le due righe di commento sopra.
  • Il guadagno è quello della dismissione, $800,00, ed è negativo perché i conti Income contengono crediti. I $55,00 di commissioni sono separati: è ciò che trasforma $800,00 di spread lordo in $745,00 di profitto, ed è già registrato nelle proprie due posting.
  • La gamba di vendita riduce un lotto che devi già possedere. Questa voce presuppone 10 ETH acquistati in precedenza su Coinbase a $2.500,00; senza quel lotto la riduzione non ha nulla contro cui essere registrata.

Gestione avanzata della base di costo​

Tracciamento basato sui lotti​

Il sistema basato su lotti di Beancount.io fornisce un tracciamento preciso della base di costo:

; Multiple purchases at different prices
2024-01-01 * "BTC Purchase Lot 1"
  Assets:Crypto:Coinbase:BTC  1.0 BTC {40000.00 USD}
  Assets:Crypto:Coinbase:USD -40000.00 USD
 
2024-02-01 * "BTC Purchase Lot 2"
  Assets:Crypto:Coinbase:BTC  1.0 BTC {45000.00 USD}
  Assets:Crypto:Coinbase:USD -45000.00 USD
 
2024-03-01 * "BTC Purchase Lot 3"
  Assets:Crypto:Coinbase:BTC  1.0 BTC {50000.00 USD}
  Assets:Crypto:Coinbase:USD -50000.00 USD

La convenzione del segno per guadagni e perdite​

I conti Income contengono crediti, quindi Beancount li memorizza come numeri negativi. Ogni guadagno qui sotto è quindi una posting negativa su un conto di reddito, e ogni perdita è una posting positiva su un conto di spesa. La commissione è separata da entrambi: è una spesa a sé stante, quindi sottrarla anche dal guadagno la dedurrebbe due volte e lascerebbe la transazione sbilanciata.

Per una dismissione l'aritmetica è sempre:

gain (or loss) = gross proceeds - cost basis of the lots removed
net cash       = gross proceeds - fees

Metodo di identificazione specifica​

Vendi lotti specifici per una gestione fiscale ottimale. Indicare il costo del lotto nella posting di riduzione è ciò che significa "identificazione specifica" in Beancount, e funziona con il booking predefinito STRICT:

; Sell the most expensive lot: 1.0 BTC bought at $50,000.00
2024-04-01 * "Sell BTC Lot 3 for tax optimization"
  Assets:Crypto:Coinbase:BTC    -1.0 BTC {50000.00 USD} @ 48000.00 USD
  Assets:Crypto:Coinbase:USD   48000.00 USD  ; gross proceeds
  Expenses:Crypto:Fees:Trading    50.00 USD
  Assets:Crypto:Coinbase:USD     -50.00 USD
  Expenses:CapitalLoss:Crypto   2000.00 USD  ; 50,000.00 basis - 48,000.00 proceeds

Vendita del lotto più vecchio o più recente​

Indicare un costo diverso seleziona un lotto diverso. Queste due vendite prendono prima il lotto da $40.000,00 e poi quello da $45.000,00 — i due ancora in piedi dopo che quello da $50.000,00 è stato usato nell'esempio sopra — che è la stessa selezione che FIFO e LIFO farebbero automaticamente, scritta a mano:

; Sell the oldest lot (bought 2024-01-01 at $40,000.00)
2024-05-01 * "Sell 0.5 BTC from the oldest lot"
  Assets:Crypto:Coinbase:BTC    -0.5 BTC {40000.00 USD} @ 52000.00 USD
  Assets:Crypto:Coinbase:USD   26000.00 USD  ; gross proceeds, 0.5 * 52,000.00
  Expenses:Crypto:Fees:Trading    30.00 USD
  Assets:Crypto:Coinbase:USD     -30.00 USD
  Income:CapitalGains:Crypto   -6000.00 USD  ; 26,000.00 proceeds - 20,000.00 basis
 
; Sell the newest remaining lot (bought 2024-02-01 at $45,000.00)
2024-05-02 * "Sell 0.5 BTC from the newest lot"
  Assets:Crypto:Coinbase:BTC    -0.5 BTC {45000.00 USD} @ 52000.00 USD
  Assets:Crypto:Coinbase:USD   26000.00 USD
  Expenses:Crypto:Fees:Trading    30.00 USD
  Assets:Crypto:Coinbase:USD     -30.00 USD
  Income:CapitalGains:Crypto   -3500.00 USD  ; 26,000.00 proceeds - 22,500.00 basis

Stesso prezzo di vendita, lotto diverso, $2.500,00 di differenza nel guadagno realizzato. Se preferisci che sia Beancount a scegliere il lotto per te, imposta un metodo di booking sul conto invece di indicare un costo — "FIFO", "LIFO" o "HIFO" nella direttiva open, descritto in Inventory Management.

Analisi della Performance del Portafoglio​

Configurazione del Monitoraggio dei Prezzi​

Configura feed di prezzi automatizzati per una valutazione accurata:

Per i libri ospitati, Live Prices fornisce automaticamente le coppie supportate. Le direttive statiche qui sotto mostrano i dati che una valutazione utilizza e rimangono utili per esempi locali riproducibili.

; Daily price updates
2024-01-15 price BTC 45000.00 USD
2024-01-15 price ETH 2500.00 USD
2024-01-15 price ADA 0.50 USD
 
2024-01-16 price BTC 46000.00 USD
2024-01-16 price ETH 2550.00 USD
2024-01-16 price ADA 0.52 USD

Monitoraggio dell'Allocazione del Portafoglio​

Usa le funzionalità di reporting di Beancount.io per analizzare l'allocazione:

-- Query for portfolio allocation by asset
SELECT
  account,
  sum(position) as balance,
  value(sum(position)) as market_value
WHERE account ~ "Assets:Crypto"
GROUP BY 1
ORDER BY market_value DESC

Indicatori di Performance​

Monitora gli indicatori chiave di performance:

-- Total portfolio value query
SELECT
  sum(value(position)) as total_portfolio_value
WHERE account ~ "Assets:Crypto"
 
-- Realized gains/losses
SELECT
  sum(position) as realized_gains
WHERE account ~ "Income:CapitalGains:Crypto"

Integrazione Staking e DeFi​

Monitoraggio delle Ricompense di Staking​

Registra le ricompense di staking con una corretta rilevazione del reddito. Le unità che arrivano e il reddito rilevato sono lo stesso evento visto da due lati, quindi i loro pesi devono annullarsi: [units] × [price] di asset in entrata, lo stesso numero di dollari di reddito in uscita — e il reddito è un credito, quindi è negativo.

2024-01-31 * "ETH Staking Rewards - January"
  Assets:Staking:Ethereum:ETH     0.08 ETH {2500.00 USD}
  Income:Crypto:Staking:ETH     -200.00 USD  ; 0.08 * 2,500.00
 
2024-01-31 * "ADA Staking Rewards - January"
  Assets:Staking:Cardano:ADA        25 ADA {0.50 USD}
  Income:Crypto:Staking:ADA      -12.50 USD  ; 25 * 0.50

I {2.500,00 USD} e {0,50 USD} sono valutazioni esterne. Beancount memorizza ciò che scrivi; non recupera un prezzo né decide quale quotazione sia quella giusta. Scegli una fonte — l'exchange su cui venderesti effettivamente, o un indice pubblicato — e usala in modo coerente, perché quel numero è sia il tuo reddito sia la tua futura base di costo.

La base della ricompensa è riconosciuta una sola volta​

I $200,00 rilevati sopra diventano la base di costo dei 0,08 ETH. Venderli in seguito realizza solo il movimento dal giorno della ricompensa:

2024-06-30 * "Sell the January ETH staking reward"
  Assets:Staking:Ethereum:ETH   -0.08 ETH {2500.00 USD} @ 3000.00 USD
  Assets:Crypto:Coinbase:USD     240.00 USD  ; gross proceeds, 0.08 * 3,000.00
  Income:CapitalGains:Crypto     -40.00 USD  ; 240.00 proceeds - 200.00 basis

$40,00 di plusvalenza, non $240,00 — i primi $200,00 erano già reddito a gennaio. Registrare l'intero importo di $240,00 come guadagno è il modo più comune in cui il reddito da ricompense viene contato due volte. Quando la ricompensa diventa imponibile, e a quale aliquota, varia in base alla giurisdizione; il ledger registra ricezione e dismissione separatamente, così entrambi i trattamenti possono essere riportati da esso.

Monitoraggio dei Rendimenti DeFi​

Monitora posizioni DeFi complesse:

Fornire liquidità scambia due commodity con una terza, quindi ogni gamba deve pesare nella stessa valuta prima che la transazione possa bilanciarsi. Le gambe ETH e LP già lo fanno, perché portano un costo; la gamba stablecoin necessita di un @ 1,00 USD esplicito, altrimenti Beancount vede 25.000 unità di USDC in uscita e $25.000,00 di valore in entrata, che sono commodity diverse e non si annullano.

2024-02-01 * "Uniswap LP Position"
  Assets:Crypto:Wallet:MetaMask:ETH    -10 ETH {2500.00 USD}
  Assets:Crypto:Wallet:MetaMask:USDC -25000 USDC @ 1.00 USD
  Assets:DeFi:Uniswap:ETH-USDC-LP      100 UNI-V2-ETH-USDC {500.00 USD}
 
2024-02-28 * "Uniswap LP Rewards - February"
  Assets:Crypto:Wallet:MetaMask:UNI    50 UNI {8.00 USD}
  Income:Crypto:DeFi:Yield          -400.00 USD  ; 50 * 8.00

Gestione Automatizzata del Portafoglio​

Importazione dati exchange​

Beancount non include alcun client API per exchange, e non esiste un file di configurazione che lo faccia comunicare con Coinbase o Binance. Il percorso supportato è un importer: scarichi l'esportazione CSV dell'exchange (o la recuperi con il tuo script) e la converti in transazioni Beancount con beangulp, il framework di importer che è succeduto a beancount.ingest integrato in Beancount 2. beancount.ingest non esiste in Beancount 3.

Se scrivi davvero uno script di recupero, il suo file di credenziali è solo tuo — nulla nella toolchain di Beancount lo legge:

# Configuration for YOUR OWN fetch script. No Beancount tool reads this file.
exchanges:
  coinbase:
    api_key: "your_api_key"
    api_secret: "your_api_secret"
    passphrase: "your_passphrase"
  binance:
    api_key: "your_api_key"
    api_secret: "your_api_secret"

Riconciliazione Automatica​

Configura una verifica automatizzata dei saldi:

; Balance assertions for automated verification
2024-01-31 balance Assets:Crypto:Coinbase:BTC    2.5 BTC
2024-01-31 balance Assets:Crypto:Binance:ETH    15.0 ETH
2024-01-31 balance Assets:Crypto:Kraken:ADA   1000.0 ADA

Quei tre numeri provengono dalle schermate del tuo exchange, non da questa pagina, quindi il blocco sopra non verificherà nulla finché le tue transazioni non saranno nel ledger. Due regole decidono se verificherà affatto. Una direttiva balance afferma il saldo all'inizio del giorno indicato, quindi un'asserzione datata 2024-01-31 non vede nulla registrato il 2024-01-31 — datala al giorno successivo al periodo che stai chiudendo. E ogni conto asserito deve essere aperto, motivo per cui Assets:Crypto:Kraken:ADA appare nella sezione Gerarchia di conti di base sopra.

Prezzi gestiti in un ledger ospitato​

Usa Live Prices per scegliere una valuta di valutazione e gli asset crypto supportati, poi incolla gli include generati nel tuo ledger ospitato. I simboli degli asset devono corrispondere alle tue partecipazioni. I feed forniscono prezzi di valutazione datati; non impostano l'importo del reddito né il costo di acquisizione delle ricompense di staking e degli airdrop.

Il tuo prezzo ha precedenza per la stessa data e coppia, inclusa la coppia reciproca. Una quotazione in cache può essere obsoleta durante un'interruzione, quindi controlla il suo orario di osservazione. Il flusso di lavoro di recupero locale qui sotto rimane utile per Beancount e Fava upstream.

Mantenere i prezzi aggiornati​

I prezzi vivono nel ledger come direttive price. Beancount 3.2.3 upstream non li recupera da solo; gli include gestiti ospitati usano l'estensione del loader di Beancount.io descritta sopra. Non esiste alcuna direttiva custom "price-source" — un simbolo di commodity nudo non è nemmeno un valore custom valido, quindi quella riga è un errore di sintassi — e nessun modulo beancount.plugins.forecast; il loader si interrompe con un errore di import se lo nomini.

Abilita beanprice all'interno del motore gestito con bea engine enable beanprice, poi recupera le quotazioni con bea price main.beancount. Legge un campo di metadati price: su ogni direttiva commodity, nella forma "<quote currency>:<source module>/<ticker>", e scrive direttive price che aggiungi al tuo ledger:

1970-01-01 commodity BTC
  name: "Bitcoin"
  asset-class: "cryptocurrency"
  price: "USD:beanprice.sources.coinbase/BTC-USD"
 
1970-01-01 commodity ETH
  name: "Ethereum"
  asset-class: "cryptocurrency"
  price: "USD:beanprice.sources.coinbase/ETH-USD"
 
; Example quotes to append after reviewing the output of bea price - and what you would otherwise type by hand
2024-01-15 price BTC 45000.00 USD
2024-01-15 price ETH 2500.00 USD

Qualsiasi altro metadato che alleghi a una commodity — sector, website, o il campo price-source usato prima in questa guida — è documentazione libera a tuo beneficio. Il loader lo memorizza e nessuno strumento agisce su di esso.

Strategie di Ottimizzazione Fiscale​

Realizzazione Sistemica di Perdite Fiscali​

Implementa una raccolta sistematica delle perdite fiscali:

; The lot being harvested, so this block stands on its own
2024-03-01 * "Buy ADA on Binance"
  Assets:Crypto:Binance:ADA       1000 ADA {0.60 USD}
  Assets:Crypto:Binance:USD    -600.00 USD
 
; Identify positions with unrealized losses
2024-12-15 * "Tax loss harvesting - Sell ADA at loss"
  Assets:Crypto:Binance:ADA      -1000 ADA {0.60 USD} @ 0.45 USD
  Assets:Crypto:Binance:USD       450.00 USD  ; gross proceeds
  Expenses:Crypto:Fees:Trading      5.00 USD
  Assets:Crypto:Binance:USD        -5.00 USD
  Expenses:CapitalLoss:Crypto     150.00 USD  ; 600.00 basis - 450.00 proceeds
 
; Repurchase after wash sale period (31 days)
2025-01-16 * "Repurchase ADA after wash sale period"
  Assets:Crypto:Binance:ADA      1000 ADA {0.45 USD}
  Assets:Crypto:Binance:USD     -450.00 USD
  Expenses:Crypto:Fees:Trading     5.00 USD
  Assets:Crypto:Binance:USD       -5.00 USD

Guadagni a Lungo Termine vs Breve Termine​

Monitora i periodi di detenzione per l'ottimizzazione fiscale:

; Use metadata to track purchase dates
2024-01-01 * "BTC Purchase - Long-term hold" ^long-term-btc
  Assets:Crypto:Coinbase:BTC  1.0 BTC {40000.00 USD}
  Assets:Crypto:Coinbase:USD -40000.00 USD
 
; Sell after one year for long-term capital gains treatment
2025-01-02 * "BTC Sale - Long-term capital gains" ^long-term-btc
  Assets:Crypto:Coinbase:BTC    -1.0 BTC {40000.00 USD} @ 55000.00 USD
  Assets:Crypto:Coinbase:USD   55000.00 USD
  Income:CapitalGains:LongTerm -15000.00 USD  ; 55,000.00 proceeds - 40,000.00 basis

Il link ^long-term-btc su entrambe le voci è ciò che ti permette di recuperare insieme acquisto e vendita in seguito; Beancount non traccia i periodi di detenzione da solo.

Reportistica e Analisi​

Rapporti riepilogativi del portafoglio​

Calcola la quota di ciascuna criptovaluta nel portafoglio in un'unica valuta di valutazione. Questo esempio usa i prezzi in USD disponibili al 31 marzo 2024 e le disponibilità precedenti al 1° aprile. Cambia entrambe le date insieme per una diversa data di reporting. Esegui l'istruzione SELECT sotto nel tuo strumento di query BQL locale.

-- Portfolio allocation by cryptocurrency
SELECT
  currency,
  units(sum(position)) AS total_units,
  convert(sum(position), 'USD', 2024-03-31) AS allocation_value
FROM close ON 2024-04-01
WHERE account ~ '^Assets:Crypto:'
GROUP BY currency
ORDER BY currency;

Verifica che ogni allocation_value diverso da zero sia in USD prima di calcolare le percentuali. La conversione usa i prezzi registrati disponibili alla data di valutazione o prima. Una conversione mancante può lasciare un importo nella sua valuta originale. Se rimane qualsiasi importo in BTC, ETH o altra valuta non USD, la valutazione è incompleta. Aggiungi i prezzi datati mancanti e riesegui; non trattare gli asset senza prezzo come zero né sommare unità di valuta non correlate.

Somma gli importi in USD per ottenere il totale del portafoglio. Poi calcola l'allocazione di ciascun asset come valore USD dell'asset / valore USD totale * 100. Mantieni la precisione completa fino a quando visualizzi la percentuale. Per esempio, disponibilità di 1 BTC e 3 ETH, prezzate a 200 USD per BTC e 20 USD per ETH, danno:

AssetValore USDCalcolo dell'allocazioneQuota visualizzata
BTC200200 / 260 * 10076,92%
ETH6060 / 260 * 10023,08%
Totale260260 / 260 * 100100,00%

Arrotondare le singole quote a due decimali può far differire leggermente la loro somma visualizzata da 100%. Un inventario con valore zero può essere visualizzato come vuoto. Per un portafoglio vuoto o un totale USD pari a zero, riporta le allocazioni come non disponibili e non dividere per zero. Questo esempio descrive disponibilità positive di asset; i saldi negativi richiedono di interpretare le esposizioni con segno invece delle normali quote di portafoglio.

Analisi delle prestazioni​

Riporta il valore di chiusura del portafoglio di ciascun mese usando tutte le disponibilità precedenti al mese successivo. Imposta la data di valutazione a fine mese in modo che i prezzi successivi non possano cambiare lo snapshot. Questi esempi riportano in USD. Esegui ogni SELECT separatamente nel tuo strumento di query BQL locale.

Per il 31 gennaio:

SELECT convert(sum(position), 'USD', 2024-01-31) AS portfolio_value
FROM close ON 2024-02-01
WHERE account ~ '^Assets:Crypto:';

Per il 29 febbraio:

SELECT convert(sum(position), 'USD', 2024-02-29) AS portfolio_value
FROM close ON 2024-03-01
WHERE account ~ '^Assets:Crypto:';

Per il 31 marzo:

SELECT convert(sum(position), 'USD', 2024-03-31) AS portfolio_value
FROM close ON 2024-04-01
WHERE account ~ '^Assets:Crypto:';

FROM close ON esclude le posting datate al cutoff o dopo. La data all'interno di convert seleziona i prezzi disponibili alla data di reporting o prima. Per un altro mese, cambia entrambe le date insieme. Richiedi ogni mese che vuoi riportare, inclusi i mesi senza transazioni. Verifica le valute non convertite come descritto sopra prima di trattare il risultato come un totale in USD.

Per esempio, supponi che gennaio si chiuda con 2 BTC prezzati a 100 USD ciascuno e 3 ETH a 10 USD ciascuno. Vendere 1 BTC a febbraio lascia 1 BTC e 3 ETH. Se marzo non ha scambi ma i prezzi registrati salgono a 200 USD per BTC e 20 USD per ETH, gli snapshot sono:

Fine meseValore crypto di chiusura
31 gennaio2 * 100 + 3 * 10 = 230 USD
29 febbraio1 * 100 + 3 * 10 = 130 USD
31 marzo1 * 200 + 3 * 20 = 260 USD

Il valore di febbraio presuppone nessuna nuova direttiva di prezzo in quel mese. Il prezzo @ di una vendita registra il suo ricavo; non crea una direttiva di prezzo di mercato. Queste query coprono solo i conti Assets:Crypto:, quindi i ricavi in contanti detenuti altrove sono esclusi.

Raggruppare le posting per mese di transazione misura i movimenti di ciascun mese, non le disponibilità cumulative di chiusura. Omette anche i mesi senza transazioni. Le variazioni tra i valori di chiusura includono acquisti, vendite, trasferimenti e variazioni di prezzo. Non sono rendimenti di investimento corretti per i flussi di cassa.

Analisi del reddito​

Analizza le fonti di reddito:

-- Income breakdown by source
SELECT
  account,
  sum(position) as total_income
WHERE account ~ "Income:Crypto"
GROUP BY account
ORDER BY total_income DESC;

Best practice e consigli​

1. Registrazione coerente​

  • Registra le transazioni immediatamente dopo l'esecuzione
  • Usa descrizioni standardizzate per le transazioni
  • Includi gli hash delle transazioni nei metadati

2. Riconciliazione regolare​

  • Verifica i saldi settimanalmente su tutte le piattaforme
  • Usa le asserzioni di saldo per individuare discrepanze
  • Monitora le transazioni mancanti

3. Backup e sicurezza​

  • Esegui regolarmente il backup dei tuoi file Beancount
  • Usa il controllo di versione (Git) per tracciare le modifiche
  • Cripta i dati sensibili

4. Documentazione​

  • Documenta le decisioni sulla struttura dei tuoi conti
  • Mantieni note sulle transazioni complesse
  • Conserva i record delle configurazioni API

5. Preparazione fiscale​

  • Genera report trimestrali per la pianificazione fiscale
  • Mantieni registri dettagliati per scopi di audit
  • Consulta professionisti fiscali per situazioni complesse

Conclusione​

Un monitoraggio efficace del portafoglio di criptovalute richiede precisione, coerenza e gli strumenti giusti. Beancount.io fornisce la flessibilità e la potenza necessarie per gestire portafogli crypto complessi su più exchange, wallet e protocolli DeFi.

Vantaggi chiave dell'uso di Beancount.io per il monitoraggio del portafoglio crypto:

  • Proprietà completa dei dati: i tuoi dati in formato testo semplice
  • Base di costo precisa: tracciamento basato su lotti con identificazione specifica
  • Flessibilità illimitata: strutture di conti e reporting personalizzati
  • Ottimizzazione fiscale: strategie avanzate per minimizzare il carico fiscale
  • A prova di futuro: il formato aperto garantisce accessibilità a lungo termine

Inizia con una configurazione di base e amplia gradualmente il tuo monitoraggio man mano che il tuo portafoglio diventa più complesso. L'investimento in una corretta configurazione darà i suoi frutti in termini di reporting accurato, ottimizzazione fiscale e approfondimenti sul portafoglio.

Pronto a prendere il controllo del tuo portafoglio di criptovalute? Inizia con Beancount.io oggi stesso.

Fonte: https://beancount.io/it/docs/Solutions/cryptocurrency-portfolio-tracking