Bestandsverwaltung in Beancount
Das Bestandssystem von Beancount ist eine leistungsstarke Funktion zur Verfolgung von Vermögenswerten, die im Laufe der Zeit gekauft und verkauft werden, wie z. B. Aktien, Investmentfonds oder Fremdwährungen. Es ermöglicht die präzise Verfolgung der Anschaffungskosten, die für die Berechnung von Kapitalgewinnen und das Verständnis der Portfolio-Performance unerlässlich ist. Dieses Tutorial behandelt die Kernmechanismen der Bestandsverwaltung in Ihrem Hauptbuch.
Kernkonzepte
Im Kern dreht sich die Bestandsverwaltung um die Verfolgung von Positionen. Eine "Position" ist einfach ein Betrag einer Ware, der in einem Konto gehalten wird. Beancount unterscheidet zwischen zwei grundlegenden Arten von Positionen.
Positionstypen
-
Einfache Position (ohne Kosten): Dies ist eine Standard-Saldo-Buchung. Sie stellt einen Betrag einer Ware ohne zugehörige Anschaffungskosten dar. Sie eignet sich für Bargeld oder einfache Saldenbestätigungen.
Assets:Bank:Checking 100.00 USD -
Position mit Anschaffungskosten: Diese Art von Position enthält nicht nur die Anzahl der Einheiten und die Ware, sondern auch die Kosten, zu denen sie erworben wurde. Dies ist die Grundlage der Bestandsverfolgung. Die Kosten werden in geschweiften Klammern
{}angegeben.Assets:Invest:VTSAX 10 VTSAX {100.00 USD, "lot-1"}In diesem Beispiel halten wir 10 Einheiten von
VTSAX. Jede Einheit wurde zu einem Preis von 100.00 USD erworben. Dieses spezielle Aktienpaket wird als "Lot" bezeichnet.
Bestandsoperationen
Es gibt zwei Hauptoperationen, die Sie an einem Bestand durchführen können:
-
Erweiterungen (Hinzufügen zum Bestand): Wenn Sie eine Ware kaufen, erweitern Sie Ihren Bestand. Sie erstellen ein neues Lot mit einer bestimmten Anzahl von Einheiten und einer Kostenbasis.
2024-01-15 * "Aktien kaufen"
Assets:Invest:STOCK 50 STOCK {25.00 USD, "lot-1"}
Assets:Bank:Checking -1250.00 USDHier kaufen wir 50 Einheiten von
STOCKzu einem Preis von 25.00 USD pro Einheit. Dadurch wird ein Lot im KontoAssets:Invest:STOCKerstellt. -
Reduzierungen (Entfernen aus dem Bestand): Wenn Sie eine Ware verkaufen, reduzieren Sie Ihren Bestand. Sie müssen angeben, aus welchem Lot Sie verkaufen. Dies geschieht durch die Angabe übereinstimmender Informationen in den geschweiften Klammern.
2024-01-20 * "Aktien verkaufen"
Assets:Invest:STOCK -25 STOCK {25.00 USD}
Assets:Bank:Checking 625.00 USDIn dieser Transaktion verkaufen wir 25 Einheiten von
STOCKaus dem Lot, das zu 25.00 USD pro Einheit gekauft wurde.
Buchungsmethoden
Wenn Sie einen Bestand reduzieren, benötigt Beancount eine Regel, um zu entscheiden, aus welchem bestimmten Los entnommen werden soll, wenn mehrere Lose übereinstimmen oder die Übereinstimmung nicht eindeutig ist. Diese Regel wird als "Buchungsmethode" bezeichnet. Sie können eine Standardmethode für Ihre gesamte Datei festlegen oder eine für jedes Konto angeben.
1. STRICT (Standard)
Die Methode STRICT ist die Standard- und sicherste Buchungsmethode. Sie erzwingt eine explizite und eindeutige Übereinstimmung.
2024-01-01 open Assets:Invest:STOCK "STRICT"
- Erfordert exakte Losübereinstimmung: Sie müssen genügend Informationen in der Reduktionsbuchung (
{...}) angeben, um das verkaufte Los eindeutig zu identifizieren. - Fehler bei mehrdeutigen Übereinstimmungen: Wenn die angegebenen Informationen mit mehreren Losen übereinstimmen, gibt Beancount einen Fehler aus und zwingt Sie, genauer zu sein.
- Ausnahme: Wenn eine Reduktionsbuchung genau die Gesamtzahl der in einem Konto gehaltenen Einheiten entfernt, ist eine leere Kostenspezifikation (
{}) zulässig.
2. FIFO (First-In, First-Out)
Die FIFO-Methode bucht Reduktionen automatisch gegen die ältesten verfügbaren Lose zuerst.
2024-01-01 open Assets:Invest:STOCK "FIFO"
- Automatische Auflösung: Sie löst Mehrdeutigkeiten auf, indem sie die ältesten übereinstimmenden Lose auswählt.
- Chronologische Übereinstimmung: Dies ist eine gängige Buchhaltungsmethode, bei der Sie davon ausgehen, dass Sie die Vermögenswerte verkaufen, die Sie am längsten gehalten haben. Dies ist die erforderliche Methode für Steuerzwecke in vielen Ländern.
3. LIFO (Last-In, First-Out)
Die LIFO-Methode ist das Gegenteil von FIFO. Sie bucht Reduktionen gegen die neuesten verfügbaren Lose zuerst.
2024-01-01 open Assets:Invest:STOCK "LIFO"
- Umgekehrte chronologische Reihenfolge: Sie wählt die zuletzt erworbenen Lose aus, die mit den Reduktionskriterien übereinstimmen.
- Steueroptimierung: In einigen Gerichtsbarkeiten kann diese Methode zur Steueroptimierung verwendet werden, beispielsweise durch den Verkauf der Aktien mit den höchsten Anschaffungskosten zuerst, um Kapitalgewinne zu minimieren.
4. NONE
Die NONE-Methode deaktiviert die Loszuordnung vollständig.
2024-01-01 open Assets:Invest:STOCK "NONE"
- Keine Loszuordnung: Beancount versucht nicht, Reduktionen mit Erweiterungen abzugleichen.
- Ermöglicht gemischte Vorzeichen: Dies ermöglicht es einem Konto, gleichzeitig positive und negative Salden derselben Ware zu führen. Dieses Verhalten ähnelt der Art und Weise, wie das Ledger CLI-Tool mit Waren umgeht.
Losspezifikation
Ein "Los" ist ein bestimmter Block einer Ware, der zu einem bestimmten Zeitpunkt und Preis erworben wurde. Wenn Sie eine Position erstellen oder reduzieren, können Sie die Losattribute detailliert angeben.
Vollständige Spezifikation
Wenn Sie einen Bestand erweitern (kaufen), können Sie bis zu drei Attribute für das Los angeben:
Assets:Invest:STOCK 10 STOCK {
100.00 USD, # Anschaffungskosten (Kosten pro Einheit)
2024-01-15, # Erwerbsdatum
"lot-identifier" # Eine eindeutige Zeichenkettenbezeichnung
}
Obwohl alle drei optional sind, ist die Angabe zumindest der Anschaffungskosten gängige Praxis.
Übereinstimmungsmethoden
Wenn Sie einen Bestand reduzieren (verkaufen), verwenden Sie dieselbe Syntax, um anzugeben, aus welchen Losen Sie verkaufen möchten.
-
Übereinstimmung nach Kosten: Dies ist die gebräuchlichste Methode.
Assets:Invest:STOCK -5 STOCK {100.00 USD} -
Übereinstimmung nach Datum: Wenn die Kosten identisch sind, können Sie die Mehrdeutigkeit mithilfe des Erwerbsdatums beseitigen.
Assets:Invest:STOCK -5 STOCK {2024-01-15} -
Übereinstimmung nach Bezeichnung: Bezeichnungen bieten eine narrensichere Möglichkeit, ein Los zu identifizieren.
Assets:Invest:STOCK -5 STOCK {"lot-identifier"} -
Übereinstimmung mit einem beliebigen Los: Eine leere Menge geschweifter Klammern
{}stimmt mit jedem verfügbaren Los überein. Dies wird häufig mit der BuchungsmethodeFIFOoderLIFOverwendet, bei der das spezifische Los automatisch ausgewählt wird.Assets:Invest:STOCK -5 STOCK {}
Preisbehandlung
Es ist wichtig, den Unterschied zwischen Anschaffungskosten ({}) und Preis (@) zu verstehen. Sie dienen unterschiedlichen Zwecken und sind nicht austauschbar.
Preis vs. Kosten
{cost}: Definiert die Anschaffungskosten eines Vermögenswertes. Es ist Teil des Inventarloses selbst und wird für die Buchung von Reduktionen und die Berechnung von Kapitalgewinnen verwendet.@ price: Eine Anmerkung, die einen Marktpreis zum Zeitpunkt einer Transaktion aufzeichnet. Es wird für Währungsumrechnungen oder zur Notierung des Marktwertes an einem bestimmten Datum verwendet.
Hier sind die drei Szenarien:
-
Preisnotation (Konvertierung): Verwenden Sie
@, um von einer Währung in eine andere umzurechnen.Assets:Forex 1000 USD @ 0.85 EUR -
Anschaffungskosten (Erwerb): Verwenden Sie
{}, wenn Sie einen Vermögenswert kaufen, um dessen Kosten festzulegen.Assets:Invest 10 STOCK {100.00 USD} -
Beides (Verkauf mit Preisaufzeichnung): Verwenden Sie beim Verkauf eines Vermögenswertes
{}, um das verkaufte Los zu identifizieren, und@, um den Verkaufspreis aufzuzeichnen. Dies ermöglicht die automatisierte Berechnung von Kapitalgewinnen.Assets:Invest -10 STOCK {100.00 USD} @ 105.00 USDDieser Eintrag verkauft 10
STOCKaus dem Los, das jeweils 100.00 USD gekostet hat, zu einem Verkaufspreis von jeweils 105.00 USD.
Preisverwendungsregeln
- Preisannotationen (
@) haben keinen Einfluss darauf, welches Los gebucht wird. Die Loszuordnung wird ausschließlich durch die Anschaffungskosten ({}) und die Buchungsmethode des Kontos gesteuert. - Das Symbol
@wird nur verwendet für:
- Währungsumrechnungen.
- Erfassung des Marktwerts eines Vermögenswertes zum Zeitpunkt einer Transaktion.
- Angabe des Verkaufspreises für die Berechnung von Kapitalgewinnen.
Konfiguration
Sie können Buchungsmethoden global oder pro Konto konfigurieren.
Globale Buchungsmethode
Sie können eine Standardbuchungsmethode für Ihre gesamte Beancount-Datei mithilfe der option-Direktive festlegen.
option "booking_method" "STRICT"
Die verfügbaren Optionen sind "STRICT", "FIFO", "LIFO" und "NONE".
Pro-Konto-Überschreibung
Es ist oft nützlich, für verschiedene Konten unterschiedliche Methoden zu haben. Beispielsweise möchten Sie möglicherweise FIFO für ein Altersvorsorgekonto, aber STRICT für ein steuerpflichtiges Brokerage-Konto, um sicherzustellen, dass Sie bestimmte Steuerlose verkaufen. Sie können die Buchungsmethode beim Eröffnen des Kontos festlegen.
2024-01-01 open Assets:Retirement:401K "FIFO"
2024-01-01 open Assets:Taxable:Stock "STRICT"
Bewährte Verfahren
-
Bestandsorganisation: Um Ihr Hauptbuch sauber und einfach zu halten, wird dringend empfohlen, für jede eindeutige Ware, die Sie halten, separate Konten zu verwenden.
# GUT: Separate Konten nach Ware
Assets:Invest:VTSAX ; Hier nur VTSAX-Positionen
Assets:Invest:VFIAX ; Hier nur VFIAX-PositionenVermeiden Sie es, verschiedene Aktien oder Fonds im selben Konto zu mischen, da dies die Bestandsverwaltung erschwert.
-
Losverwaltung:
-
Verwenden Sie aussagekräftige Bezeichnungen für Lose, insbesondere für bestimmte Transaktionen wie Tax-Loss-Harvesting oder Mitarbeiteraktienzuteilungen.
Assets:Invest:STOCK 10 STOCK {100.00 USD, "tax-loss-harvest-2024"} -
Dokumentieren Sie Ihre Trades mit Kommentaren. Dies macht Ihr Hauptbuch später leichter lesbar und verständlich.
Assets:Invest:STOCK -10 STOCK {100.00 USD} @ 110.00 USD ; Gewinn: 10%
- Debugging: Wenn Sie auf Fehler oder unerwartetes Verhalten stoßen, bietet Beancount Tools, um den Status Ihres Inventars zu überprüfen.
-
Inventarstatus prüfen: Das Tool
bean-doctorkann Ihnen den genauen Status aller Inventare zu jedem Zeitpunkt in Ihrer Datei anzeigen.Ersetzen Sie
<LINENO>durch die Zeilennummer direkt nach einer Transaktion, um deren Auswirkung zu sehen. -
Losabgleich überprüfen: Das Tool
bean-checkvalidiert Ihre gesamte Datei. Es erfasst alle Buchungsfehler, z. B. mehrdeutige Losübereinstimmungen imSTRICT-Modus.