Salta al contenuto principale

Modelli di transazioni crypto Beancount pronti da copiare

Modelli Beancount da compilare, ciascuno con un esempio caricabile, per acquisti, vendite, swap, trasferimenti, staking, prestiti DeFi, mining e airdrop di criptovalute.

Questa guida fornisce template Beancount pratici ed esempi reali per gli scenari più comuni con le criptovalute. Copia e adatta questi template alle tue esigenze di contabilità crypto.

Come leggere questi blocchi​

Ogni blocco delimitato qui sotto è una di tre cose, e non sono intercambiabili:

  • I Template contengono segnaposto [TRA_PARENTESI] e date YYYY-MM-DD. Non verranno caricati finché non sostituisci i valori reali — le parentesi non sono sintassi Beancount.
  • Gli Esempi si trovano direttamente sotto il loro template, riportano date e importi reali, e sono scritti per essere caricati. Ognuno di essi richiede comunque che i conti che tocca siano aperti, ed è proprio a questo che serve il Template della Struttura dei Conti qui sotto. L'unica eccezione è il blocco di riconciliazione, che verifica saldi che solo il tuo ledger può soddisfare.
  • Il blocco Arbitraggio con Flash Loan è pseudocodice, ed è etichettato come tale dove appare.

Due convenzioni attraversano tutti quanti:

  • I conti di ricavo contengono accrediti, quindi sono negativi. Una plusvalenza realizzata è una scrittura negativa su Income:CapitalGains:…; una minusvalenza realizzata è una scrittura positiva su Expenses:CapitalLoss:…. Invertire questo ordine è il modo più comune in cui una registrazione crypto non quadra.
  • Una commissione viene registrata una volta come spesa e una volta come riduzione di liquidità. Il ricavo lordo va sul conto di liquidità, la commissione ne esce, e la differenza è ciò che effettivamente arriva sul tuo conto.

Esplora un ledger di esempio sulle criptovalute dal vivo:

Apri Ledger di Esempio sulle Criptovalute in una nuova scheda

Modello di Configurazione di Base​

Modello di Struttura dei Conti​

; =============================================================================
; CRYPTOCURRENCY ACCOUNT SETUP TEMPLATE
; =============================================================================
 
; Bank Accounts
1970-01-01 open Assets:Checking
 
; Exchange Accounts
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: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:Binance:ADA
 
; On-Chain and Mining Accounts
1970-01-01 open Assets:Crypto:Ethereum:ETH
1970-01-01 open Assets:Crypto:Polygon:ETH
1970-01-01 open Assets:Crypto:Mining:BTC
 
; Wallet Accounts
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
 
; 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
 
; Income Accounts
1970-01-01 open Income:Crypto:Staking:ETH
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:CapitalGains:Crypto
1970-01-01 open Income:CapitalGains:LongTerm
 
; Expense Accounts
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:Crypto:Bridge:Fees
1970-01-01 open Expenses:Crypto:Mining:Electricity
1970-01-01 open Expenses:CapitalLoss:Crypto
 
; Commodity Definitions
1970-01-01 commodity BTC
  name: "Bitcoin"
  asset-class: "cryptocurrency"
 
1970-01-01 commodity ETH
  name: "Ethereum"
  asset-class: "cryptocurrency"
 
1970-01-01 commodity USDC
  name: "USD Coin"
  asset-class: "stablecoin"
 
; Compound writes this receipt token "cUSDC", but a Beancount commodity
; and every account component must start with a capital letter or a digit,
; so the ledger spells it CUSDC and keeps the display name in metadata.
1970-01-01 commodity CUSDC
  name: "cUSDC (Compound USD Coin)"
  asset-class: "defi-receipt"

Modelli di Trading​

Acquisto di Base di Criptovaluta​

; Template: Buy cryptocurrency on exchange
YYYY-MM-DD * "Buy [AMOUNT] [CRYPTO] on [EXCHANGE]"
  Assets:Crypto:[EXCHANGE]:[CRYPTO]     [AMOUNT] [CRYPTO] {[PRICE] USD}
  Assets:Crypto:[EXCHANGE]:USD         -[TOTAL_COST] USD
  Expenses:Crypto:Fees:Trading          [FEE] USD
  Assets:Crypto:[EXCHANGE]:USD         -[FEE] USD
 
