From 7117324d131f5aab339594a7f7b43fd0268a1b34 Mon Sep 17 00:00:00 2001 From: Richard Date: Sun, 6 Sep 2026 12:50:32 +0200 Subject: [PATCH] DebugTrading nennt eine wartende Order nicht mehr "abgelehnt" Direkte Folge des Fixes aus #488: Kommt eine Order als PENDING zurueck, ist sie angenommen und wartet auf die Boersenoeffnung. Das Modul meldete sie weiterhin als Ablehnung - im Log stand das Gegenteil dessen, was passiert war. Beim Schliessen ebenso: Die Zeile bleibt offen, aber der Grund heisst jetzt richtig. Eine Position, die wir fuer geschlossen halten, obwohl sie es nicht ist, waere schlimmer als ein zweiter Versuch - das bleibt. Nicht behoben und als #491 gemeldet: Das Modul sieht seine eigene wartende Order nicht und setzt beim naechsten Lauf eine weitere ab. Gebremst wird das heute allein vom Cap des Buchs, weil jede wartende Order ihr Kapital bindet. Das ist eine Sicherung, die greift, aber kein Entwurf. Die Stelle steht im Code. 473 Tests gruen. Co-Authored-By: Claude Opus 5 --- .../Workers/DebugTradingWorker.cs | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/IBKRTrader.Modules.DebugTrading/Workers/DebugTradingWorker.cs b/src/IBKRTrader.Modules.DebugTrading/Workers/DebugTradingWorker.cs index 5c88371..33c2b19 100644 --- a/src/IBKRTrader.Modules.DebugTrading/Workers/DebugTradingWorker.cs +++ b/src/IBKRTrader.Modules.DebugTrading/Workers/DebugTradingWorker.cs @@ -135,6 +135,21 @@ public class DebugTradingWorker : WorkerBase }; var result = await _execution.ExecuteAsync(signal, ct); + + if (result.IsPending) + { + // Die Order liegt beim Broker und wartet auf die Börseneröffnung (#488). Sie "abgelehnt" + // zu nennen, wäre schlicht falsch - und war es bis zum 2026-09-06 auch. + // + // Es wird KEINE Zeile in dbg_position geschrieben: Wir halten nichts. Bis die + // Order-Verfolgung steht (#294), sieht das Modul seine eigene wartende Order nicht und + // setzt beim nächsten Lauf eine weitere ab. Gebremst wird das allein vom Cap des Buchs + // DBG, weil jede wartende Order ihr Kapital bindet - eine Sicherung, kein Entwurf. + Logger.Warn(Module, + $"Eröffnung liegt beim Broker ({action.Instrument.Key}), Ausgang offen: {result.Reason}"); + return false; + } + if (!result.Executed) { // Eine Ablehnung ist hier kein Fehler, sondern der halbe Zweck des Moduls: Sie zeigt, @@ -184,10 +199,12 @@ public class DebugTradingWorker : WorkerBase var result = await _execution.ExecuteAsync(signal, ct); if (!result.Executed) { - // Wichtig: Die Zeile bleibt offen. Beim nächsten Lauf wird es erneut versucht - eine - // Position, die wir für geschlossen halten, obwohl sie es nicht ist, wäre schlimmer - // als ein weiterer Versuch. - Logger.Warn(Module, $"Schließen abgelehnt ({row.ContractKey}): {result.Reason}"); + // Wichtig: Die Zeile bleibt offen - auch bei PENDING. Beim nächsten Lauf wird es erneut + // versucht; eine Position, die wir für geschlossen halten, obwohl sie es nicht ist, wäre + // schlimmer als ein weiterer Versuch. + Logger.Warn(Module, result.IsPending + ? $"Schließen liegt beim Broker ({row.ContractKey}), Ausgang offen: {result.Reason}" + : $"Schließen abgelehnt ({row.ContractKey}): {result.Reason}"); return false; }