diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 881bdce..8a39ced 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -403,6 +403,52 @@ DebugTrading-Modul (#468) platzieren echte Orders. Ihre Positionen dürfen nicht eines Strategiemoduls landen – sie verfälschten dessen Auslastung, dessen GuV und dessen Konzentration, und zwar dauerhaft, weil die Position echt ist. +### [O/K] Währung gehört zur Identität eines Instruments + +Am 2026-09-04 stellte sich beim Order-Nachweis heraus, dass das Paper-Konto sein Bargeld in **EUR** +hält und in USD mit −3.751 im Minus steht. Ein USD-Kauf wäre damit ein USD-Kredit gewesen, und +Schicht C hat ihn zu Recht abgelehnt. Die Entscheidung fiel gegen ein Aussetzen der Sicherung und +für das, was das Problem an der Wurzel löst: **Instrumente sind währungsfähig.** + +Die Währung steht dabei im Instrumentenschlüssel und nicht bloß als Attribut daneben. Derselbe +Ticker notiert an mehreren Plätzen — SAP gibt es in Frankfurt in EUR und als ADR in New York in +USD, zu deutlich verschiedenen Kursen. Zwei Notierungen als eine Position zu führen, würde Bestand +und Deckung vermischen. + +**USD bleibt implizit** (`AAPL`, nicht `AAPL:USD`). Andernfalls wäre jede Bestandszeile ab sofort +ein anderes Instrument als vorher und aus einer Position würden zwei. Trennzeichen ist der +Doppelpunkt, nicht der Punkt — Ticker enthalten Punkte (BRK.B). + +### [X] #479 — Die Order lief auf die falsche Notierung + +Der teuerste Fund des Tages, und einer, den kein Unit-Test hätte finden können. Geprüft, bepreist +und reserviert wurde `SAP:EUR` zu 188,74 EUR. Ausgeführt wurde die SAP-ADR in New York zu 216,68 +USD; das USD-Guthaben rutschte um 434 ins Minus. + +Damit wurde **genau der Margin-Kredit aufgenommen, den Schicht C verhindern soll** — an der +Sicherung vorbei, weil die Sicherung ein anderes Instrument geprüft hatte als das, was gehandelt +wurde. Ohne Fehlermeldung. Die Bücher wiesen anschließend eine EUR-Position zum USD-Preis aus, die +es beim Broker nie gab. + +Die Ursache war eine nicht gesetzte Eigenschaft: `ExecutionService` baute die `OrderRequest` aus +Einzelfeldern, und `Currency` fiel still auf USD zurück. Die Lehre ist allgemeiner als der Fehler: +**eine neue Dimension an der Identität eines Objekts macht jede Stelle, die dieses Objekt aus +Teilen zusammensetzt, zu einer Fehlerquelle.** Deshalb wurde nicht die Zuweisung nachgetragen, +sondern `OrderRequest.For(instrument, …)` eingeführt — im Orderpfad lässt sich ein Auftrag nicht +mehr aus losen Feldern bauen. + +### [K] #480 — Das Kapitalmodell rechnet Währungen zusammen + +Solange jedes Instrument USD war, war die Frage gegenstandslos. Mit der ersten EUR-Position ist sie +es nicht mehr: Pool, Konzentrationslimit und die Summe der offenen Reservierungen addieren Beträge +verschiedener Währungen unverändert. + +Bei ähnlichen Kursen fällt das nicht auf — **genau deshalb ist es gefährlich.** Und die Richtung +des Fehlers ist nicht einheitlich: bei einer starken Fremdwährung wird die Auslastung +*unterschätzt*, und ein Buch darf mehr aufmachen als es soll. Das Kapitalmodell sieht die Lösung in +§7 bereits vor (Buch-Cash und Reservierungen je Währung); umgesetzt ist sie bisher nur für die +Reservierungen und für Schicht C. Für die Pool-Rechnung fehlen Umrechnungskurse — die liefert #321. + ### [H] #293 — Wie der Nachweis geführt wird `--ibkr-check` liest nur. Für #293 gibt es deshalb `--verify-order SYMBOL` am Daemon: es geht durch @@ -415,6 +461,13 @@ Paper-Modus **und** außerhalb eines Paper-Ports (eines allein sagt nichts – e einem Live-Port bewegt echtes Geld); und den globalen Handelsschalter übergeht er nicht, sonst wäre der keiner. +**Geführt am 2026-09-04** gegen das Paper-Konto DUR371528: Kauf von 2 × `SAP:EUR` zu 185,86 EUR, +alle fünf Tabellen stimmen. Der Nachweis hat dabei **vier Fehler gefunden**, drei davon für +Unit-Tests unerreichbar — die falsche Notierung (#479), eine Bargeldaufschlüsselung, die gar nicht +ankam, eine Kursabfrage ohne Währung, und zwei Spalten der Buchführung, die zu eng waren bzw. leer +blieben. Das ist der eigentliche Ertrag: der Lauf gegen echte Gegenstellen prüft die Fugen zwischen +den Bausteinen, und dort saßen alle vier. + ### [W] #309/#310 — Was steht, und was der Handelsbetrieb noch braucht Gerüst und reine Strategie-Logik stehen: `ow_`-Schema mit fünf Tabellen, Zustandsautomat,