Naar hoofdinhoud springen

Cryptoportefeuille met kostprijsbasis bijhouden in Beancount

Houd een cryptoportefeuille in Beancount bij tussen beurzen, met kostprijsbasis, loten en prestatieanalyse in één grootboek.

Het beheren van een cryptoportefeuille over meerdere exchanges, wallets en DeFi-protocollen kan een uitdaging zijn. Deze uitgebreide gids laat je zien hoe je nauwkeurige cryptoportefeuilletracking opzet en onderhoudt met behulp van het krachtige plain-text boekhoudsysteem van Beancount.io.

Bekijk een live voorbeeldgrootboek van een cryptocurrency:

Cryptocurrency Example Ledger in een nieuw tabblad openen

Waarom traditionele portfolio-trackers tekortschieten​

Veelvoorkomende problemen met crypto-portfoliotools​

  • Beperkte exchange-ondersteuning: Veel tools ondersteunen niet alle exchanges of DeFi-protocollen
  • Onnauwkeurige kostprijs: Vereenvoudigde FIFO/LIFO-berekeningen missen complexe scenario's
  • Ontbrekende transacties: API-beperkingen en gaten in handmatige invoer
  • Geen maatwerk: Vaste categorieën en rapportagestructuren
  • Privacyzorgen: API-sleutels delen met diensten van derden
  • Vendor lock-in: Propriëtaire dataformaten en beperkte exportmogelijkheden

Voordelen van Beancount.io​

  • Volledige controle: Bezit je data in plain-text formaat
  • Onbeperkt maatwerk: Creëer elke accountstructuur die je nodig hebt
  • Nauwkeurige kostprijs: Lot-gebaseerde tracking met specifieke identificatie
  • Ondersteuning voor meerdere protocollen: Verwerk elke exchange, wallet of DeFi-protocol
  • Transparante berekeningen: Zie precies hoe cijfers worden berekend
  • Toekomstbestendig: Plain-text formaat garandeert toegankelijkheid op lange termijn

Je crypto-portfolio structuur opzetten​

Basisrekeninghiërarchie​

Begin met een uitgebreide accountstructuur die je crypto-ecosysteem weerspiegelt:

; 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

Eén naamgevingsregel bijt hier, en de parser handhaaft die in plaats van de conventie: elk accountonderdeel, en elk commodity-symbool, moet beginnen met een hoofdletter of een cijfer. Compound schrijft zijn receipt-token cUSDC door zijn hele eigen interface, maar Assets:DeFi:Compound:cUSDC en een cUSDC-commodity zijn beide lexer-fouten. Schrijf ze als CUSDC en bewaar de eigen spelling van het protocol in de name:-metadata van de commodity.

Commoditeitsdefinities met metadata​

Definieer je cryptocurrencies met uitgebreide metadata voor betere tracking:

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"

Portfolio-tracking over meerdere beurzen​

Aankopen registreren over beurzen heen​

Volg dezelfde cryptocurrency over verschillende exchanges met een nauwkeurige kostprijs:

; 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

Overboekingen tussen beurzen​

Volg overboekingen tussen exchanges met behoud van kostprijs:

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}

Arbitragemogelijkheden​

Een arbitrage is één economische gebeurtenis over twee venues, dus leg het vast als één transactie. Deze boeking verkoopt 10 ETH die je al op Coinbase aanhoudt tegen $2.580,00 en herstelt de positie onmiddellijk op Binance tegen $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

Drie dingen om over te nemen:

  • Laat nooit een lege regel tussen postings. Een lege regel beëindigt de transactie, en Beancount rapporteert een syntaxisfout op de postings erna. Gebruik ingesprongen ;-commentaar om de legs te labelen — wat de twee commentaarregels hierboven doen.
  • De winst is de winst van de vervreemding, $800,00, en die is negatief omdat Income-accounts credits bevatten. De $55,00 aan kosten staat apart: dat is wat $800,00 bruto spread omzet in $745,00 winst, en het is al vastgelegd op zijn eigen twee postings.
  • De verkoop-leg vermindert een lot dat je al moet aanhouden. Deze boeking veronderstelt 10 ETH die eerder op Coinbase is gekocht tegen $2.500,00; zonder dat lot heeft de vermindering niets om tegen te boeken.

Geavanceerd beheer van kostprijs​

Volgen op basis van lot​

Het lot-gebaseerde systeem van Beancount.io biedt nauwkeurige kostprijstracking:

; 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

De tekenconventie voor winsten en verliezen​

Income-accounts bevatten credits, dus Beancount slaat ze op als negatieve getallen. Elke winst hieronder is daarom een negatieve posting naar een income-account, en elk verlies is een positieve posting naar een expense-account. De vergoeding staat los van beide: het is een expense op zichzelf, dus als je het ook nog van de winst aftrekt, trek je het dubbel af en blijft de transactie niet in balans.

