Ihre Bestände stehen bereits im Ledger. Ihre Preise sind der Teil, den Sie immer wieder neu eintippen.
Diese Asymmetrie ist die älteste Plackerei der Klartext-Buchhaltung. Ein Kauf wird einmal geschrieben und
gilt für immer: 120 NWRB {41.80 USD, 2024-03-12} erfasst eine Menge, einen Einstandspreis und ein Datum, und nichts,
was danach passiert, ändert eines der drei. Ein Preis ist das Gegenteil — an einem Tag korrekt, dann
still und leise falsch, und zwar auf eine Weise, die keine Saldenprüfung je entdecken wird, denn ein veralteter Preis
stimmt trotzdem exakt. Beancounts eigene Antwort war schon immer, sie mit einem Tool abzurufen und die
Ausgabe zu committen, was funktioniert und was viele Leute automatisiert haben. Es ist trotzdem ein Skript, das Ihnen gehört, ein Cron-Eintrag,
den Sie pflegen, und eine Datei, die Sie zusammenführen.
Die beancount.io-Ledger-Engine übernimmt diese Auflösung jetzt selbst, für Ledger, die bei uns gehostet werden. Dieser Beitrag handelt davon, was tatsächlich ausgeliefert wurde, was es bewusst nicht anfasst und — ebenso wichtig — was noch nicht gebaut ist.
Was ausgeliefert wurde
Ein gehostetes beancount.io-Ledger kann ein Include tragen, dessen Ziel eine URL statt eines Dateinamens ist:
; main.bean, in einem gehosteten beancount.io-Ledger.
;
; Die verwaltete Zeile ist absichtlich auskommentiert dargestellt: Das vorgelagerte `include` nimmt
; einen Datei-Glob, daher lädt diese Datei weiterhin, wenn Sie sie auf Ihren eigenen Rechner kopieren. Nur
; die gehostete Engine löst die URL-Form auf.
option "title" "Taxable brokerage"
option "operating_currency" "USD"
include "accounts.bean"
; include "https://beancount.io/prices/ACME-USD"
include "transactions/purchases.bean"
include "transactions/sales.bean"Das vorgelagerte Beancount-include nimmt einen Dateinamen — „der angegebene Pfad kann ein absoluter oder ein
relativer Dateiname sein" ist die gesamte Spezifikation —, ein URL-Include ist also kein reines Beancount und
gibt sich auch nie dafür aus. Es ist ein Verhalten der gehosteten Engine, und hier ist präzise, was die Engine
damit macht:
- Sie materialisiert den Feed als schreibgeschützte virtuelle Datei. Die URL wird über den eigenen Include-Auflösungspfad der Engine aufgelöst, genau dort, wo eine lokale Datei gelandet wäre, sodass jede Direktive einen echten Quellort behält. Ihre Bytes werden nie umgeschrieben. Die Datei, die Sie geschrieben haben, bleibt die Datei, die Sie geschrieben haben.
- Der abgerufene Inhalt wird als reine Preisdatei validiert.
price-Direktiven, Kommentare und vier erlaubte Metadaten-Schlüssel —price-source,price-kind,observed-atundprovisional— und nichts anderes. Alles darüber hinaus weist den gesamten Inhalt zurück. Es gibt keine teilweise Übernahme, ein Feed kann also niemals eine Transaktion in Ihre Bücher schmuggeln. - Feeds werden als unveränderliche Revision plus beweglicher Zeiger zwischengespeichert. Die Aktualisierung wird durch einen Zeitstempel gesteuert statt durch Cache-Ablauf, was bedeutet, dass ein Ausfall stromaufwärts Ihre letzte gute Revision nicht mitreißen kann. Eine fehlgeschlagene Aktualisierung ersetzt niemals eine gute Revision durch nichts.
- Die Aktualität wird beim Lesen des Ledgers berechnet, nicht gespeichert:
recent,staleoderunavailable, zusammen mit der Beobachtungszeit, die der Feed selbst gemeldet hat. Ein Preis, den Sie nicht datieren können, ist ein Preis, den Sie nicht prüfen können. - Verwaltete Einträge sind schreibgeschützt. Das Bearbeiten oder Löschen eines Eintrags wird mit einem Fehler abgelehnt, der die verwaltete Quelle nennt, und sie zählen nicht gegen Direktiven-Limits — der Feed darf nicht das Budget Ihres Ledgers verbrauchen.
Alles in dieser Liste läuft innerhalb des gehosteten Ledger-Dienstes. Nichts davon ändert, was eine price-
Direktive bedeutet: Sie legt weiterhin den Wechselkurs zwischen einer Basis-Ware und einer Quote-
Ware fest, genau wie es die Sprachreferenz definiert. Die Aufgabe der Engine ist es nur, korrekte,
datierte, zuordenbare Preise vor den Loader zu stellen.
Ihr eigener Preis gewinnt immer
Das ist der Teil, der darüber entscheidet, ob ein Feed für jemanden nutzbar ist, der sein Ledger ernst nimmt, also wird es exakt festgehalten.
Für dasselbe Datum und dasselbe Währungspaar — und für das reziproke Paar — gewinnt ein Preis, den Sie selbst geschrieben haben, gegenüber dem verwalteten Feed, unabhängig von der Include-Reihenfolge.
Nicht „normalerweise", und nicht „wenn Sie Ihr Include zuletzt einfügen". Die Entscheidung über die Verdeckung wird getroffen, bevor die Preis-Map aufgebaut wird, sie hängt also nicht davon ab, wo das Include in der Datei steht. Verschieben Sie es nach oben, verschieben Sie es nach unten, teilen Sie es auf drei Dateien auf: Das Ergebnis ist dasselbe.
; include "https://beancount.io/prices/ACME-USD" ; Form der gehosteten Engine, wieder auskommentiert dargestellt
; Ein Preis, den Sie selbst geschrieben haben, für dasselbe Datum und dasselbe Paar.
; Dieser gewinnt — über dem Include oder darunter, es macht keinen Unterschied.
2026-09-16 price ACME 93.40 USD(ACME ist der fiktive Emittent aus dem weiter unten stehenden Beispiel-Ledger; die Zahl ist erfunden, keine
Marktbeobachtung.)
Warum diese Regel und nicht die andere: Ein Preis in Ihrer eigenen Datei ist eine Entscheidung. Er könnte der Schlusskurs sein, den Ihr Broker auf dem Kontoauszug ausgedruckt hat, gegen den Sie abstimmen, ein zeitgleiches Quote für eine wenig gehandelte Position, oder eine Zahl, deren Verwendung Ihr Buchhalter angeordnet hat. Ein Feed weiß nichts davon, und ein System, das stillschweigend eine von Menschen verfasste Zahl überschreibt, ist kein Ledger mehr und wird zu einer Meinung. Der Feed füllt Lücken; er korrigiert Sie nicht.
Preise bewegen die Bewertung und sonst nichts
Die zweite Beruhigung ist struktureller Natur statt eine Richtlinienentscheidung, und es lohnt sich, sie mit echten Zahlen zu zeigen statt sie nur zu behaupten. Hier ist das Krypto-Beispiel-Ledger — datierte Lots, Staking, Mining, DeFi-Positionen, Airdrops:
Nehmen Sie einen Eintrag daraus. Ein Governance-Token-Airdrop kommt an und wird als Einkommen zum fairen Marktwert an dem Tag erfasst, an dem er eingeht:
2024-03-20 * "Uniswap" "Receive UNI governance token airdrop"
Assets:Crypto:Wallet:MetaMask:UNI 50.00 UNI {12.50 USD, 2024-03-20}
Income:Crypto:Airdrops -625.00 USDDiese 625,00 $ Einkommen und die 12,50 $ pro Einheit, die dem Lot zugeordnet sind, sind jetzt Fakten über den 2024-03-20. Jede Preis-Direktive im Ledger — verwaltet, handgeschrieben oder gänzlich fehlend — lässt beide unberührt. Preise ändern den Marktwert; sie ändern nie Mengen, Einstandsbasis, Cashflows, Gebühren oder realisierte Gewinne. Weshalb ein Preis-Feed überhaupt etwas ist, wobei man Hilfe sicher annehmen kann: Das Schlimmste, was ein falscher Preis anrichten kann, ist, falsch zu berichten, was eine Position heute wert ist, und er kann niemals die Zahl verfälschen, die Sie in eine Steuererklärung eintragen werden.
Wo ein falsches Preismodell Sie tatsächlich in die Irre führt
Das Aktien- und ETF-Beispiel-Ledger zeigt die schärfere Version desselben Punkts:
Es enthält einen 4-für-1-Aktiensplit, und der Split wird auf die korrekte Weise erfasst — als Mengenänderung, die die Gesamtbasis bewahrt und kein Einkommenskonto berührt:
2025-07-15 * "Broker" "NWRB 4-for-1 share split — quantity change, not income"
Assets:Brokerage:NWRB -120 NWRB {41.80 USD, 2024-03-12}
Assets:Brokerage:NWRB 480 NWRB {10.45 USD, 2024-03-12}Beide Seiten betragen 5.016,00 $. Der Marktwert ist über den Split hinweg unverändert — 120 Aktien zu 62,00 $ am Tag davor, 480 Aktien zu 15,50 $ am Tag danach, so oder so 7.440,00 $ — und das Erwerbsdatum in den geschweiften Klammern überlebt, was einen Verkauf dieser Aktien im Jahr 2026 langfristig hält.
Der häufige Fehler ist, einen Split stattdessen als Preis-Ereignis zu erfassen und sich auf eine „split-adjustierte" Reihe zu stützen, damit die Bewertung stimmt. Das funktioniert nur, solange jeder Preis, den Sie je sehen, auf dieselbe Weise adjustiert wurde. In dem Moment, in dem eine nicht adjustierte Zahl auftaucht — eine alte Bestätigung, ein Screenshot, eine Drittanbieter-Reihe, die nichts neu darstellt — wird die Position mit dem Vierfachen ihres Werts bewertet, und die Aktienanzahl im Ledger stimmt nicht mehr mit dem Broker-Kontoauszug überein, sodass die Jahresend- Zusicherung, die das hätte abfangen können, nicht auslösen kann.
Das ist das eigentliche Argument für einen Preis-Feed mit deklarierter Quelle, deklarierter Art und sichtbarer Beobachtungszeit: nicht Bequemlichkeit, sondern zu wissen, unter welcher Konvention die Zahl, die Sie gerade importiert haben, berechnet wurde. Die Preisdatei des Beispiel-Ledgers ist bewusst nicht adjustiert und sagt das auch, und seine beiden den Split überspannenden Direktiven sind als eine Prüfung geschrieben, die Sie mit dem Auge verifizieren können.
Eine ehrliche Anmerkung zum Klicken in einen der beiden Embeds: Der gehostete Ledger-Viewer zeigt Kontosalden zu Anschaffungskosten und bietet keine Bewertungssteuerung auf der Seite. Die obigen Ledger sind dazu da, Ihnen die Ledger zu zeigen — die Lots, den Split, die Verkäufe spezifischer Lots — nicht eine Marktbewertung, die der Viewer derzeit nicht zeichnet. Beide sind öffentlich, und beide können geklont und lokal ausgeführt werden.
Was hier noch nicht ist
Ein Changelog-Eintrag ist weniger als nichts wert, wenn er Sie etwas glauben lässt, das nicht wahr ist, also hier die andere Hälfte, klar und ohne Datum an irgendetwas davon.
- Der Preis-Endpunkt ist nicht öffentlich. Eine anonyme Anfrage an
https://beancount.io/prices/<ALIAS>wird auf die Login-Seite umgeleitet. Es gibt keinen öffentlichen Alias-Katalog. - Das ist also nichts, was Sie heute in Ihre eigene Datei einfügen können. Die Engine löst das Include auf; die Route, die sie auflöst, ist noch nicht offen. Wenn sie es ist, wird das ein eigener Changelog-Eintrag sein.
- Die lokale
bea-CLI löst URL-Includes nicht auf. Sie liest Dateien von der Festplatte, ein URL-Include schlägt lokal also fehl als Datei-Glob, der auf keine Dateien passt. Loader-Unterstützung in der CLI ist eine benannte Folgeaufgabe. - Es gibt keine API-Oberfläche. Kein REST-, GraphQL- oder MCP-Feld für verwaltete Preise.
- Es gibt keine Dashboard-Oberfläche. Kein Connect-a-Feed-Bildschirm und kein Aktualitätslabel in der UI; die Aktualität, die die Engine berechnet, hat noch keinen Ort, an dem sie angezeigt werden könnte.
- Snapshots und Export sind nicht gebaut, ebenso wenig ein Instrumentenkatalog oder ein manueller Aktualisierungs- Endpunkt.
Was ausgeliefert wurde, ist die Engine-Schicht: die Include-Auflösung, die Validierung, der Revisions-Cache, die Vorrangregel und die Aktualitätsberechnung. Das ist der Teil, auf dem alles andere stehen muss, und es ist der Teil, der später am schwersten zu ändern ist, weshalb er zuerst kam.
Wo Sie als Nächstes schauen sollten
Beide obigen Ledger sind Teil der Beispielgalerie, sechs ausgearbeitete Muster, die Sie klonen und lokal ausführen können — beide dieser zwei liefern absichtlich statische, eingecheckte Preisdateien mit, damit ein zwei Jahre später gemachter Klon noch denselben Bericht erzeugt, den er heute erzeugt. Alles andere, was wir ausliefern, landet im Changelog.
Wenn Sie Preise noch mit einem eigenen Fetcher aktuell halten, bleibt das für ein lokales Ledger die richtige Antwort, und Beancounts eigene Preisabruf-Dokumentation plus das gepflegte beanprice-Tool sind der Ausgangspunkt.
Den langweiligen Teil langweilig halten
Der Grund, warum Preise es wert sind, automatisiert zu werden, ist, dass sie der einzige Teil eines Klartext-Ledgers sind, der von selbst verfällt. Beancount.io gibt Ihnen Klartext-Buchhaltung, die Ihre bleibt — prüfbar, versioniert und niemals hinter Ihrem Rücken umgeschrieben, was genau der Standard ist, den ein verwalteter Feed erfüllen musste, bevor wir einen ausliefern würden. Starten Sie kostenlos und behalten Sie Ihre Bücher in Dateien, die Sie lesen können.





