Ein Kryptowährungs-Portfolio über mehrere Börsen, Wallets und DeFi-Protokolle hinweg zu verwalten, kann eine Herausforderung sein. Diese umfassende Anleitung zeigt Ihnen, wie Sie mit dem leistungsstarken Plain-Text-Buchhaltungssystem von Beancount.io eine präzise Verfolgung Ihres Kryptowährungs-Portfolios einrichten und pflegen.
Entdecken Sie ein Live-Beispiel-Ledger für Kryptowährungen:
Warum traditionelle Portfolio-Tracker versagen
Häufige Probleme bei Crypto-Portfolio-Tools
- Begrenzte Börsenunterstützung: Viele Tools unterstützen nicht alle Börsen oder DeFi-Protokolle
- Ungenauere Anschaffungskosten: Vereinfachte FIFO/LIFO-Berechnungen verfehlen komplexe Szenarien
- Fehlende Transaktionen: API-Einschränkungen und Lücken bei der manuellen Eingabe
- Keine Anpassungsmöglichkeiten: Fest vorgegebene Kategorien und Berichtsstrukturen
- Datenschutzbedenken: Weitergabe von API-Schlüsseln an Drittanbieter-Dienste
- Anbieterbindung: Proprietäre Datenformate und eingeschränkte Exportmöglichkeiten
Vorteile von Beancount.io
- Vollständige Kontrolle: Ihre Daten gehören Ihnen – im Plain-Text-Format
- Unbegrenzte Anpassung: Erstellen Sie jede Kontostruktur, die Sie benötigen
- Präzise Anschaffungskosten: Lot-basierte Verfolgung mit spezifischer Identifikation
- Multi-Protokoll-Unterstützung: Verwalten Sie jede Börse, Wallet oder jedes DeFi-Protokoll
- Transparente Berechnungen: Sehen Sie genau, wie Zahlen berechnet werden
- Zukunftssicher: Das Plain-Text-Format gewährleistet langfristige Zugänglichkeit
Einrichten Ihrer Crypto-Portfolio-Struktur
Grundlegende Kontenhierarchie
Beginnen Sie mit einer umfassenden Kontostruktur, die Ihr Krypto-Ökosystem widerspiegelt:
; 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:CryptoEine Benennungsregel schlägt hier zu – und der Parser erzwingt sie, statt sie nur als Konvention zu behandeln: Jede Kontokomponente und jedes Rohstoffsymbol muss mit einem Großbuchstaben oder einer Ziffer beginnen. Compound schreibt seinen Receipt-Token in seiner eigenen Oberfläche durchgängig als cUSDC, aber Assets:DeFi:Compound:cUSDC und ein cUSDC-Rohstoff sind beide Lexer-Fehler. Schreiben Sie sie als CUSDC und behalten Sie die Schreibweise des Protokolls in den name:-Metadaten des Rohstoffs bei.
Waren-Definitionen mit Metadaten
Definieren Sie Ihre Kryptowährungen mit aussagekräftigen Metadaten für bessere Nachverfolgung:
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"Multi-Börsen-Portfolio-Verfolgung
Aufzeichnungen von Käufen über Börsen hinweg
Verfolgen Sie dieselbe Kryptowährung über verschiedene Börsen hinweg mit präzisen Anschaffungskosten:
; 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 USDBörsenübergreifende Transfers
Verfolgen Sie Transfers zwischen Börsen unter Beibehaltung der Anschaffungskosten:
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}Arbitrage-Möglichkeiten
Eine Arbitrage ist ein einziges wirtschaftliches Ereignis über zwei Handelsplätze hinweg, also erfassen Sie sie als eine Transaktion. Dieser Eintrag verkauft 10 ETH, die Sie bereits auf Coinbase halten, zu 2.580,00 USD und stellt die Position sofort auf Binance zu 2.500,00 USD wieder her:
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 basisDrei Dinge, die Sie übernehmen sollten:
- Lassen Sie niemals eine Leerzeile zwischen Buchungen. Eine Leerzeile beendet die Transaktion, und Beancount meldet einen Syntaxfehler für die darauf folgenden Buchungen. Verwenden Sie stattdessen eingerückte
;-Kommentare, um die Legs zu kennzeichnen – genau das tun die beiden Kommentarzeilen oben. - Der Gewinn ist der Gewinn der Veräußerung, 800,00 USD, und er ist negativ, weil
Income-Konten Habenposten enthalten. Die 55,00 USD an Gebühren sind davon getrennt: Sie machen aus 800,00 USD Bruttospanne 745,00 USD Gewinn und sind bereits auf ihren eigenen zwei Buchungen erfasst. - Das Verkaufs-Leg reduziert ein Lot, das Sie bereits halten müssen. Dieser Eintrag setzt voraus, dass 10 ETH zuvor auf Coinbase zu 2.500,00 USD gekauft wurden; ohne dieses Lot hat die Reduzierung nichts, wogegen sie gebucht werden kann.
Erweiterte Kostenbasisverwaltung
Lot-basierte Nachverfolgung
Das lot-basierte System von Beancount.io bietet präzise Verfolgung der Anschaffungskosten:
; 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 USDDie Vorzeichenkonvention für Gewinne und Verluste
Income-Konten enthalten Habenposten, daher speichert Beancount sie als negative Zahlen. Jeder Gewinn unten ist deshalb eine negative Buchung auf einem Ertragskonto, und jeder Verlust ist eine positive Buchung auf einem Aufwandskonto. Die Gebühr ist von beidem getrennt: Sie ist ein eigenständiger Aufwand, sodass ein zusätzliches Abziehen vom Gewinn sie doppelt abziehen und die Transaktion unausgeglichen lassen würde.
Für eine Veräußerung gilt immer diese Rechnung:
gain (or loss) = gross proceeds - cost basis of the lots removed
net cash = gross proceeds - feesMethode der spezifischen Identifikation
Verkaufen Sie bestimmte Lots für ein optimales Steuermanagement. Die Angabe der Lot-Kosten in der Reduzierungsbuchung ist das, was „spezifische Identifikation" in Beancount bedeutet, und sie funktioniert unter der standardmäßigen STRICT-Buchung:
; 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 proceedsVerkauf des ältesten oder des neuesten Lots
Die Angabe anderer Kosten wählt ein anderes Lot aus. Diese beiden Verkäufe nehmen das Lot zu 40.000,00 USD und dann das zu 45.000,00 USD – die beiden, die nach dem Lot zu 50.000,00 USD im obigen Beispiel noch vorhanden sind – was dieselbe Auswahl ist, die FIFO und LIFO automatisch treffen würden, hier von Hand ausgeschrieben:
; 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 basisDerselbe Verkaufspreis, anderes Lot, 2.500,00 USD Unterschied beim realisierten Gewinn. Wenn Sie es vorziehen, dass Beancount das Lot für Sie auswählt, legen Sie eine Buchungsmethode für das Konto fest, anstatt Kosten anzugeben – "FIFO", "LIFO" oder "HIFO" in der open-Direktive, beschrieben in Inventory Management.
Portfolio-Performance-Analyse
Einrichtung der Kursverfolgung
Richten Sie automatisierte Preisfeeds für eine genaue Bewertung ein:
Für gehostete Bücher liefert Live Prices unterstützte Paare automatisch. Die folgenden statischen Direktiven zeigen die Daten, die eine Bewertung verwendet, und bleiben für reproduzierbare lokale Beispiele nützlich.
; 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 USDVerfolgung der Portfolio-Allokation
Nutzen Sie die Berichtsfunktionen von Beancount.io, um die Allokation zu analysieren:
-- 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 DESCLeistungskennzahlen
Verfolgen Sie wichtige Leistungsindikatoren:
-- 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- und DeFi-Integration
Verfolgung von Staking-Belohnungen
Erfassen Sie Staking-Belohnungen mit korrekter Ertragserfassung. Die eingehenden Einheiten und der erfasste Ertrag sind dasselbe Ereignis aus zwei Perspektiven, also müssen ihre Gewichte sich aufheben: [Einheiten] × [Preis] an Vermögenswert hinein, dieselbe Anzahl Dollar an Ertrag heraus – und Ertrag ist ein Habenposten, also negativ.
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.50Die {2.500,00 USD} und {0,50 USD} sind externe Bewertungen. Beancount speichert, was Sie schreiben; es ruft keinen Preis ab und entscheidet nicht, welches Kursangebot das richtige ist. Wählen Sie eine Quelle – die Börse, an der Sie tatsächlich verkaufen würden, oder einen veröffentlichten Index – und verwenden Sie sie konsequent, denn diese Zahl ist sowohl Ihr Ertrag als auch Ihre zukünftige Anschaffungskostenbasis.
Die Basis der Belohnung wird einmal anerkannt
Die oben erfassten 200,00 USD werden zur Anschaffungskostenbasis der 0,08 ETH. Ein späterer Verkauf realisiert nur die Wertänderung seit dem Belohnungsdatum:
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 basis40,00 USD Kapitalgewinn, nicht 240,00 USD – die ersten 200,00 USD waren im Januar bereits Ertrag. Die gesamten 240,00 USD als Gewinn zu buchen, ist die häufigste Art, wie Belohnungserträge doppelt gezählt werden. Wann die Belohnung steuerpflichtig wird und zu welchem Satz, hängt von der Jurisdiktion ab; das Ledger erfasst Empfang und Veräußerung getrennt, sodass jede Behandlung daraus berichtet werden kann.
DeFi-Ertragsverfolgung
Verfolgen Sie komplexe DeFi-Positionen:
Die Bereitstellung von Liquidität tauscht zwei Rohstoffe gegen einen dritten, also muss jedes Leg in derselben Währung gewogen werden, bevor die Transaktion ausgeglichen werden kann. Die ETH- und LP-Legs tun das bereits, weil sie Kosten tragen; das Stablecoin-Leg benötigt ein explizites @ 1.00 USD, sonst sieht Beancount 25.000 Einheiten USDC abgehen und 25.000,00 USD an Wert ankommen, was verschiedene Rohstoffe sind und sich nicht aufhebt.
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.00Automatisiertes Portfoliomanagement
Import von Börsendaten
Beancount bringt keinen Börsen-API-Client mit, und es gibt keine Konfigurationsdatei, die es dazu bringt, mit Coinbase oder Binance zu kommunizieren. Der unterstützte Weg ist ein Importer: Sie laden den CSV-Export der Börse herunter (oder holen ihn mit Ihrem eigenen Skript ab) und konvertieren ihn mit beangulp in Beancount-Transaktionen – dem Importer-Framework, das das in Beancount 2 integrierte beancount.ingest abgelöst hat. beancount.ingest existiert in Beancount 3 nicht mehr.
Wenn Sie tatsächlich ein Fetch-Skript schreiben, gehört dessen Anmeldedatendatei allein Ihnen – nichts in der Beancount-Toolchain liest sie:
# 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"Automatisierte Abstimmung
Richten Sie eine automatisierte Saldenprüfung ein:
; 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 ADADiese drei Zahlen stammen aus Ihren Börsenansichten, nicht von dieser Seite, daher wird der obige Block gegen nichts verifizieren, bis Ihre eigenen Transaktionen im Ledger sind. Zwei Regeln entscheiden, ob er überhaupt verifiziert. Eine balance-Direktive prüft den Saldo zu Beginn des genannten Tages, also sieht eine auf den 31.01.2024 datierte Prüfung nichts, was am 31.01.2024 gebucht wurde – datieren Sie sie auf den Tag nach dem Zeitraum, den Sie abschließen. Und jedes geprüfte Konto muss geöffnet sein, weshalb Assets:Crypto:Kraken:ADA im Abschnitt Grundlegende Kontenhierarchie oben erscheint.
Verwaltete Preise in einem gehosteten Ledger
Verwenden Sie Live Prices, um eine Bewertungswährung und unterstützte Krypto-Assets auszuwählen, und fügen Sie dann die generierten Includes in Ihr gehostetes Ledger ein. Die Asset-Symbole müssen mit Ihren Beständen übereinstimmen. Feeds liefern datierte Bewertungspreise; sie legen nicht den Ertragsbetrag oder die Anschaffungskosten von Staking-Belohnungen und Airdrops fest.
Ihr eigener Preis hat für dasselbe Datum und Paar Vorrang, einschließlich des reziproken Paares. Ein zwischengespeichertes Kursangebot kann während einer Störung veraltet sein, prüfen Sie also dessen Beobachtungszeitpunkt. Der lokale Abruf-Workflow unten bleibt für Upstream-Beancount und Fava nützlich.
Preise aktuell halten
Preise leben im Ledger als price-Direktiven. Upstream-Beancount 3.2.3 ruft sie nicht selbst ab; gehostete verwaltete Includes verwenden die oben beschriebene Beancount.io-Loader-Erweiterung. Es gibt keine custom "price-source"-Direktive – ein bloßes Rohstoffsymbol ist nicht einmal ein gültiger custom-Wert, diese Zeile ist also ein Syntaxfehler – und kein beancount.plugins.forecast-Modul; der Loader bricht mit einem Importfehler ab, wenn Sie es benennen.
Aktivieren Sie beanprice innerhalb der verwalteten Engine mit bea engine enable beanprice und rufen Sie dann Kurse mit bea price main.beancount ab. Es liest ein price:-Metadatenfeld aus jeder commodity-Direktive in der Form "<Kurswährung>:<Quellmodul>/<Ticker>" und schreibt price-Direktiven, die Sie an Ihr Ledger anhängen:
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 USDJede andere Metadaten, die Sie einem Rohstoff anhängen – sector, website oder das früher in dieser Anleitung verwendete price-source-Feld – sind freie Dokumentation zu Ihrem eigenen Nutzen. Der Loader speichert sie, und kein Tool handelt danach.
Steueroptimierungsstrategien
Steuerverlustverwertung
Implementieren Sie eine systematische Steuerverlust-Verwertung:
; 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 USDLangfristige vs Kurzfristige Gewinne
Verfolgen Sie Haltedauern für die Steueroptimierung:
; 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 basisDer ^long-term-btc-Link auf beiden Einträgen ist es, der es Ihnen später ermöglicht, Kauf und Verkauf gemeinsam abzurufen; Beancount verfolgt Haltedauern nicht selbst.
Berichterstattung und Analysen
Portfolio-Zusammenfassungsberichte
Berechnen Sie den Anteil jeder Kryptowährung am Portfolio in einer Bewertungswährung. Dieses Beispiel verwendet USD-Preise, die am 31. März 2024 verfügbar waren, und Bestände vor dem 1. April. Ändern Sie beide Daten zusammen für ein anderes Berichtsdatum. Führen Sie die SELECT-Anweisung unten in Ihrem lokalen BQL-Abfragetool aus.
-- 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;Prüfen Sie, dass jeder von null verschiedene allocation_value in USD ist, bevor Sie Prozentsätze berechnen. Die Umrechnung verwendet aufgezeichnete Preise, die am oder vor dem Bewertungsdatum verfügbar sind. Eine fehlende Umrechnung kann einen Betrag in seiner ursprünglichen Währung belassen. Wenn ein BTC-, ETH- oder anderer Nicht-USD-Betrag verbleibt, ist die Bewertung unvollständig. Fügen Sie die fehlenden datierten Preise hinzu und führen Sie die Abfrage erneut aus; behandeln Sie nicht bepreiste Assets nicht als null und addieren Sie keine fremden Währungseinheiten.
Addieren Sie die USD-Beträge, um das Portfolio-Gesamt zu erhalten. Berechnen Sie dann die Allokation jedes Assets als Asset-USD-Wert / Gesamt-USD-Wert * 100. Behalten Sie die volle Genauigkeit bei, bis Sie den Prozentsatz anzeigen. Zum Beispiel ergeben Bestände von 1 BTC und 3 ETH, bepreist mit 200 USD pro BTC und 20 USD pro ETH:
| Asset | USD-Wert | Allokationsberechnung | Angezeigter Anteil |
|---|---|---|---|
| BTC | 200 | 200 / 260 * 100 | 76,92 % |
| ETH | 60 | 60 / 260 * 100 | 23,08 % |
| Gesamt | 260 | 260 / 260 * 100 | 100,00 % |
Das Runden einzelner Anteile auf zwei Dezimalstellen kann dazu führen, dass ihre angezeigte Summe leicht von 100 % abweicht. Ein Bestand mit Nullwert wird möglicherweise leer angezeigt. Berichten Sie für ein leeres Portfolio oder eine Gesamt-USD-Summe von null die Allokationen als nicht verfügbar und teilen Sie nicht durch null. Dieses Beispiel beschreibt positive Asset-Bestände; negative Salden erfordern die Interpretation vorzeichenbehafteter Engagements anstelle gewöhnlicher Portfolio-Anteile.
Leistungsanalyse
Berichten Sie den Schlusswert des Portfolios jedes Monats unter Verwendung aller Bestände vor dem nächsten Monat. Setzen Sie das Bewertungsdatum auf das Monatsende, damit spätere Preise den Schnappschuss nicht verändern können. Diese Beispiele berichten in USD. Führen Sie jedes SELECT separat in Ihrem lokalen BQL-Abfragetool aus.
Für den 31. Januar:
SELECT convert(sum(position), 'USD', 2024-01-31) AS portfolio_value
FROM close ON 2024-02-01
WHERE account ~ '^Assets:Crypto:';Für den 29. Februar:
SELECT convert(sum(position), 'USD', 2024-02-29) AS portfolio_value
FROM close ON 2024-03-01
WHERE account ~ '^Assets:Crypto:';Für den 31. März:
SELECT convert(sum(position), 'USD', 2024-03-31) AS portfolio_value
FROM close ON 2024-04-01
WHERE account ~ '^Assets:Crypto:';FROM close ON schließt Buchungen aus, die am oder nach seinem Stichtag datiert sind. Das Datum innerhalb von convert wählt Preise aus, die am oder vor dem Berichtsdatum verfügbar sind. Ändern Sie für einen anderen Monat beide Daten zusammen. Fordern Sie jeden Monat an, den Sie berichten möchten, einschließlich Monate ohne Transaktionen. Prüfen Sie auf nicht umgerechnete Währungen wie oben beschrieben, bevor Sie das Ergebnis als USD-Gesamtsumme behandeln.
Nehmen wir zum Beispiel an, der Januar endet mit 2 BTC, bepreist mit je 100 USD, und 3 ETH zu je 10 USD. Der Verkauf von 1 BTC im Februar lässt 1 BTC und 3 ETH übrig. Wenn der März keine Trades hat, aber die aufgezeichneten Preise auf 200 USD pro BTC und 20 USD pro ETH steigen, sind die Schnappschüsse:
| Monatsende | Schlusswert der Kryptos |
|---|---|
| 31. Januar | 2 * 100 + 3 * 10 = 230 USD |
| 29. Februar | 1 * 100 + 3 * 10 = 130 USD |
| 31. März | 1 * 200 + 3 * 20 = 260 USD |
Der Februar-Wert setzt keine neuen Preisdirektiven in diesem Monat voraus. Der @-Preis eines Verkaufs erfasst seinen Erlös; er erstellt keine Marktpreis-Direktive. Diese Abfragen decken nur Assets:Crypto:-Konten ab, also sind anderswo gehaltene Barerlöse ausgeschlossen.
Das Gruppieren von Buchungen nach Transaktionsmonat misst die Bewegungen jedes Monats, nicht die kumulativen Schlussbestände. Es lässt auch Monate ohne Transaktionen aus. Änderungen zwischen Schlusswerten umfassen Käufe, Verkäufe, Transfers und Preisänderungen. Sie sind keine um Cashflows bereinigten Anlagerenditen.
Einkommensanalyse
Analysieren Sie Ertragsquellen:
-- Income breakdown by source
SELECT
account,
sum(position) as total_income
WHERE account ~ "Income:Crypto"
GROUP BY account
ORDER BY total_income DESC;Beste Praktiken und Tipps
1. Konsistente Erfassung
- Erfassen Sie Transaktionen sofort nach der Ausführung
- Verwenden Sie standardisierte Transaktionsbeschreibungen
- Fügen Sie Transaktions-Hashes in die Metadaten ein
2. Regelmäßige Abstimmung
- Überprüfen Sie wöchentlich die Salden über alle Plattformen hinweg
- Verwenden Sie Saldenprüfungen, um Abweichungen zu erkennen
- Achten Sie auf fehlende Transaktionen
3. Backup und Sicherheit
- Sichern Sie Ihre Beancount-Dateien regelmäßig
- Verwenden Sie Versionskontrolle (Git) zur Änderungsverfolgung
- Verschlüsseln Sie sensible Daten
4. Dokumentation
- Dokumentieren Sie Ihre Entscheidungen zur Kontostruktur
- Führen Sie Notizen zu komplexen Transaktionen
- Bewahren Sie Aufzeichnungen über API-Konfigurationen auf
5. Steuerliche Vorbereitung
- Erstellen Sie vierteljährlich Berichte für die Steuerplanung
- Führen Sie detaillierte Aufzeichnungen für Prüfungszwecke
- Konsultieren Sie bei komplexen Situationen Steuerfachleute
Fazit
Eine effektive Verfolgung eines Kryptowährungs-Portfolios erfordert Präzision, Konsistenz und die richtigen Werkzeuge. Beancount.io bietet die nötige Flexibilität und Leistung, um komplexe Krypto-Portfolios über mehrere Börsen, Wallets und DeFi-Protokolle hinweg zu verwalten.
Wesentliche Vorteile der Nutzung von Beancount.io für die Krypto-Portfolio-Verfolgung:
- Vollständiges Daten-Eigentum: Ihre Daten im Plain-Text-Format
- Präzise Anschaffungskosten: Lot-basierte Verfolgung mit spezifischer Identifikation
- Unbegrenzte Flexibilität: Individuelle Kontostrukturen und Berichte
- Steueroptimierung: Fortgeschrittene Strategien zur Minimierung der Steuerlast
- Zukunftssicher: Offenes Format gewährleistet langfristige Zugänglichkeit
Beginnen Sie mit einem einfachen Setup und erweitern Sie Ihre Verfolgung schrittweise, während Ihr Portfolio an Komplexität zunimmt. Die Investition in ein ordnungsgemäßes Setup wird sich in genauer Berichterstattung, Steueroptimierung und Portfolio-Einblicken auszahlen.
Bereit, die Kontrolle über Ihr Kryptowährungs-Portfolio zu übernehmen? Starten Sie noch heute mit Beancount.io.