Voor één vervreemding is de rekensom altijd:

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

Specifieke identificatiemethode​

Verkoop specifieke lots voor optimale belastingplanning. Het benoemen van de kostprijs van het lot in de verminderingsposting is wat "specifieke identificatie" betekent in Beancount, en het werkt onder de standaard STRICT-boeking:

; 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

Verkopen van het oudste of het nieuwste lot​

Het benoemen van een andere kostprijs selecteert een ander lot. Deze twee verkopen nemen het lot van $40.000,00 en dan het lot van $45.000,00 — de twee die nog over zijn nadat het lot van $50.000,00 in het voorbeeld hierboven is verkocht — wat dezelfde selectie is die FIFO en LIFO automatisch zouden maken, met de hand uitgeschreven:

; 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

Dezelfde verkoopprijs, een ander lot, $2.500,00 verschil in gerealiseerde winst. Als je liever wilt dat Beancount het lot voor je kiest, stel dan een boekingsmethode in op het account in plaats van een kostprijs te benoemen — "FIFO", "LIFO" of "HIFO" op de open-directive, beschreven in Voorraadbeheer.

Portfolio Prestatie Analyse​

Prijsvolg Setup​

Stel geautomatiseerde prijsfeeds in voor nauwkeurige waardering:

Voor gehoste boeken levert Live Prices automatisch ondersteunde paren. De statische directives hieronder tonen de data die een waardering gebruikt en blijven nuttig voor reproduceerbare lokale voorbeelden.

; 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

Portfolio Allocatie Volgen​

Gebruik de rapportagefuncties van Beancount.io om de allocatie te analyseren:

-- 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

Prestatie Kengetallen​

Volg belangrijke prestatie-indicatoren:

-- 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"

Staking en DeFi Integratie​

Staking Beloning Volgen​

Leg staking-beloningen vast met correcte inkomstenverantwoording. De eenheden die binnenkomen en het erkende inkomen zijn dezelfde gebeurtenis van twee kanten gezien, dus hun gewichten moeten elkaar opheffen: [eenheden] × [prijs] aan asset erin, hetzelfde aantal dollars aan inkomen eruit — en inkomen is een credit, dus het is negatief.

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

De {2.500,00 USD} en {0,50 USD} zijn externe waarderingen. Beancount slaat op wat je schrijft; het haalt geen prijs op en beslist niet welke quote de juiste is. Kies een bron — de exchange waar je daadwerkelijk zou verkopen, of een gepubliceerde index — en gebruik die consistent, want dat getal is zowel je inkomen als je toekomstige kostprijs.

De basis van de beloning wordt eenmaal erkend​

De $200,00 die hierboven is erkend, wordt de kostprijs van de 0,08 ETH. Verkoop het later en dan realiseer je alleen de beweging sinds de beloningsdatum:

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 kapitaalwinst, niet $240,00 — de eerste $200,00 was in januari al inkomen. De hele $240,00 als winst boeken is de meest voorkomende manier waarop beloningsinkomen dubbel wordt geteld. Wanneer de beloning belastbaar wordt, en tegen welk tarief, verschilt per jurisdictie; het grootboek legt ontvangst en vervreemding apart vast, zodat beide behandelingen eruit gerapporteerd kunnen worden.

DeFi Rendement Volgen​

Volg complexe DeFi-posities:

Liquiditeit verschaffen ruilt twee commodities voor een derde, dus elke leg moet in dezelfde valuta wegen voordat de transactie in balans kan zijn. De ETH- en LP-legs doen dat al, omdat ze een kostprijs dragen; de stablecoin-leg heeft een expliciete @ 1,00 USD nodig, anders ziet Beancount 25.000 eenheden USDC vertrekken en $25.000,00 aan waarde arriveren, wat verschillende commodities zijn en niet opheft.

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

Geautomatiseerd Portfolio Beheer​

Importeren van beursgegevens​

Beancount levert geen exchange-API-client mee, en er is geen configuratiebestand dat het met Coinbase of Binance laat praten. Het ondersteunde pad is een importer: je downloadt de CSV-export van de exchange (of haalt die op met je eigen script) en converteert die naar Beancount-transacties met beangulp, het importer-framework dat de ingebouwde beancount.ingest van Beancount 2 opvolgde. beancount.ingest bestaat niet in Beancount 3.

Als je wel een fetch-script schrijft, is het bijbehorende credentialbestand alleen van jou — niets in de Beancount-toolchain leest het:

# 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"

Geautomatiseerde Afstemming​

Stel geautomatiseerde balansverificatie in:

; 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