; Example: Buy 1 BTC on Coinbase
2024-01-15 * "Buy 1 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

Vendita di Criptovaluta​

; Template: Sell cryptocurrency on exchange
YYYY-MM-DD * "Sell [AMOUNT] [CRYPTO] on [EXCHANGE]"
  Assets:Crypto:[EXCHANGE]:[CRYPTO]    -[AMOUNT] [CRYPTO] {[COST_BASIS] USD} @ [SALE_PRICE] USD
  Assets:Crypto:[EXCHANGE]:USD          [GROSS_PROCEEDS] USD
  Expenses:Crypto:Fees:Trading          [FEE] USD
  Assets:Crypto:[EXCHANGE]:USD         -[FEE] USD
  Income:CapitalGains:Crypto           -[GAIN] USD  ; a loss is a positive Expenses:CapitalLoss:Crypto instead
 
; Example: Sell 0.5 BTC with a gain
2024-03-20 * "Sell 0.5 BTC on Coinbase"
  Assets:Crypto:Coinbase:BTC     -0.5 BTC {45000.00 USD} @ 48000.00 USD
  Assets:Crypto:Coinbase:USD   24000.00 USD  ; gross proceeds, 0.5 * 48,000.00
  Expenses:Crypto:Fees:Trading    30.00 USD
  Assets:Crypto:Coinbase:USD     -30.00 USD  ; the fee leaves the same cash account
  Income:CapitalGains:Crypto   -1500.00 USD  ; 24,000.00 proceeds - 22,500.00 basis

Il lotto ceduto vale $22.500,00 al costo, la vendita incassa $24.000,00 lordi, e $30,00 di questi vanno all'exchange — quindi arrivano $23.970,00 di liquidità e si realizza una plusvalenza di $1.500,00. Non compensare la commissione nella plusvalenza: la commissione è già una spesa, e sottrarla una seconda volta è ciò che lascia la transazione non bilanciata.

Scambio Criptovaluta-Criptovaluta​

; Template: Trade one crypto for another
YYYY-MM-DD * "Trade [AMOUNT1] [CRYPTO1] for [AMOUNT2] [CRYPTO2]"
  Assets:Crypto:[EXCHANGE]:[CRYPTO1]   -[AMOUNT1] [CRYPTO1] {[COST_BASIS] USD}
  Assets:Crypto:[EXCHANGE]:[CRYPTO2]    [AMOUNT2] [CRYPTO2] {[NEW_PRICE] USD}
  Income:CapitalGains:Crypto           -[GAIN] USD  ; taxable event; a loss is a positive Expenses:CapitalLoss:Crypto
  Expenses:Crypto:Fees:Trading          [FEE] USD
  Assets:Crypto:[EXCHANGE]:USD         -[FEE] USD
 
; Example: Trade BTC for ETH
2024-02-10 * "Trade 1 BTC for 20 ETH on Binance"
  Assets:Crypto:Binance:BTC     -1.0 BTC {46000.00 USD}
  Assets:Crypto:Binance:ETH      20 ETH {2400.00 USD}
  Income:CapitalGains:Crypto  -2000.00 USD  ; 48,000.00 received - 46,000.00 basis
  Expenses:Crypto:Fees:Trading    40.00 USD
  Assets:Crypto:Binance:USD      -40.00 USD

Uno scambio crypto-to-crypto cede la prima commodity, quindi realizza una plusvalenza esattamente come una vendita in contanti: 20 ETH acquisiti a $2.400,00 sono $48.000,00 di valore ricevuto contro $46.000,00 di base di costo dei BTC. La commissione di $40,00 è pagata in contanti e non modifica la plusvalenza.

Modelli di Trasferimento​

Trasferimento da Scambio a Portafoglio​

; Template: Transfer crypto from exchange to wallet
YYYY-MM-DD * "Transfer [AMOUNT] [CRYPTO] from [EXCHANGE] to [WALLET]"
  Assets:Crypto:[EXCHANGE]:[CRYPTO]      -[AMOUNT] [CRYPTO] {[COST_BASIS] USD}
  Assets:Crypto:Wallet:[WALLET]:[CRYPTO]  [AMOUNT] [CRYPTO] {[COST_BASIS] USD}
  Expenses:Crypto:Fees:Withdrawal         [FEE] [CRYPTO] {[COST_BASIS] USD}
  Assets:Crypto:[EXCHANGE]:[CRYPTO]      -[FEE] [CRYPTO] {[COST_BASIS] USD}
 
