RF-Slice 5: Demo-Execution + Resolution-Monitor (Phase RF-2)

Schliesst die Demo-Handelsschleife des ResolutionFarming:
- FarmingExecutionPlanner (pur): waehlt aus akzeptierten Kandidaten die zu oeffnenden
  Positionen + Groesse, priorisiert nach Score, unter Markt-/Cluster-/Gesamt-Limits,
  Kill-Switch und Tages-Drossel; dedupliziert Token, schreibt Exposure im Lauf fort.
- FarmingResolution (pur): baut aus Position + Ergebnis den RfClosedTrade (PnL/Fees/Redeem-Status).
- FarmingExecutionService: Demo-Einstieg (Maker-Fill 0 Fee via FarmingFillModel) -> rf_positions.
  Live-Execution bewusst geloggt/uebersprungen (Zielland). Demo-Balance NICHT mutiert
  (kein Shared-Account-Konflikt; PnL fliesst ueber rf_closed_trades).
- FarmingResolutionMonitorService: schliesst aufgeloeste Positionen, bucht GlobalPnl,
  Dual-Write ins Core-Trade-Log (Dashboard). Auflösungsstatus via IMarketResolutionSource.
- NullMarketResolutionSource als Default (nichts loest auf), bis Live-Data-API verdrahtet ist.

15 neue Tests (Planner 8, Resolution 3, Execution-Service 2, Monitor 2). Build 0 Fehler,
311 Tests gruen, --smoke-ui ok.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-07-10 11:40:30 +02:00
co-authored by Claude Opus 4.8
parent 80e6ad9b2d
commit 1c3a364df2
11 changed files with 680 additions and 1 deletions
@@ -42,7 +42,16 @@ namespace PolyTrader.Modules.ResolutionFarming
services.AddSingleton<Services.MarketScannerService>();
services.AddHostedService(sp => sp.GetRequiredService<Services.MarketScannerService>());
// Execution, Resolution-Monitor, Auto-Redeem und UI folgen in den nächsten Slices.
// Demo-Execution + Resolution-Monitor (Phase RF-2). Marktauflösungs-Quelle vorerst Null
// (nichts löst auf), bis die Live-Data-API im Zielland verdrahtet ist. Live-Order-Execution
// und On-Chain-Redeem sind ebenfalls Zielland-Arbeit.
services.AddSingleton<Services.IMarketResolutionSource, Services.NullMarketResolutionSource>();
services.AddSingleton<Services.FarmingExecutionService>();
services.AddHostedService(sp => sp.GetRequiredService<Services.FarmingExecutionService>());
services.AddSingleton<Services.FarmingResolutionMonitorService>();
services.AddHostedService(sp => sp.GetRequiredService<Services.FarmingResolutionMonitorService>());
// Live-Marktquelle, Live-Execution, On-Chain-Auto-Redeem und Kalibrierung folgen (Zielland).
}
public void RegisterUi(IModuleUiHost host, System.IServiceProvider services)