Die drie getallen komen uit jouw exchange-schermen, niet van deze pagina, dus het blok hierboven verifieert tegen niets tot je eigen transacties in het grootboek staan. Twee regels bepalen of het überhaupt verifieert. Een balance-directive bevestigt de balans aan het begin van de genoemde dag, dus een bevestiging gedateerd 2024-01-31 ziet niets dat op 2024-01-31 is geboekt — dateer het de dag na de periode die je afsluit. En elk bevestigd account moet open zijn, daarom verschijnt Assets:Crypto:Kraken:ADA in de sectie Basis account-hiërarchie hierboven.

Beheerde prijzen in een gehost grootboek​

Gebruik Live Prices om een waarderingsvaluta en ondersteunde crypto-assets te kiezen, en plak de gegenereerde includes in je gehoste grootboek. De asset-symbolen moeten overeenkomen met je posities. Feeds leveren gedateerde waarderingsprijzen; ze bepalen niet het inkomstenbedrag of de aanschafkostprijs van staking-beloningen en airdrops.

Je eigen prijs heeft voorrang voor dezelfde datum en hetzelfde paar, inclusief het omgekeerde paar. Een gecachte quote kan verouderd zijn tijdens een storing, dus controleer het observatietijdstip. De lokale fetch-workflow hieronder blijft nuttig voor upstream Beancount en Fava.

Prijzen up-to-date houden​

Prijzen leven in het grootboek als price-directives. Upstream Beancount 3.2.3 haalt ze niet zelf op; gehoste beheerde includes gebruiken de Beancount.io loader-extensie die hierboven is beschreven. Er is geen custom "price-source"-directive — een kaal commodity-symbool is niet eens een geldige custom-waarde, dus die regel is een syntaxisfout — en geen beancount.plugins.forecast-module; de loader stopt met een importfout als je die noemt.

Schakel beanprice in binnen de beheerde engine met bea engine enable beanprice, en haal dan quotes op met bea price main.beancount. Het leest een price:-metadataveld op elke commodity-directive, in de vorm "<quote currency>:<source module>/<ticker>", en schrijft price-directives die je aan je grootboek toevoegt:

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

Alle andere metadata die je aan een commodity hangt — sector, website, of het price-source-veld dat eerder in deze gids is gebruikt — is vrije documentatie voor je eigen gebruik. De loader slaat het op en geen enkel hulpmiddel handelt ernaar.

Strategieën voor Belastingoptimalisatie​

Belastingverlies oogsten​

Implementeer systematische tax loss harvesting:

; 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

Langetermijn- versus Kortetermijnwinst​

Volg aanhoudperiodes voor belastingoptimalisatie:

; 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

De ^long-term-btc-link op beide boekingen is wat je later in staat stelt de aankoop en de verkoop samen op te halen; Beancount volgt zelf geen aanhoudperiodes.

Rapportage en Analyse​

Portefeuille Overzichtsrapporten​

Bereken het aandeel van elke cryptocurrency in de portefeuille in één waarderingsvaluta. Dit voorbeeld gebruikt USD-prijzen die beschikbaar waren op 31 maart 2024, en posities vóór 1 april. Wijzig beide datums samen voor een andere rapportagedatum. Voer de onderstaande SELECT-instructie uit in je lokale BQL-querytool.

-- 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;

Controleer dat elke niet-nul allocation_value in USD is voordat je percentages berekent. Conversie gebruikt vastgelegde prijzen die beschikbaar zijn op of vóór de waarderingsdatum. Een ontbrekende conversie kan een bedrag in zijn oorspronkelijke valuta laten. Als er nog een BTC-, ETH- of ander niet-USD-bedrag overblijft, is de waardering onvolledig. Voeg de ontbrekende gedateerde prijzen toe en voer opnieuw uit; behandel niet-geprijsde activa niet als nul en tel geen niet-gerelateerde valuta-eenheden op.

Tel de USD-bedragen op voor het portefeuilletotaal. Bereken dan de allocatie van elk actief als asset USD value / total USD value * 100. Behoud volledige precisie tot het weergeven van het percentage. Bijvoorbeeld, posities van 1 BTC en 3 ETH, geprijsd op 200 USD per BTC en 20 USD per ETH, geven:

ActiefUSD-waardeAllocatieberekeningWeergegeven aandeel
BTC200200 / 260 * 10076,92%
ETH6060 / 260 * 10023,08%
Totaal260260 / 260 * 100100,00%

Het afronden van individuele aandelen op twee decimalen kan ertoe leiden dat hun weergegeven som licht afwijkt van 100%. Een voorraad met waarde nul kan als leeg worden weergegeven. Meld voor een lege portefeuille of een USD-totaal van nul de allocaties als niet beschikbaar en deel niet door nul. Dit voorbeeld beschrijft positieve activaposities; negatieve saldi vereisen interpretatie van ondertekende blootstellingen in plaats van gewone portefeuilleaandelen.