; Example: Transfer BTC to Ledger
2024-01-20 * "Transfer 1 BTC from Coinbase to Ledger"
  Assets:Crypto:Coinbase:BTC      -1.0 BTC {45000.00 USD}
  Assets:Crypto:Wallet:Ledger:BTC  1.0 BTC {45000.00 USD}
  Expenses:Crypto:Fees:Withdrawal  0.0005 BTC {45000.00 USD}
  Assets:Crypto:Coinbase:BTC      -0.0005 BTC {45000.00 USD}

Un trasferimento non è una cessione, quindi non realizza nulla: lo stesso costo {45000.00 USD} viaggia con le monete e il conto di destinazione eredita la base di costo. Ne conseguono due cose. La commissione di prelievo è pagata in BTC ed è spesata a quello stesso costo, quindi non realizza nemmeno essa una plusvalenza — se il tuo trattamento dice diversamente, prezza la commissione con @ e aggiungi una scrittura di plusvalenza. E il conto mittente deve già detenere 1,0005 BTC a quel costo esatto, non 1,0, perché la commissione esce dallo stesso lotto. Una riduzione senza un lotto corrispondente non riesce a registrarsi, per quanto bene i totali possano sommare.

Trasferimento tra Scambi Diversi​

; Template: Transfer between exchanges
YYYY-MM-DD * "Transfer [AMOUNT] [CRYPTO] from [EXCHANGE1] to [EXCHANGE2]"
  Assets:Crypto:[EXCHANGE1]:[CRYPTO]  -[AMOUNT] [CRYPTO] {[COST_BASIS] USD}
  Assets:Crypto:[EXCHANGE2]:[CRYPTO]   [AMOUNT] [CRYPTO] {[COST_BASIS] USD}
  Expenses:Crypto:Fees:Network         [FEE] [CRYPTO] {[COST_BASIS] USD}
  Assets:Crypto:[EXCHANGE1]:[CRYPTO]  -[FEE] [CRYPTO] {[COST_BASIS] USD}
 
; Example: Transfer ETH from Coinbase to Binance
2024-02-05 * "Transfer 10 ETH from Coinbase to Binance"
  Assets:Crypto:Coinbase:ETH   -10 ETH {2500.00 USD}
  Assets:Crypto:Binance:ETH     10 ETH {2500.00 USD}
  Expenses:Crypto:Fees:Network  0.01 ETH {2500.00 USD}
  Assets:Crypto:Coinbase:ETH   -0.01 ETH {2500.00 USD}

Modelli di Staking​

Staking di Ethereum​

; Template: Stake ETH
YYYY-MM-DD * "Stake [AMOUNT] ETH"
  Assets:Crypto:Wallet:MetaMask:ETH    -[AMOUNT] ETH {[PRICE] USD}
  Assets:Staking:Ethereum:ETH           [AMOUNT] ETH {[PRICE] USD}
  Expenses:Crypto:Fees:Network          [FEE] ETH {[PRICE] USD}
  Assets:Crypto:Wallet:MetaMask:ETH    -[FEE] ETH {[PRICE] USD}
 
; Example: Stake 32 ETH
2024-01-10 * "Stake 32 ETH on Ethereum 2.0"
  Assets:Crypto:Wallet:MetaMask:ETH    -32 ETH {2500.00 USD}
  Assets:Staking:Ethereum:ETH           32 ETH {2500.00 USD}
  Expenses:Crypto:Fees:Network          0.01 ETH {2500.00 USD}
  Assets:Crypto:Wallet:MetaMask:ETH    -0.01 ETH {2500.00 USD}

Ricompense di Staking​

; Template: Receive staking rewards
YYYY-MM-DD * "[CRYPTO] Staking Rewards - [PERIOD]"
  Assets:Staking:[PROTOCOL]:[CRYPTO]    [AMOUNT] [CRYPTO] {[PRICE] USD}
  Income:Crypto:Staking:[CRYPTO]       -[VALUE] USD  ; [VALUE] = [AMOUNT] * [PRICE]
 
