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:
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:CryptoEé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 USDOverboekingen 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 basisDrie 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 USDDe 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 - feesSpecifieke 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 proceedsVerkopen 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 basisDezelfde 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 USDPortfolio 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 DESCPrestatie 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.50De {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.00Geautomatiseerd 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 ADADie 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 USDAlle 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 USDLangetermijn- 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 basisDe ^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:
| Actief | USD-waarde | Allocatieberekening | Weergegeven aandeel |
|---|---|---|---|
| BTC | 200 | 200 / 260 * 100 | 76,92% |
| ETH | 60 | 60 / 260 * 100 | 23,08% |
| Totaal | 260 | 260 / 260 * 100 | 100,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:
| Maandeinde | Slotwaarde crypto |
|---|---|
| 31 januari | 2 * 100 + 3 * 10 = 230 USD |
| 29 februari | 1 * 100 + 3 * 10 = 130 USD |
| 31 maart | 1 * 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.