Prestatie-Analyse​

Rapporteer de slotwaarde van de portefeuille per maand met alle posities vóór de volgende maand. Stel de waarderingsdatum in op het maandeinde, zodat latere prijzen de momentopname niet kunnen veranderen. Deze voorbeelden rapporteren in USD. Voer elke SELECT afzonderlijk uit in je lokale BQL-querytool.

Voor 31 januari:

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

Voor 29 februari:

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

Voor 31 maart:

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

FROM close ON sluit boekingen uit die op of na de afsluitdatum zijn gedateerd. De datum binnen convert selecteert prijzen die beschikbaar zijn op of vóór de rapportagedatum. Wijzig voor een andere maand beide datums samen. Vraag elke maand op die je wilt rapporteren, inclusief maanden zonder transacties. Controleer op niet-geconverteerde valuta's zoals hierboven beschreven voordat je het resultaat als USD-totaal behandelt.

Stel bijvoorbeeld dat januari eindigt met 2 BTC geprijsd op 100 USD per stuk en 3 ETH op 10 USD per stuk. De verkoop van 1 BTC in februari laat 1 BTC en 3 ETH over. Als maart geen transacties heeft maar de vastgelegde prijzen stijgen naar 200 USD per BTC en 20 USD per ETH, zijn de momentopnames:

MaandeindeSlotwaarde crypto
31 januari2 * 100 + 3 * 10 = 230 USD
29 februari1 * 100 + 3 * 10 = 130 USD
31 maart1 * 200 + 3 * 20 = 260 USD

De waarde van februari veronderstelt geen nieuwe prijsdirectives die maand. De @-prijs van een verkoop legt de opbrengst vast; hij creëert geen marktprijsdirective. Deze queries dekken alleen Assets:Crypto:-accounts, dus contante opbrengsten die elders worden aangehouden, zijn uitgesloten.

Het groeperen van boekingen op transactiemaand meet de bewegingen van elke maand, niet de cumulatieve slotposities. Het laat ook maanden zonder transacties weg. Veranderingen tussen slotwaarden omvatten aankopen, verkopen, transfers en prijsveranderingen. Het zijn geen beleggingsrendementen gecorrigeerd voor kasstromen.

Inkomstenanalyse​

Analyseer inkomstenbronnen:

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

Best Practices en Tips​

1. Consistente Registratie​

  • Leg transacties onmiddellijk na uitvoering vast
  • Gebruik gestandaardiseerde transactiebeschrijvingen
  • Neem transactiehashes op in metadata

2. Regelmatige Afstemming​

  • Verifieer wekelijks balansen op alle platformen
  • Gebruik balansbevestigingen om discrepanties op te sporen
  • Houd ontbrekende transacties in de gaten

3. Back-up en Beveiliging​

  • Maak regelmatig een back-up van je Beancount-bestanden
  • Gebruik versiebeheer (Git) voor het volgen van wijzigingen
  • Versleutel gevoelige data

4. Documentatie​

  • Documenteer je beslissingen over de accountstructuur
  • Houd notities bij over complexe transacties
  • Bewaar gegevens van API-configuraties

5. Belastingvoorbereiding​

  • Genereer per kwartaal rapporten voor belastingplanning
  • Houd gedetailleerde administratie bij voor auditdoeleinden
  • Raadpleeg belastingspecialisten voor complexe situaties

Conclusie​

Effectieve cryptoportefeuilletracking vereist precisie, consistentie en de juiste tools. Beancount.io biedt de flexibiliteit en kracht die nodig zijn om complexe cryptoportefeuilles over meerdere exchanges, wallets en DeFi-protocollen te beheren.

Belangrijkste voordelen van het gebruik van Beancount.io voor cryptoportefeuilletracking:

  • Volledig eigenaarschap van data: Je data in plain-text formaat
  • Nauwkeurige kostprijs: Lot-gebaseerde tracking met specifieke identificatie
  • Onbeperkte flexibiliteit: Aangepaste accountstructuren en rapportage
  • Belastingoptimalisatie: Geavanceerde strategieën om belastingdruk te minimaliseren
  • Toekomstbestendig: Open formaat garandeert toegankelijkheid op lange termijn

Begin met een basisopzet en breid je tracking geleidelijk uit naarmate je portefeuille complexer wordt. De investering in een goede opzet betaalt zich terug in nauwkeurige rapportage, belastingoptimalisatie en portefeuille-inzichten.

Klaar om de controle over je cryptoportefeuille te nemen? Begin vandaag met Beancount.io.

Bron: https://beancount.io/nl/docs/Solutions/cryptocurrency-portfolio-tracking