; Example: ETH staking rewards
2024-02-01 * "ETH Staking Rewards - January"
  Assets:Staking:Ethereum:ETH     0.08 ETH {2600.00 USD}
  Income:Crypto:Staking:ETH     -208.00 USD  ; 0.08 * 2,600.00

Una ricompensa è un ricavo ricevuto in natura, quindi le due scritture descrivono lo stesso evento da entrambi i lati: 0,08 ETH arrivano con una base di costo di $2.600,00 per unità, e il corrispondente ricavo di $208,00 è un accredito — negativo. Il {2,600.00 USD} è un prezzo esterno che devi procurarti tu; Beancount lo registra, non lo recupera. Annotalo dall'exchange o dall'indice che usi effettivamente, e mantieni la stessa fonte per tutto l'anno.

Quei $208,00 sono anche la base di costo della ricompensa da qui in avanti. Quando alla fine venderai gli 0,08 ETH, solo il movimento a partire da questa data è una plusvalenza — i $208,00 sono già stati tassati come ricavo e non devono essere riconosciuti due volte. Se il ricavo sia tassabile al momento della ricezione o della cessione varia a seconda della giurisdizione; il ledger registra i fatti in ogni caso.

Modelli DeFi​

Fornitura di Liquidità su Uniswap​

; Template: Add liquidity to Uniswap pool
YYYY-MM-DD * "Add liquidity to [TOKEN1]-[TOKEN2] pool"
  Assets:Crypto:Wallet:MetaMask:[TOKEN1]    -[AMOUNT1] [TOKEN1] {[PRICE1] USD}
  Assets:Crypto:Wallet:MetaMask:[TOKEN2]    -[AMOUNT2] [TOKEN2] {[PRICE2] USD}
  Assets:DeFi:Uniswap:[TOKEN1]-[TOKEN2]-LP   [LP_AMOUNT] [LP_TOKEN] {[LP_PRICE] USD}
  Expenses:Crypto:Fees:Network               [FEE] ETH {[ETH_PRICE] USD}
  Assets:Crypto:Wallet:MetaMask:ETH         -[FEE] ETH {[ETH_PRICE] USD}
 
; Example: Add ETH-USDC liquidity
2024-01-15 * "Add liquidity to ETH-USDC pool"
  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-V3-ETH-USDC {500.00 USD}
  Expenses:Crypto:Fees:Network          0.02 ETH {2500.00 USD}
  Assets:Crypto:Wallet:MetaMask:ETH    -0.02 ETH {2500.00 USD}

Riconcilia una commodity alla volta: $25.000,00 di ETH più $25.000,00 di USDC escono, $50.000,00 di token LP arrivano, e la commissione gas sposta $50,00 di ETH dal wallet a una spesa. La gamba in stablecoin porta @ 1.00 USD perché è detenuta senza base di costo — senza l'annotazione di prezzo il suo peso è di 25.000 USDC, che non possono annullare dollari. In molte giurisdizioni il deposito in un pool è di per sé una cessione di entrambi i token; questa registrazione porta deliberatamente avanti la base di costo, quindi aggiungi le scritture di plusvalenza se il tuo trattamento le richiede.

Prestito su Compound​

; Template: Supply assets to Compound
YYYY-MM-DD * "Supply [AMOUNT] [TOKEN] to Compound"
  Assets:Crypto:Wallet:MetaMask:[TOKEN]  -[AMOUNT] [TOKEN] @ [TOKEN_PRICE] USD
  Assets:DeFi:Compound:C[TOKEN]           [C_AMOUNT] C[TOKEN] {[C_PRICE] USD}
  Expenses:Crypto:Fees:Network            [FEE] ETH {[ETH_PRICE] USD}
  Assets:Crypto:Wallet:MetaMask:ETH      -[FEE] ETH {[ETH_PRICE] USD}
 
; Example: Supply USDC to Compound
2024-01-20 * "Supply 10000 USDC to Compound"
  Assets:Crypto:Wallet:MetaMask:USDC  -10000 USDC @ 1.00 USD
  Assets:DeFi:Compound:CUSDC             500 CUSDC {20.00 USD}
  Expenses:Crypto:Fees:Network          0.008 ETH {2500.00 USD}
  Assets:Crypto:Wallet:MetaMask:ETH    -0.008 ETH {2500.00 USD}

