using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using PolyTrader.Core.Configuration; using PolyTrader.Core.Modularity; using PolyTrader.Modules.ResolutionFarming.Persistence; using PolyTrader.Modules.ResolutionFarming.Persistence.Ef; namespace PolyTrader.Modules.ResolutionFarming { /// /// Strategiemodul „ResolutionFarming": kauft systematisch unterbewertete Favoriten (~0.90–0.98) /// in bald auflösenden Märkten, hält bis zur Resolution und löst ein (Favorite-Longshot-Reversal). /// Erstes neues Strategiemodul über Copytrading hinaus – geringster Infrastrukturbedarf. /// /// Aufbau (inkrementell): geldkritische Entscheidungslogik liegt pur und unit-getestet in /// Logic/ (FarmingRiskEngine, FarmingScanner, FarmingFillModel); Persistenz, Scanner-Job, /// Execution und UI folgen in eigenen Slices. Live-CLOB/On-Chain-Redeem sind Zielland-Arbeit. /// public class ResolutionFarmingModule : IPolyTraderModule { public string Name => "ResolutionFarming"; public string DbPrefix => "rf_"; public void RegisterServices(IServiceCollection services, IConfiguration configuration) { // Modul-Persistenz: EF Core / Pomelo / MySQL (thread-safer DbContextFactory), eigene rf_-Tabellen. var conn = configuration["Database:MySqlConnectionString"] ?? string.Empty; services.AddDbContextFactory(o => o.UseMySql(conn, DatabaseServerVersion.Value)); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); // Read-only-Scanner (Phase RF-1). Marktquelle vorerst NullFarmingMarketSource: das Modul // läuft ohne Live-Gamma/CLOB-Anbindung (die im Zielland registriert wird) und produziert // dann korrekt keine Kandidaten. services.AddSingleton(); services.AddSingleton(); services.AddHostedService(sp => sp.GetRequiredService()); // 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.AddSingleton(); services.AddHostedService(sp => sp.GetRequiredService()); services.AddSingleton(); services.AddHostedService(sp => sp.GetRequiredService()); // Live-Marktquelle, Live-Execution, On-Chain-Auto-Redeem und Kalibrierung folgen (Zielland). } /// /// Aktuell ohne Ansicht: Die WinForms-UI wurde mit der Linux-Portierung entfernt, die /// Avalonia-Ansicht folgt (Stufe L3/L4). Die Fachlogik dieses Moduls laeuft davon /// unabhaengig weiter – die Shell zeigt schlicht kein Fenster fuer das Modul an. /// /// Beim Nachbau zu erhalten (Spezifikation: docs/UI-SPEZIFIKATION-WinForms.md, /// Originalcode: Git-Tag winforms-final): /// /// View-ID resolutionfarming.main (stabil – Launcher-Button und Symbol haengen daran) /// Titel ResolutionFarming, Gruppe ResolutionFarming, Order 200 /// Ein Fenster fuers ganze Modul: ResolutionFarmingMainForm mit Tabs: Kandidaten / Positionen / Historie+Statistik / Settings /// /// public void RegisterUi(IModuleUiHost host, IServiceProvider services) { // Bewusst leer, bis die Avalonia-Ansicht steht (siehe Doku oben). } public Task StartAsync(CancellationToken cancellationToken) => Task.CompletedTask; public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; } }