Broker-Adapter gegen TWS/IB Gateway, aktivierbar über IBKRSettings.UseTwsApi;
NullBrokerClient bleibt Default. TradingEnabled bleibt als zweite, unabhängige
Sicherung bestehen – ohne ihn platziert der ExecutionService keine Order.
Aufteilung (src/IBKRTrader.Core/Trading/Ibkr/):
- IbkrMapping – reine Abbildung Core <-> TWS (Kontrakt, Order, Kurs, Port-
und Statusregeln), vollständig unit-getestet
- IbkrConnection – Socket-Lebenszyklus, Reader-Thread, reqId-Korrelation über
TaskCompletionSource
- IbkrBrokerClient – implementiert IBrokerClient, übersetzt Fehler in leere
Ergebnisse (Konto 0 lässt die Risikoprüfung alles ablehnen)
Bewusste Entscheidungen:
- Träges Verbinden mit Wiederholung statt Verbindungsaufbau beim Start: TWS ist
nach einem Neustart minutenlang nicht bereit.
- Port wird gegen den Handelsmodus geprüft; Paper-Modus auf Live-Port (oder
umgekehrt) lässt den Broker inaktiv, statt auf dem falschen Konto zu handeln.
- MarketDataType Default 4: Paper-Konten ohne Datenabo bekommen sonst keine Kurse.
- Fehlercode 10167 ist ein Statushinweis (verzögerte Daten folgen), kein Fehler.
Als Fehler behandelt scheiterte jede einzelne Kursabfrage.
Verifiziert gegen Paper-Konto DUR371528: Verbindung, Konto (100.105,50 EUR),
Kurse (AAPL/MSFT/NVDA, verzögert), Fehlerpfade. Orderpfad bis zur Broker-Annahme
per What-If-Order geprüft (Aktie + Option, ohne Ausführung); dabei zugleich die
Optionsberechtigung des Kontos bestätigt. Offen: echte Ausführung (Fill ->
Buchung) und asynchrone Fill-Verfolgung – beides in IBKR-Integration.md notiert.
Doku: TWS-Setup-Checkliste.md (Einstellungen für Neuinstallation) neu,
IBKR-Integration.md / ARCHITECTURE.md / README.md nachgezogen.
154/154 Tests grün.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
35 lines
639 B
JSON
35 lines
639 B
JSON
{
|
|
"Database": {
|
|
"Host": "your-db-host",
|
|
"Port": 3306,
|
|
"Database": "your-db-name",
|
|
"User": "your-db-user",
|
|
"Password": "CHANGE_ME"
|
|
},
|
|
"IBKR": {
|
|
"Host": "127.0.0.1",
|
|
"Port": 4002,
|
|
"ClientId": 1,
|
|
"UseTwsApi": false,
|
|
"MarketDataType": 4,
|
|
"ConnectTimeoutSeconds": 15,
|
|
"RequestTimeoutSeconds": 15,
|
|
"OrderTimeoutSeconds": 60
|
|
},
|
|
"Logging": {
|
|
"Level": "Info",
|
|
"MaxFileSizeMb": 10,
|
|
"RetentionDays": 30
|
|
},
|
|
"Webserver": {
|
|
"Port": 5001,
|
|
"Enabled": false
|
|
},
|
|
"WorkerSettings": {
|
|
"BackupWorker": {
|
|
"Enabled": true,
|
|
"IntervalMinutes": 30
|
|
}
|
|
}
|
|
}
|