Due cose fanno sì che questa registrazione si carichi. La gamba in USDC porta @ 1.00 USD così entrambi i lati dello scambio pesano nella stessa valuta — senza di essa Beancount vede $10.000,00 di CUSDC che appaiono contro 10.000 unità di USDC che scompaiono, che sono commodity diverse e non si annullano. E il token di ricevuta è CUSDC, non cUSDC: una lettera iniziale minuscola è un errore del lexer sia in un componente di conto che in un simbolo di commodity, indipendentemente da come il protocollo lo scrive nella propria interfaccia.

Modelli di Mining​

Ricompense di Mining​

; Template: Receive mining rewards
YYYY-MM-DD * "[CRYPTO] Mining Reward - [POOL/SOLO]"
  Assets:Crypto:Mining:[CRYPTO]     [AMOUNT] [CRYPTO] {[PRICE] USD}
  Income:Crypto:Mining:[CRYPTO]    -[VALUE] USD  ; [VALUE] = [AMOUNT] * [PRICE]
 
; Example: Bitcoin mining reward
2024-01-15 * "BTC Mining Reward - Slush Pool"
  Assets:Crypto:Mining:BTC    0.01 BTC {45000.00 USD}
  Income:Crypto:Mining:BTC  -450.00 USD  ; 0.01 * 45,000.00

Spese di Mining​

; Template: Mining operational expenses
YYYY-MM-DD * "Mining [EXPENSE_TYPE] - [PERIOD]"
  Expenses:Crypto:Mining:[EXPENSE_TYPE]  [AMOUNT] USD
  Assets:Checking                       -[AMOUNT] USD
 
; Example: Mining electricity costs
2024-01-31 * "Mining Electricity - January"
  Expenses:Crypto:Mining:Electricity  800.00 USD
  Assets:Checking                    -800.00 USD

Modelli di Airdrop​

Token Airdrop​

; Template: Receive token airdrop
YYYY-MM-DD * "[TOKEN] Airdrop from [PROJECT]"
  Assets:Crypto:Wallet:[WALLET]:[TOKEN]  [AMOUNT] [TOKEN] {[PRICE] USD}
  Income:Crypto:Airdrops                -[VALUE] USD  ; [VALUE] = [AMOUNT] * [PRICE]
 
; Example: UNI token airdrop
2024-03-01 * "UNI Airdrop from Uniswap"
  Assets:Crypto:Wallet:MetaMask:UNI   400 UNI {8.00 USD}
  Income:Crypto:Airdrops            -3200.00 USD  ; 400 * 8.00

Come per una ricompensa di staking, il valore riconosciuto dell'airdrop diventa la sua base di costo. Registra il prezzo che puoi difendere — la prima quotazione liquida del token, da una fonte che sai nominare — piuttosto che un numero tondo.

Modelli Avanzati​

Arbitraggio Flash Loan​

Questo blocco è pseudocodice, non un template. Delinea la sequenza dei movimenti di valore all'interno di un flash loan. Non verrà caricato nemmeno dopo aver sostituito i valori, perché le righe vuote tra i gruppi terminano la transazione — Beancount segnala un errore di sintassi sulle scritture che ne seguono. Registra un vero flash loan come un'unica transazione senza righe vuote (etichettando le gambe con commenti ; indentati), eliminando le gambe intermedie che si annullano a zero all'interno dello stesso blocco.

Pseudocode: flash loan arbitrage
 
  borrow      Assets:Crypto:Temp:FlashLoan       +[LOAN_AMOUNT] [TOKEN]
              Liabilities:DeFi:[PROTOCOL]:Flash  -[LOAN_AMOUNT] [TOKEN]
 
  execute     Assets:Crypto:Temp:FlashLoan       -[LOAN_AMOUNT] [TOKEN]
              Assets:Crypto:Temp:Arbitrage       +[RETURN_AMOUNT] [TOKEN]
 
  repay       Liabilities:DeFi:[PROTOCOL]:Flash  +[LOAN_AMOUNT] [TOKEN]
              Assets:Crypto:Temp:Arbitrage       -[LOAN_PLUS_FEE] [TOKEN]
 
  keep        Assets:Crypto:Wallet:[WALLET]:[TOKEN]  +[PROFIT] [TOKEN]
              Income:Crypto:Arbitrage                -[PROFIT_USD] USD

