Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
eines Strategiemoduls landen – sie verfälschten dessen Auslastung, dessen GuV und dessen
|
||||||
Konzentration, und zwar dauerhaft, weil die Position echt ist.
|
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
|
### [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
|
`--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
|
einem Live-Port bewegt echtes Geld); und den globalen Handelsschalter übergeht er nicht, sonst
|
||||||
wäre der keiner.
|
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
|
### [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,
|
Gerüst und reine Strategie-Logik stehen: `ow_`-Schema mit fünf Tabellen, Zustandsautomat,
|
||||||
|
|||||||
Reference in New Issue
Block a user