Tutto ciò che il prestito ha toccato è sparito entro la fine del blocco, quindi ciò che il ledger deve effettivamente registrare è il profitto e la commissione del protocollo. L'esempio di arbitraggio nella guida al monitoraggio del portafoglio mostra la forma a transazione singola.

Ponte Cross-Chain​

; Template: Bridge assets across chains
YYYY-MM-DD * "Bridge [AMOUNT] [TOKEN] from [CHAIN1] to [CHAIN2]"
  Assets:Crypto:[CHAIN1]:[TOKEN]     -[AMOUNT] [TOKEN] {[PRICE] USD}
  Assets:Crypto:[CHAIN2]:[TOKEN]      [AMOUNT] [TOKEN] {[PRICE] USD}
  Expenses:Crypto:Bridge:Fees         [FEE] [TOKEN] {[PRICE] USD}
  Assets:Crypto:[CHAIN1]:[TOKEN]     -[FEE] [TOKEN] {[PRICE] USD}
 
; Example: Bridge ETH to Polygon
2024-02-05 * "Bridge 5 ETH from Ethereum to Polygon"
  Assets:Crypto:Ethereum:ETH     -5 ETH {2600.00 USD}
  Assets:Crypto:Polygon:ETH       5 ETH {2600.00 USD}
  Expenses:Crypto:Bridge:Fees    0.01 ETH {2600.00 USD}
  Assets:Crypto:Ethereum:ETH    -0.01 ETH {2600.00 USD}

Modelli Ottimizzati per le Tasse​

Raccolta di Minusvalenze​

; Template: Tax loss harvesting
YYYY-MM-DD * "Tax loss harvesting - Sell [CRYPTO] at loss"
  Assets:Crypto:[EXCHANGE]:[CRYPTO]    -[AMOUNT] [CRYPTO] {[HIGH_COST_BASIS] USD}
  Assets:Crypto:[EXCHANGE]:USD          [PROCEEDS] USD
  Expenses:Crypto:Fees:Trading          [FEE] USD
  Assets:Crypto:[EXCHANGE]:USD         -[FEE] USD
  Expenses:CapitalLoss:Crypto           [LOSS] USD
 
; Example: Harvest ADA loss
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, 1,000 * 0.45
  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

La minusvalenza è l'immagine speculare di una plusvalenza: $600,00 di base di costo escono, $450,00 di ricavo lordo arrivano, e la differenza di $150,00 è una scrittura positiva su un conto di spesa. $445,00 di liquidità è ciò che effettivamente arriva, dopo la commissione di $5,00.

Plusvalenze a Lungo Termine​

; Template: Long-term capital gains sale
YYYY-MM-DD * "Long-term sale - [CRYPTO] held > 1 year"
  date-acquired: "[PURCHASE_DATE]"
  holding-period: "[DAYS] days"
  Assets:Crypto:[EXCHANGE]:[CRYPTO]    -[AMOUNT] [CRYPTO] {[COST_BASIS] USD} @ [SALE_PRICE] USD
  Assets:Crypto:[EXCHANGE]:USD          [GROSS_PROCEEDS] USD
  Expenses:Crypto:Fees:Trading          [FEE] USD
  Assets:Crypto:[EXCHANGE]:USD         -[FEE] USD
  Income:CapitalGains:LongTerm         -[GAIN] USD
 
; Example: Long-term BTC sale
2025-02-01 * "Long-term sale - BTC held 382 days"
  date-acquired: "2024-01-15"
  holding-period: "382 days"
  Assets:Crypto:Coinbase:BTC     -1.0 BTC {45000.00 USD} @ 55000.00 USD
  Assets:Crypto:Coinbase:USD   55000.00 USD
  Expenses:Crypto:Fees:Trading    50.00 USD
  Assets:Crypto:Coinbase:USD     -50.00 USD
  Income:CapitalGains:LongTerm -10000.00 USD  ; 55,000.00 proceeds - 45,000.00 basis

La plusvalenza è di $10.000,00, non $9.950,00: la commissione di $50,00 è già registrata come spesa, quindi compensarla nella plusvalenza la dedurrebbe due volte. Income:CapitalGains:LongTerm è un conto separato da Income:CapitalGains:Crypto solo per rendere visibile il periodo di detenzione in un report — Beancount non calcola i periodi di detenzione per te, ed è per questo che i metadati date-acquired e holding-period vale la pena di essere mantenuti.

Modelli di Riconciliazione​

Verifica Mensile del Saldo​

; Template: Monthly balance assertions
YYYY-MM-DD balance Assets:Crypto:[EXCHANGE]:[CRYPTO]  [EXPECTED_BALANCE] [CRYPTO]
YYYY-MM-DD balance Assets:Crypto:Wallet:[WALLET]:[CRYPTO]  [EXPECTED_BALANCE] [CRYPTO]
 
; Example: January balance 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:Wallet:Ledger:BTC  1.0 BTC

A differenza degli altri esempi qui, questo non è autocontenuto per progettazione: gli importi sono quelli che mostrano le schermate del tuo exchange, e l'asserzione fallisce finché le tue transazioni non sono nel ledger — che è esattamente il suo scopo. Nota che balance verifica il saldo all'inizio del giorno indicato, quindi data l'asserzione al giorno successivo al periodo che stai chiudendo.

Aggiornamenti dei Prezzi​

; Template: Daily price updates
YYYY-MM-DD price [CRYPTO] [PRICE] USD
 
; Example: Daily prices
2024-01-15 price BTC 45000.00 USD
2024-01-15 price ETH 2500.00 USD
2024-01-15 price ADA 0.50 USD

Per un ledger ospitato, Prezzi in Tempo Reale può mantenere automaticamente i prezzi di valutazione delle criptovalute supportate. Mantieni i prezzi statici sopra per avere esempi riproducibili. I prezzi gestiti non popolano il prezzo di uno scambio, il ricavo da staking o la base di costo di un airdrop; registra esplicitamente quei valori di transazione.

Istruzioni per l'Uso​

  1. Copia il template pertinente per il tuo tipo di transazione

  2. Sostituisci ogni segnaposto. Un template non è Beancount valido finché YYYY-MM-DD e ogni token [TRA_PARENTESI] non sono spariti — le parentesi non sono sintassi Beancount, e una lasciata per errore è un errore di parsing, non un valore ignorato silenziosamente. La sostituzione è meccanica:

    SegnapostoSostituisci conEsempio
    YYYY-MM-DDla data della transazione2024-03-20
    [AMOUNT]unità della commodity, senza virgolette0.5
    [CRYPTO]il simbolo della commodity, in maiuscoloBTC
    [EXCHANGE]il componente di conto per la piattaformaCoinbase
    [COST_BASIS]il costo per unità del lotto che stai rimuovendo45000.00
    [SALE_PRICE]il prezzo per unità a cui hai venduto48000.00
    [GROSS_PROCEEDS][AMOUNT] × [SALE_PRICE], al lordo delle commissioni24000.00
    [FEE]la commissione della piattaforma, nella valuta in cui è stata addebitata30.00
    [GAIN][GROSS_PROCEEDS] − [AMOUNT] × [COST_BASIS]1500.00

    Sostituire quella colonna nel template Vendita di Criptovalute riproduce l'esempio svolto stampato sotto di esso, che è il modo più rapido per verificare di aver letto correttamente il template.

  3. Adatta i nomi dei conti per corrispondere alla tua struttura dei conti, e assicurati che ognuno sia aperto dal Template della Struttura dei Conti — un conto che non viene mai aperto è un errore di caricamento, non un avviso

  4. Aggiungi i metadati secondo necessità per la rendicontazione fiscale o il monitoraggio

  5. Verifica i calcoli con bea --file your-file.bean check prima di finalizzare le registrazioni. Una registrazione che non quadra, o che riduce un lotto che non possiedi, fallisce lì invece di produrre silenziosamente un report errato

Buone Pratiche​

  • Usa convenzioni di denominazione coerenti
  • Includi gli ID delle transazioni nei metadati
  • Documenta accuratamente le transazioni complesse
  • Verifica i tassi di cambio e i prezzi
  • Mantieni backup regolari dei tuoi file

Questi template forniscono una base solida per la contabilità delle criptovalute in Beancount.io. Personalizzali in base alle tue esigenze specifiche e ai tuoi schemi di trading.

Fonte: https://beancount.io/it/docs/Tips/cryptocurrency-templates-examples