Files

43 KiB

Finlytic Systemdokumentation (STATE.md)

Dieses Dokument bietet eine lückenlose, detaillierte und strukturierte Gesamtdokumentation der gesamten Finlytic-Plattform. Es umfasst die Architektur, alle Konfigurationen & Einstellungen, mathematische/finanzielle Formeln, sämtliche Schnittstellen (MQTT RPC, MQTT Pub/Sub, REST API, SignalR Hubs), Datenbankstrukturen sowie die genaue Funktionsweise der 9 Microservices und des Flutter-Frontends.


Inhaltsverzeichnis

  1. Systemarchitektur & Topologie
  2. Microservices-Übersicht & Datenbanken
  3. Einstellungen & Konfiguration (Settings)
  4. Mathematische, Technische & Finanzielle Formeln
  5. Schnittstellen & Endpunkte
  6. Detaillierte Funktionsweise & Datenfluss
  7. Frontend-Architektur (FinlyticApp)

1. Systemarchitektur & Topologie

Finlytic ist eine modulare, ereignisgesteuerte Finanzanalyse- und automatisierte Trading-Plattform für Aktien und Derivate (Knock-Out-Zertifikate, Optionsscheine).

┌────────────────────────────────────────────────────────────────────────┐
│                   FinlyticApp (Flutter Web & Mobile)                   │
└───────────────────────────────────┬────────────────────────────────────┘
                                    │ HTTP / WebSocket (SignalR)
                                    ▼
┌────────────────────────────────────────────────────────────────────────┐
│                   FinlyticBackend (API & Gateway)                      │
└───────────────────────────────────┬────────────────────────────────────┘
                                    │ MQTT RPC & Pub/Sub
     ┌──────────────┬───────────────┼──────────────┬──────────────┐
     ▼              ▼               ▼              ▼              ▼
┌──────────┐ ┌──────────────┐ ┌───────────┐ ┌─────────────┐ ┌────────────┐
│Finlytic  │ │FinlyticNews  │ │Finlytic   │ │Finlytic     │ │Finlytic    │
│Assets    │ │              │ │Sentiment  │ │Fundamentals │ │Technicals  │
└────┬─────┘ └──────┬───────┘ └─────┬─────┘ └──────┬──────┘ └─────┬──────┘
     │              │               │              │              │
     └──────────────┴───────┬───────┴──────────────┴──────────────┘
                            │ MQTT (Signale, Scores, Setups)
     ┌──────────────────────┼──────────────────────┐
     ▼                      ▼                      ▼
┌──────────┐         ┌──────────────┐       ┌────────────┐
│Finlytic  │ ──────► │FinlyticBot   │       │Finlytic    │
│Engine    │ (Trades)│(Auto-Trading)│       │Simulation  │
└────┬─────┘         └──────────────┘       └────────────┘
     │
     ▼
┌──────────┐
│Finlytic  │ ──────► ntfy Push-Server (Mobil & Webhooks)
│Notify    │
└──────────┘

Kernprinzipien & Regeln (Rules.md):

  1. MQTT-Exklusivität im Backend: Alle internen Microservices kommunizieren ausschließlich über MQTT. Es gibt keine direkten HTTP-Verbindungen zwischen Backend-Diensten.
  2. Einziges Web-Gateway: FinlyticBackend ist der einzige Dienst mit Kestrel-HTTP/WebSocket-Port (5000:8080).
  3. Strikte Datenisolation: Jeder Service besitzt seine eigene PostgreSQL-Datenbank (keine geteilten Tabellen).
  4. Dynamische Konfiguration: Dynamic Settings (ISettingsService) werden in DB persistiert und per MQTT aktualisiert, ohne Neustart.
  5. Kanalbasiertes Logging: Jeder Service sendet strukturierte Logs per MQTT (finlytic/logs/{service}), die im Admin-Panel live gestreamt werden.
  6. Keine Scheindaten: Reine Echtdaten oder explizite Empty-States/Exceptions.

2. Microservices-Übersicht & Datenbanken

Service Typ / Basis PostgreSQL-Datenbank Hauptaufgabe
FinlyticCore Shared Class Library (Keine eigene DB) Gemeinsame DTOs, Enums, MQTT-Clients, TradeRepublic-Client, Settings-Interface.
FinlyticAssets Background Worker finlytic_assets Stammdaten-Synchronisation (Stocks, ETFs), Lokale Logo-Speicherung, Trade Republic Ticker-Proxy, KO-Derivate-Abfrage.
FinlyticNews Playwright Worker finlytic_news Scraping von 10 Finanzportalen, Duplikaterkennung (SimHash/Jaccard), Regex/NLP-Asset-Matching, Sector-Clustering.
FinlyticSentiment Background Worker finlytic_sentimental FinBERT KI-Sentiment-Analyse (Deutsch & Englisch Webhooks), Exponentielle Zeit-Decay-Gewichtung (\lambda = \ln(2)/\tau).
FinlyticFundamentals Playwright Worker finlytic_fundamentals Fundamentaldaten & Kennzahlen (KGV, ROE, Cashflow, Analysten-Ratings, Dividenden, Earnings-Kalender).
FinlyticTechnicals Background Worker finlytic_ta Multi-Timeframe-Kerzen (15m, 1h, 1d), 10 Kernstrategien, 15 Pattern-Detektoren (SMC & Chart), Symmetrisches Scoring V2.
FinlyticEngine Background Worker finlytic_engine Composite Opportunity Scorer (COS V2), Earnings/Dividenden-Sperren, n8n AI Reasoning Gate, Trade Lifecycle & Monitoring.
FinlyticSimulation Background Worker finlytic_simulation Quantitative Backtesting-Engine, Replay-Runner (Anti-Lookahead), Zuverlässigkeitsmatrix, Slippage- & Gebührenmodellierung.
FinlyticBot Background Worker finlytic_bot Automatisierte Orderausführung (1-2% Risikoregel), Alpaca Paper Trading (US-Equities) & Interner Synthetischer Ledger.
FinlyticNotify Background Worker finlytic_notify Push-Benachrichtigungen via ntfy (Proposals, Trade-Events, Bot-Status, News).
FinlyticBackend ASP.NET Core Kestrel finlytic_backend JWT-Authentifizierung, User- & Favoritenverwaltung, SignalR-Streaming, MQTT-Bridge.

3. Einstellungen & Konfiguration (Settings)

3.1 Umgebungsvariablen (compose.yaml / .env)

Variable Standardwert Beschreibung
DB_HOST OmniDB Hostname der PostgreSQL-Instanz
DB_PORT 5432 Port der PostgreSQL-Instanz
DB_PASSWORD (Pflichtfeld) Passwort für den PostgreSQL-Benutzer admin
MQTT_HOST host.docker.internal Hostname des MQTT-Brokers (z.B. Mosquitto)
MQTT_PORT 4545 Port des MQTT-Brokers
JWT_SECRET_KEY (Pflichtfeld, \ge 32 Zeichen) Signaturschlüssel für JWT-Token
ADMIN_DEFAULT_PASSWORD (Pflichtfeld) Initiales Passwort für den Standard-Admin
FINLYTIC_DATA_ROOT C:/Users/larsh/Documents/docker/finlytic Pfad für persistente Assets (Logos, Index)
NTFY_BASE_URL http://host.docker.internal:8080 Basis-URL des ntfy-Push-Servers
Webhooks__German https://n8n.kleidukos.me/webhook/sentiment/de FinBERT Webhook für deutsche Artikel
Webhooks__English https://n8n.kleidukos.me/webhook/sentiment/en FinBERT Webhook für englische Artikel
Ai__N8nValidationWebhookUrl https://n8n.kleidukos.me/webhook/trade-validation n8n Webhook für AI-Trade-Validierung

3.2 Dynamische Service-Einstellungen (ISettingsService)

Jeder Microservice verwaltet typisierte, zur Laufzeit änderbare Konfigurationswerte:

FinlyticAssets (SettingKeys.cs)

  • Logging.Channel.Assets (bool, default: true): Logging für Asset-Scans
  • Logging.Channel.MQTT (bool, default: true): Logging für MQTT-Verkehr
  • Logging.Channel.Health (bool, default: true): Logging für Ping-Healthchecks
  • Logging.Channel.TradeRepublic (bool, default: true): Logging für TR-WebSocket
  • TradeRepublic.WsReconnectIntervalSeconds (int, default: 5): Reconnect-Wartezeit
  • TradeRepublic.WsTimeoutSeconds (int, default: 15): Timeout für TR-Anfragen
  • Scanner.EnableAutoScan (bool, default: true): Automatischer Asset-Sync aktiviert
  • Scanner.CurrentScanningType (string, default: "Stock"): Aktueller Typ im Loop
  • Scanner.CurrentScanningPage (int, default: 0): Aktuelle Paginierungsseite (Recovery-Modus)
  • Scanner.FinishedInitialScan (bool, default: false): Status des Initial-Scans
  • Scanner.BatchAssetUpdateDelay (int, default: 0): Pause zwischen Batches (Sekunden)
  • Scanner.AssetUpdateTypeDelay (int, default: 0): Pause zwischen Typen (Sekunden)
  • Scanner.TradeRepublicMaxRequestPageSize (int, default: 50): Batchgröße pro TR-Call
  • Scanner.CycleDelayMinutes (int, default: 1440): Wartezeit bis zum nächsten Vollscan (24h)

FinlyticNews (SettingKeys.cs)

  • Logging.Channel.News (bool, default: true): News-Verarbeitungs-Logs
  • Logging.Channel.Scraper (bool, default: true): Scraper-Adapter-Logs
  • Logging.Channel.Matcher (bool, default: true): In-Memory Asset-Matcher-Logs
  • Logging.Channel.Deduplication (bool, default: true): Duplikaterkennungs-Logs
  • Scraping.IntervalMinutes (int, default: 15): Scraping-Intervall
  • Scraping.MaxArticlesPerFeed (int, default: 20): Maximale Artikel pro Feed
  • Feature.EnableAutoScraping (bool, default: true): Automatisches Scraping aktiv
  • Scraping.HttpTimeoutSeconds (int, default: 30): Timeout für HTTP/Playwright
  • Deduplication.TitleSimilarityThreshold (double, default: 0.85): Jaccard-Schwellenwert
  • Deduplication.SimHashMaxHammingDistance (int, default: 3): Max. SimHash-Bitdistanz
  • Deduplication.WindowDays (int, default: 7): Historienfenster für Duplikate
  • Matching.MinNameLength (int, default: 3): Minimale Zeichenlänge für Namensmatching
  • Matching.EnableSectorClustering (bool, default: true): Sektorenprüfung bei Einzeltreffern
  • Matching.RequireFinancialContextForShortNames (bool, default: true): Finanzkontext für kurze Namen
  • Data.ArticleRetentionDays (int, default: 90): Aufbewahrungsdauer für News

FinlyticSentiment (SettingKeys.cs)

  • Logging.Channel.Sentiment (bool, default: true): Sentiment-Logs
  • Sentiment.GermanWebhookUrl (string, default: https://n8n.kleidukos.me/webhook/sentiment/de)
  • Sentiment.EnglishWebhookUrl (string, default: https://n8n.kleidukos.me/webhook/sentiment/en)
  • Sentiment.MinimumConfidenceThreshold (double, default: 0.60): Mindestkonfidenz
  • Sentiment.TimeDecayHalfLifeDays (double, default: 7.0): Halbwertszeit \tau für Zeit-Decay
  • Sentiment.SentimentWindowDays (int, default: 30): Zeitfenster für Aggregation
  • Sentiment.AnalysisBatchSize (int, default: 10): Artikel pro Analysezyklus
  • Sentiment.PollIntervalSeconds (int, default: 30): Polling für neue Artikel
  • Sentiment.EnableAutoSentiment (bool, default: true): Automatische Analyse aktiv

FinlyticFundamentals (SettingKeys.cs)

  • Logging.Channel.Fundamentals (bool, default: true): Fundamentaldaten-Logs
  • Logging.Channel.HtmlScrapper (bool, default: true): Playwright-Scraper-Logs
  • Logging.Channel.YahooClient (bool, default: true): Yahoo Finance API-Logs
  • Feature.EnableHtmlFallback (bool, default: true): HTML-Scraping falls API fehlt
  • Scraper.ForceHtmlFallback (bool, default: false): HTML-Scraping erzwingen
  • Feature.AllowForceRefresh (bool, default: true): Cache-Umgehung erlauben
  • Cache.FundamentalDataValidityDays (int, default: 30): Cache-Gültigkeit

FinlyticTechnicals (SettingKeys.cs)

  • Logging.Channel.TechnicalAnalysis (bool, default: true): TA-Berechnungs-Logs
  • Indicators.RsiPeriod (int, default: 14): RSI-Periode
  • Indicators.MacdFastPeriod (int, default: 12): MACD Fast EMA
  • Indicators.MacdSlowPeriod (int, default: 26): MACD Slow EMA
  • Indicators.MacdSignalPeriod (int, default: 9): MACD Signal Line
  • Indicators.EmaShortPeriod (int, default: 50): EMA Short
  • Indicators.EmaLongPeriod (int, default: 200): EMA Long
  • Indicators.BollingerBandsPeriod (int, default: 20): Bollinger-Periode
  • Indicators.BollingerBandsStdDev (double, default: 2.0): Bollinger Standardabweichung
  • Indicators.AtrPeriod (int, default: 14): ATR-Periode
  • Cache.DurationMinutes (int, default: 60): Cache-Dauer

FinlyticEngine (EngineSettingKeys.cs)

  • Engine.MinCompositeScore (decimal, default: 75.0): Mindest-Gesamtscore für Proposals
  • Engine.WeightTechnical (decimal, default: 0.45): Gewichtung Technik (45%)
  • Engine.WeightSentiment (decimal, default: 0.35): Gewichtung Sentiment (35%)
  • Engine.WeightFundamental (decimal, default: 0.20): Gewichtung Fundamentaldaten (20%)
  • Engine.EarningsLockoutDays (int, default: 2): Vorlaufzeit vor Earnings (Score-Suppression)
  • Engine.DividendGateDays (int, default: 1): Vorlaufzeit vor Ex-Dividende
  • Engine.MinDerivativeLeverage (decimal, default: 5.0): Mindesthebel für KO-Derivate
  • Engine.TargetDefaultLeverage (decimal, default: 7.0): Zielhebel für KO-Derivate
  • Engine.KnockOutSafetyBufferPercent (decimal, default: 2.0): Sicherheitsabstand Barrier zu SL
  • Engine.AiValidationTimeoutSeconds (int, default: 15): Timeout für n8n AI-Validierung
  • Engine.EnableAiValidation (bool, default: true): KI-Gate aktiv (sonst Fast-Pass)
  • Engine.EnablePaperTradingBot (bool, default: false): Automatische Bot-Ausführung
  • Engine.PollingIntervalSeconds (int, default: 120): Poller-Intervall (Opportunity-Scan)
  • Engine.MonitoringIntervalSeconds (int, default: 60): Aktives Trade-Monitoring-Intervall
  • Engine.PollerMinScore (decimal, default: 70.0): Mindestscore für FTA-Abfrage
  • Engine.PollerTopPicksOnly (bool, default: true): Nur Top-Picks abfragen (\ge 75)
  • Engine.PollerLimit (int, default: 25): Max. Setups pro Scan
  • Engine.ProposalValidityHours (int, default: 24): Gültigkeitsdauer eines Vorschlags (24h)

FinlyticSimulation (SimulationSettingKeys.cs)

  • Simulation.DefaultSlippagePercent (decimal, default: 0.00): Slippage deaktiviert (wird in Ordergebühren DefaultOrderFeeEur abgebildet)
  • Simulation.DefaultOrderFeeEur (decimal, default: 1.00): Ordergebühr pro Transaktion (1 €)
  • Simulation.DefaultStartingCapital (decimal, default: 10000.00): Startkapital für Backtests
  • Simulation.MinSampleTradesForApproval (int, default: 5): Mindest-Trades für Matrix-Zulassung
  • Simulation.HighProfitFactorThreshold (decimal, default: 1.60): PF für Score-Bonus (+15 Pkt)
  • Simulation.LowProfitFactorThreshold (decimal, default: 1.00): PF für Veto-Sperre
  • Simulation.KnockOutBarrierBufferPercent (decimal, default: 2.0): KO-Barrier-Simulation
  • Simulation.DefaultTrailingStopPercent (decimal, default: 3.0): Fallback-Trailing-Stop
  • Simulation.EnableScheduledMatrixRecompute (bool, default: true): Periodische Matrix-Neuberechnung
  • Simulation.MatrixRecomputeIntervalHours (int, default: 24): Matrix-Stale-Schwelle (24h)
  • Simulation.MatrixRecomputeCheckIntervalMinutes (int, default: 60): Recompute-Check-Intervall

FinlyticBot (BotSettingKeys.cs)

  • Alpaca.KeyId (string): Alpaca API Key
  • Alpaca.SecretKey (string): Alpaca Secret Key
  • Alpaca.IsPaper (bool, default: true): Alpaca Paper vs. Live
  • Bot.EnableAutoExecution (bool, default: true): Automatische Ausführung aktiv
  • Bot.RiskPerTradePercent (decimal, default: 1.0): 1% Risiko pro Trade bezogen auf Gesamtkapital
  • Bot.MaxPositionAllocationPercent (decimal, default: 20.0): Max. 20% Kapital pro Einzelposition
  • Bot.MaxConcurrentPositions (int, default: 5): Max. 5 offene Positionen gleichzeitig
  • Bot.DailyLossLimitPercent (decimal, default: 3.0): Täglicher Verluststopp (3%)
  • Bot.MonitoringIntervalSeconds (int, default: 15): Bot-Positionsüberwachung (15s)
  • Bot.SyntheticBaseCapitalEur (decimal, default: 50000.0): Startkapital Synthetischer Ledger

FinlyticNotify (NotifySettingKeys.cs)

  • Ntfy.BaseUrl (string, default: http://localhost:8080)
  • Ntfy.TopicPrefix (string, default: finlytic)
  • Ntfy.BroadcastChannel (string, default: broadcast)
  • Ntfy.NewsChannel (string, default: news)
  • Ntfy.DefaultUsername (string, default: admin)
  • Ntfy.MinProposalScore (decimal, default: 70.0)
  • Ntfy.NotifyOnProposals (bool, default: true)
  • Ntfy.NotifyOnTradeUpdates (bool, default: true)
  • Ntfy.NotifyOnBotTrades (bool, default: true)
  • Ntfy.NotifyOnNews (bool, default: true)
  • Ntfy.ClickBaseUrl (string, default: http://localhost:3000)

4. Mathematische, Technische & Finanzielle Formeln

4.1 Technische Indikatoren (TechnicalIndicatorsEngine.cs)

1. Simple Moving Average (SMA)

\text{SMA}_n = \frac{1}{n} \sum_{i=0}^{n-1} P_{t-i}

2. Exponential Moving Average (EMA)

Glättungsfaktor k:

k = \frac{2}{n + 1} \text{EMA}_t = (P_t \cdot k) + (\text{EMA}_{t-1} \cdot (1 - k))

(Initialisierung über SMA der ersten n Kerzen)

3. Relative Strength Index (RSI - Wilder's Smoothing)

Gewinne U_t = \max(0, P_t - P_{t-1}), Verluste D_t = \max(0, P_{t-1} - P_t)

\overline{U}_t = \frac{\overline{U}_{t-1} \cdot (n-1) + U_t}{n}, \quad \overline{D}_t = \frac{\overline{D}_{t-1} \cdot (n-1) + D_t}{n} \text{RS} = \frac{\overline{U}_t}{\overline{D}_t}, \quad \text{RSI} = 100 - \frac{100}{1 + \text{RS}}

4. Average True Range (ATR)

\text{TR}_t = \max \left( H_t - L_t, \, |H_t - C_{t-1}|, \, |L_t - C_{t-1}| \right) \text{ATR}_n = \frac{1}{n} \sum_{i=0}^{n-1} \text{TR}_{t-i}

5. Moving Average Convergence Divergence (MACD)

\text{MACD Line} = \text{EMA}_{12}(P) - \text{EMA}_{26}(P) \text{Signal Line} = \text{EMA}_9(\text{MACD Line}) \text{Histogram} = \text{MACD Line} - \text{Signal Line}

6. Bollinger Bands & %B

\text{Middle Band} = \text{SMA}_{20}(P) \sigma = \sqrt{\frac{1}{20} \sum_{i=0}^{19} (P_{t-i} - \text{Middle Band})^2} \text{Upper Band} = \text{Middle Band} + 2\sigma, \quad \text{Lower Band} = \text{Middle Band} - 2\sigma \text{Bandwidth} = \frac{\text{Upper} - \text{Lower}}{\text{Middle}} \cdot 100, \quad \%B = \frac{P_t - \text{Lower}}{\text{Upper} - \text{Lower}}

7. Keltner Channels & Volatility Squeeze

\text{KC Middle} = \text{EMA}_{20}(P), \quad \text{KC Upper} = \text{EMA}_{20} + 1.5 \cdot \text{ATR}_{20}, \quad \text{KC Lower} = \text{EMA}_{20} - 1.5 \cdot \text{ATR}_{20} \text{Squeeze On} \iff \text{BB Lower} > \text{KC Lower} \quad \text{UND} \quad \text{BB Upper} < \text{KC Upper}

8. SuperTrend

\text{HL2} = \frac{H_t + L_t}{2} \text{Upper Band} = \text{HL2} + 3.0 \cdot \text{ATR}_{10}, \quad \text{Lower Band} = \text{HL2} - 3.0 \cdot \text{ATR}_{10}

9. Average Directional Index (ADX / DMI)

+\text{DM} = \begin{cases} H_t - H_{t-1} & \text{falls } H_t - H_{t-1} > L_{t-1} - L_t \text{ und } > 0 \\ 0 & \text{sonst} \end{cases} -\text{DM} = \begin{cases} L_{t-1} - L_t & \text{falls } L_{t-1} - L_t > H_t - H_{t-1} \text{ und } > 0 \\ 0 & \text{sonst} \end{cases} +\text{DI}_{14} = \frac{\sum +\text{DM}}{\sum \text{TR}} \cdot 100, \quad -\text{DI}_{14} = \frac{\sum -\text{DM}}{\sum \text{TR}} \cdot 100 \text{DX} = \frac{|+\text{DI} - -\text{DI}|}{+\text{DI} + -\text{DI}} \cdot 100, \quad \text{ADX} = \text{SMA}_{14}(\text{DX})

10. Volume Weighted Average Price (VWAP)

\text{VWAP} = \frac{\sum_{i=1}^N \left( \frac{H_i + L_i + C_i}{3} \cdot V_i \right)}{\sum_{i=1}^N V_i}

4.2 Symmetrisches Technisches Scoring V2 (TechnicalScoringEngineV2.cs)

\text{FinalScore} = \text{Clamp}\Big( (0.35 \cdot S_{\text{Ind}}) + (0.35 \cdot S_{\text{Pattern}}) + (0.30 \cdot S_{\text{BaseStrategy}}), \; 0, \; 100 \Big)

Indikator-Confluence (S_{\text{Ind}} Basis: 50 Pkt):

  • Buy (Long):
    • \text{EMA}_{20} > \text{EMA}_{50} \implies +15 Pkt
    • \text{RSI}_{14} \in [45, 65] \implies +15 Pkt
    • \text{ADX}_{14} \ge 25 \implies +10 Pkt
    • P > \text{VWAP} \text{ oder } \text{EMA}_{20} > \text{VWAP} \implies +10 Pkt
  • Sell (Short):
    • \text{EMA}_{20} < \text{EMA}_{50} \implies +15 Pkt
    • \text{RSI}_{14} \in [35, 55] \implies +15 Pkt
    • \text{ADX}_{14} \ge 25 \implies +10 Pkt
    • P < \text{VWAP} \text{ oder } \text{EMA}_{20} < \text{VWAP} \implies +10 Pkt

4.3 Exponentielles Zeit-Decay-Sentiment (SentimentDbService.cs)

Jeder Artikel i hat Alter \Delta t_i = \text{Now} - t_{\text{published}} in Tagen und FinBERT-Konfidenz C_i. Abklingkonstante \lambda:

\lambda = \frac{\ln(2)}{\tau} \quad (\tau = \text{HalfLifeDays}, \text{ Standard: } 7.0)

Gewicht des Artikels w_i:

w_i = \max(0.01, C_i) \cdot e^{-\lambda \cdot \Delta t_i}

Aggregierter gewichteter Sentiment-Score S_{\text{weighted}} \in [-1.0, +1.0]:

S_{\text{weighted}} = \frac{\sum_{i=1}^N (w_i \cdot \text{CompoundScore}_i)}{\sum_{i=1}^N w_i}

4.4 Composite Opportunity Score (COS V2) (CompositeOpportunityScorerV2.cs)

Gewichtete Faktoren:

  • Technischer Score S_{\text{Tech}} \in [0, 100] (Gewicht: w_{\text{Tech}} = 0.45)
  • Sentiment Score S_{\text{Sent}} \in [0, 100] (Gewicht: w_{\text{Sent}} = 0.35):
    • Für Buy: S_{\text{Sent}} = \frac{S_{\text{weighted}} + 1}{2} \cdot 100
    • Für Sell: S_{\text{Sent}} = \frac{1 - S_{\text{weighted}}}{2} \cdot 100
  • Fundamentaler Score S_{\text{Fund}} \in [0, 100] (Gewicht: w_{\text{Fund}} = 0.20):
    • Richtungsabhängige Bewertung von KGV, ROE, Debt/Equity, Consensus-Rating und Short-Interest.
  • Simulations-Matrix-Bonus: B_{\text{Sim}} = +15 falls \text{PF} \ge 1.60, Veto-Multiplikator M_{\text{Veto}} = 0.20 falls \text{PF} < 1.00.
  • Sperr-Multiplikatoren:
    • Earnings-Sperre: M_{\text{Earnings}} = 0.15 falls \text{Tage zu Earnings} \le 2.
    • Dividenden-Sperre: M_{\text{Dividend}} = 0.50 falls \text{Tage zu Ex-Dividende} \le 1.
\text{RawScore} = (w_{\text{Tech}} \cdot S_{\text{Tech}}) + (w_{\text{Sent}} \cdot S_{\text{Sent}}) + (w_{\text{Fund}} \cdot S_{\text{Fund}}) + B_{\text{Sim}} \text{COS} = \text{Clamp}\Big( \text{RawScore} \cdot M_{\text{Earnings}} \cdot M_{\text{Dividend}} \cdot M_{\text{Veto}}, \; 0, \; 100 \Big)

4.5 Positionsgrößenbestimmung & Risikomodell (1-2% Regel) (BotOrderExecutor.cs)

Gesamtes Kontokapital E, Risiko pro Trade R_{\%} = 1.0\%, Maximalallokation A_{\%} = 20.0\%.

\text{MaxRiskCapital} = E \cdot \frac{R_{\%}}{100} \text{UnitRisk} = |\text{EntryPrice} - \text{StopLossPrice}|

Berechnete Stückzahl Q_{\text{calc}}:

Q_{\text{calc}} = \frac{\text{MaxRiskCapital}}{\text{UnitRisk}}

Allokations-Deckelung:

Q_{\text{max}} = \frac{E \cdot \frac{A_{\%}}{100}}{\text{EntryPrice}} Q_{\text{final}} = \max\Big(1, \, \text{Round}\big(\min(Q_{\text{calc}}, Q_{\text{max}})\big)\Big)

4.6 Quantitative Simulations- & Performancemetriken (VirtualBacktestBroker.cs)

  • Win Rate (WR): \text{WR} = \frac{N_{\text{Wins}}}{N_{\text{Trades}}} \cdot 100
  • Profit Factor (PF): \text{PF} = \frac{\sum \text{Gewinne}}{\sum |\text{Verluste}|}
  • Erwartungswert (Expectancy in €): \text{Expectancy} = \left(\frac{\text{WR}}{100} \cdot \overline{\text{Win}}\right) - \left(\left(1 - \frac{\text{WR}}{100}\right) \cdot \overline{\text{Loss}}\right)
  • Annualisierte Sharpe Ratio: \overline{R} = \frac{1}{N}\sum R_i, \quad \sigma_R = \sqrt{\frac{1}{N-1}\sum (R_i - \overline{R})^2} \text{Sharpe Ratio} = \frac{\overline{R}}{\sigma_R} \cdot \sqrt{252}
  • R-Multiple: R_{\text{mult}} = \frac{\text{Realisierter PnL}}{\text{UnitRisk} \cdot \text{Menge}}
  • Max Adverse / Favorable Excursion (MAE / MFE): \text{MAE}_{\text{Long}} = \frac{P_{\text{Entry}} - P_{\text{Min}}}{P_{\text{Entry}}} \cdot 100, \quad \text{MFE}_{\text{Long}} = \frac{P_{\text{Max}} - P_{\text{Entry}}}{P_{\text{Entry}}} \cdot 100

5. Schnittstellen & Endpunkte

5.1 MQTT RPC-Kanäle

Schema: Request auf services/request/{channel}/{correlationId}, Response auf services/response/{channel}/{correlationId}.

Kanalname (MqttTopics.Channels) Betreuender Service Request-DTO Response-DTO Beschreibung
health_Ping (Alle Services) object ServiceHealthResponse Liveness-Check pro Service
assets_Get FinlyticAssets GetValidAssetRequest List<AssetDto> Stammdaten für ISIN auflösen
assets_GetDiscovery FinlyticAssets GetDiscoveryAssetsRequest List<AssetDto> Kuratierte Discovery-Assets
assets_GetDerivatives FinlyticAssets GetDerivativesRequest List<DerivativeDto> KO-Derivate nach Hebel/Typ suchen
tr_GetLivePrice FinlyticAssets IsinRequest LivePriceDto? Realtime-Kurs via Trade Republic
assets_settings_GetAll FinlyticAssets object List<DynamicSettingDto> Einstellungen abfragen
assets_settings_Update FinlyticAssets Dictionary<string, object?> List<DynamicSettingDto> Einstellungen aktualisieren
news_Get FinlyticNews DailyNewsRequest List<NewsArticleDto> Paginierte/gefilterte News
news_GetById FinlyticNews ArticleRequest NewsArticleDto? Einzelartikel nach ID
news_GetPending FinlyticNews object List<NewsArticleDto> Artikel zur Sentiment-Analyse
news_UpdateStatus FinlyticNews UpdateNewsStatusRequest UpdateNewsStatusResponse Artikel-Status aktualisieren
news_settings_GetAll FinlyticNews object List<DynamicSettingDto> Einstellungen abfragen
news_settings_Update FinlyticNews Dictionary<string, object?> List<DynamicSettingDto> Einstellungen aktualisieren
sentiment_GetIsin FinlyticSentiment GetSentimentByIsinRequest IsinSentimentSummaryDto? Aggregiertes Sentiment für ISIN
sentiment_GetSector FinlyticSentiment GetSectorSentimentRequest SectorSentimentSummaryDto? Sektoren-Sentiment
sentiment_GetArticle FinlyticSentiment ArticleRequest IsinAnalysisEntry? FinBERT-Ergebnis für Artikel
sentiment_GetAll FinlyticSentiment PaginatedRequest List<CompanySentimentSummaryEntity> Alle Unternehmens-Sentiments
sentiment_Analyze FinlyticSentiment JsonElement / NewsArticleDto IsinAnalysisEntry? Ad-hoc FinBERT-Analyse
sentiment_settings_GetAll FinlyticSentiment object List<DynamicSettingDto> Einstellungen abfragen
sentiment_settings_Update FinlyticSentiment Dictionary<string, object?> List<DynamicSettingDto> Einstellungen aktualisieren
fundamentals_Get FinlyticFundamentals IsinRequest / GetFundamentalsRequest AssetFundamentalsDto? Fundamentaldaten & Kennzahlen
events_GetAll FinlyticFundamentals object List<CorporateEventDto> Alle Termine/Events
events_GetByMonth FinlyticFundamentals GetEventsByMonthRequest List<CorporateEventDto> Monatliche Termine/Earnings
fundamentals_settings_GetAll FinlyticFundamentals object List<DynamicSettingDto> Einstellungen abfragen
fundamentals_settings_Update FinlyticFundamentals Dictionary<string, object?> List<DynamicSettingDto> Einstellungen aktualisieren
ta_GetAnalysis FinlyticTechnicals IsinRequest TechnicalAnalysisDto? Komplette TA inkl. Indikatoren
ta_GetSetupsForIsin FinlyticTechnicals IsinRequest List<StrategyResultDto> Aktive Setups für eine ISIN
ta_GetSetups FinlyticTechnicals GetSetupsRequest List<StrategyResultDto> Universe-weite Setups/Top-Picks
ta_GetCandles FinlyticTechnicals GetCandlesRequest IReadOnlyList<CandleDto> Kerzen nach Timeframe
ta_GetWatchlist FinlyticTechnicals object List<WatchlistEntryDto> Monitorte Universe-Assets
ta_GetRecentSetupHistory FinlyticTechnicals GetRecentSetupHistoryRequest List<StrategyResultDto> Historische Setup-Scores
ta_settings_GetAll FinlyticTechnicals object List<DynamicSettingDto> Einstellungen abfragen
ta_settings_Update FinlyticTechnicals Dictionary<string, object?> List<DynamicSettingDto> Einstellungen aktualisieren
engine_GetProposals FinlyticEngine GetProposalsRequest List<TradeProposalDto> Aktive Trade-Vorschläge
engine_GetTrades FinlyticEngine GetTradesRequest List<ActiveTradeDto> Aktive Benutzertrades
engine_EvaluateIsin FinlyticEngine EvaluateIsinRequest AssetEvaluationResultDto? Manuelle ISIN-Evaluierung
engine_AddFill FinlyticEngine AddFillRequest ActiveTradeDto? Teil-/Vollausführung buchen
engine_UpdateStopLoss FinlyticEngine UpdateStopLossRequest ActiveTradeDto? Stop-Loss anpassen
engine_CloseTrade FinlyticEngine CloseTradeRequest ActiveTradeDto? Trade schließen
engine_AcceptProposal FinlyticEngine AcceptTradeProposalRequest ActiveTradeDto? Vorschlag als Trade annehmen
engine_CreateManualTrade FinlyticEngine CreateManualTradeRequest ActiveTradeDto? Manuellen Trade eröffnen
engine_GetEvaluationHistory FinlyticEngine GetEvaluationHistoryRequest GetEvaluationHistoryResponse Admin-Evaluierungs-Historie
engine_settings_GetAll FinlyticEngine object List<DynamicSettingDto> Einstellungen abfragen
engine_settings_Update FinlyticEngine Dictionary<string, object?> List<DynamicSettingDto> Einstellungen aktualisieren
sim_RunBacktest FinlyticSimulation BacktestRequestDto BacktestReportDto Quantitativen Backtest starten
sim_GetReliability FinlyticSimulation GetReliabilityRequest StrategyAssetReliabilityDto? Zuverlässigkeit für Setup
sim_GetMatrixForAsset FinlyticSimulation IsinRequest List<StrategyAssetReliabilityDto> Komplette Asset-Matrix
sim_GetBacktestHistory FinlyticSimulation GetBacktestHistoryRequest GetBacktestHistoryResponse Historische Backtest-Läufe
sim_GetBacktestRunDetail FinlyticSimulation RunIdRequest BacktestReportDto? Detailbericht eines Backtests
sim_GetStrategyParameters FinlyticSimulation GetStrategyParametersRequest StrategyParameterProfileDto? Gespeicherte TA-Parameter
sim_SaveStrategyParameters FinlyticSimulation SaveStrategyParametersRequest StrategyParameterProfileDto TA-Parameter speichern
sim_settings_GetAll FinlyticSimulation object List<DynamicSettingDto> Einstellungen abfragen
sim_settings_Update FinlyticSimulation Dictionary<string, object?> List<DynamicSettingDto> Einstellungen aktualisieren
bot_GetStatus FinlyticBot object BotStatusDto Bot-Status & Venue
bot_GetPositions FinlyticBot object List<BotTradeOrderDto> Offene Bot-Positionen
bot_GetSummary FinlyticBot object AccountSummaryDto Kontostand & PnL
bot_ExecuteProposal FinlyticBot ExecuteProposalRequest BotTradeOrderDto? Order für Proposal aufgeben
bot_PanicClose FinlyticBot object PanicCloseResultDto Notfall-Schließung aller Positionen
bot_settings_GetAll FinlyticBot object List<DynamicSettingDto> Einstellungen abfragen
bot_settings_Update FinlyticBot Dictionary<string, object?> List<DynamicSettingDto> Einstellungen aktualisieren
notify_settings_GetAll FinlyticNotify object List<DynamicSettingDto> Einstellungen abfragen
notify_settings_Update FinlyticNotify Dictionary<string, object?> List<DynamicSettingDto> Einstellungen aktualisieren
backend_GetAggregatedFavorites FinlyticBackend object List<string> Alle Benutzer-Favoriten-ISINs
backend_GetUsername FinlyticBackend UserIdRequest string? Benutzernamen nach GUID

5.2 MQTT Pub/Sub Event-Topics

Topic Publisher Konsumenten Payload-Typ Beschreibung
services/news/completed FinlyticNews FinlyticSentiment, Backend NewsArticleDto Neuer fertig verarbeiteter Artikel
finlytic/news/stream/{isin} FinlyticNews BackendMqttBridge NewsArticleDto ISIN-spezifischer News-Stream
finlytic/sentiment/stream/{isin} FinlyticSentiment FinlyticTechnicals, Backend IsinSentimentSummaryDto Aktualisiertes Sentiment
finlytic/engine/proposals/created FinlyticEngine FinlyticBot, FinlyticNotify, Backend TradeProposalDto Neuer Trade-Vorschlag erstellt
finlytic/engine/trades/status_changed FinlyticEngine FinlyticNotify, Backend ActiveTradeDto Trade-Statusänderung (TP/SL/Close)
finlytic/bot/trades/stream FinlyticBot FinlyticNotify, Backend BotTradeOrderDto Bot-Order-Lifecycle-Event
finlytic/logs/{service} (Alle Services) BackendMqttBridge LogMessageDto Strukturierter Service-Logstream

5.3 REST API Endpunkte (FinlyticBackend)

Alle Endpunkte erfordern Authorization: Bearer <JWT> (außer Login und Health).

1. Authentifizierung & Benutzer (/api/v1/auth, /api/v1/user, /api/v1/admin)

  • POST /api/v1/auth/login [AllowAnonymous]: Login mit Username/Passwort \to JWT Token & User-Objekt.
  • POST /api/v1/auth/change-initial-password: Ändern des Initialpassworts bei RequiresPasswordChange.
  • POST /api/v1/user/fcm-token: Hinterlegen des Firebase Cloud Messaging Push-Tokens.
  • GET /api/v1/user/me: Profil des aktuell angemeldeten Benutzers abrufen.
  • GET /api/v1/admin/users [Roles: Admin]: Benutzerliste.
  • POST /api/v1/admin/users [Roles: Admin]: Neuen Benutzer anlegen.
  • PUT /api/v1/admin/users/{id} [Roles: Admin]: Benutzer bearbeiten (Rolle, Status).
  • DELETE /api/v1/admin/users/{id} [Roles: Admin]: Benutzer deaktivieren/löschen.
  • POST /api/v1/admin/users/{id}/reset-password [Roles: Admin]: Passwort zurücksetzen.

2. Assets & Discovery (/api/v1/assets)

  • GET /api/v1/assets/search?q={query}: Volltextsuche nach Name/ISIN im lokalen Index.
  • GET /api/v1/assets/discovery?limit={limit}: Kuratierte Trend-/Discovery-Assets.
  • GET /api/v1/assets/{isin}/fundamentals: Fundamentaldaten, KGV, Events.
  • GET /api/v1/assets/{isin}/technicals: TA-Indikatoren, Kerzen, Setups.
  • GET /api/v1/assets/{isin}/live: Trade Republic Realtime-Tick (Bid/Ask/Last).
  • GET /api/v1/assets/{isin}/derivatives?optionType={long|short}&targetLeverage={x}: Passende KO-Zertifikate.
  • GET /api/v1/logo/{isin} [AllowAnonymous]: Lokales SVG-Logo ausliefern.

3. Analyse & Engine (/api/v1/analyze, /api/v1/engine)

  • POST /api/v1/analyze/manual: Ad-hoc Auswertung einer ISIN (TA, Sentiment, KI-Gate).
  • GET /api/v1/analyze/proposals: Vorschläge abrufen.
  • GET /api/v1/engine/proposals?onlyActive={bool}&limit={limit}: Aktive Vorschläge.
  • GET /api/v1/engine/trades?mode={Manual|Bot}: Trades des eingeloggten Users.
  • POST /api/v1/engine/evaluate: Evaluierungs-Trigger für ISIN.
  • POST /api/v1/engine/trades/{id}/fills: Fill buchen.
  • PUT /api/v1/engine/trades/{id}/stoploss: SL-Anpassung.
  • POST /api/v1/engine/trades/{id}/close: Trade schließen.

4. Benutzer-Trades (/api/v1/user/trades)

  • GET /api/v1/user/trades: Eigene aktive & historische Trades.
  • POST /api/v1/user/trades/accept: Vorschlag verbindlich annehmen.
  • POST /api/v1/user/trades/manual: Eigenen Trade ohne Vorschlag eröffnen.
  • POST /api/v1/user/trades/{id}/close: Eigenen Trade manuell schließen.

5. Favoriten & Präferenzen (/api/v1/user/favorites, /api/v1/user/preferences)

  • GET /api/v1/user/favorites: Favoritenliste mit Live-Preisen & Tagesänderung.
  • POST /api/v1/user/favorites/{symbol}: Asset zu Favoriten hinzufügen.
  • POST /api/v1/user/favorites/{symbol}/ticker: Ticker-Symbol zuweisen.
  • DELETE /api/v1/user/favorites/{symbol}: Asset aus Favoriten entfernen.
  • GET /api/v1/user/preferences: UI-Präferenzen (Theme, Layout).
  • PUT /api/v1/user/preferences/theme: Theme anpassen.

6. Backtesting & Simulation (/api/v1/simulation)

  • POST /api/v1/simulation/run: Quantitativen Backtest starten.
  • GET /api/v1/simulation/matrix/{isin}: Zuverlässigkeitsmatrix für ISIN.
  • GET /api/v1/simulation/history/{isin}: Historische Backtests für ISIN.
  • GET /api/v1/simulation/history/run/{runId}: Vollständiger Backtest-Report.
  • GET /api/v1/simulation/parameters/{isin}/{strategyKey}: Gespeicherte Strategie-Parameter.
  • POST /api/v1/simulation/parameters: Parameterprofil speichern.

7. Bot & Paper-Trading (/api/v1/bot)

  • GET /api/v1/bot/status: Bot-Status & Venue.
  • GET /api/v1/bot/positions/active: Offene Bot-Positionen.
  • GET /api/v1/bot/portfolio/summary: Kontostand & PnL.
  • POST /api/v1/bot/orders/execute: Manuelle Order über Bot abschicken.
  • POST /api/v1/bot/orders/panic-close: Notfall-Schließung.
  • POST /api/v1/bot/settings/update: Bot-Einstellungen aktualisieren.

8. News & Kalender (/api/v1/news, /api/v1/calendar)

  • GET /api/v1/news?limit={limit}&offset={offset}&isin={isin}&status={status}: Gefilterte News.
  • GET /api/v1/calendar/events/{year}/{month}: Corporate Events & Earnings.

9. Admin-System (/api/v1/admin/settings, /api/v1/admin/evaluations)

  • GET /api/v1/admin/settings: Einstellungen aller Services.
  • GET /api/v1/admin/settings/{serviceName}: Einstellungen eines Services.
  • PUT /api/v1/admin/settings/{serviceName}: Einstellungen dynamisch ändern.
  • GET /api/v1/admin/settings/health: Health-Status aller Services.
  • GET /api/v1/admin/settings/logs/{serviceName}: Letzte 250 Ringpuffer-Logs.
  • GET /api/v1/admin/evaluations: Evaluierungs-Historie ("Warum kein Proposal?").
  • GET /api/v1/admin/evaluations/watchlist: Gescannte Watchlist-Assets.
  • GET /api/v1/admin/evaluations/watchlist/{isin}/history: Setup-Verlauf eines Assets.

5.4 SignalR Hubs & Methoden

Verbindung über /hubs/{hubname}?access_token=<JWT>.

Hub-Route Server-Methoden Client-Events (Callbacks) Zweck
/hubs/trade-stream SubscribeToAsset(isin)
UnsubscribeFromAsset(isin)
ReceiveTradeProposal(proposal)
ReceiveTradeUpdate(trade)
Realtime-Updates zu Proposals & Trades
/hubs/news SubscribeToIsin(isin) ReceiveNewsArticle(article) Neue gescrapte/analysierte News
/hubs/health (Keine) ReceiveServiceHealth(health) Live-Healthcheck der Services
/hubs/favorites-prices (Keine) ReceivePriceUpdate(isin, price, change) Realtime-Kursupdates der Favoriten (15s Takt)
/hubs/logs (Keine) ReceiveLogMessage(logDto) Admin Live-Logstream

6. Detaillierte Funktionsweise & Datenfluss

6.1 End-to-End Opportunity- & Trade-Lifecycle

1. DATA INGESTION
   ├── FinlyticNews: RSS/Scraping -> SimHash Deduplication -> In-Memory Matcher -> MQTT "services/news/completed"
   ├── FinlyticSentiment: FinBERT Webhook -> Time-Decay DB Update -> MQTT "finlytic/sentiment/stream/{isin}"
   └── FinlyticTechnicals: Trade Republic & Yahoo Ticks -> Resampler -> Indicator Math (RSI, EMA, Squeeze, etc.)

2. TECHNICAL SCANNING (FinlyticTechnicals)
   ├── MultiTimeframeCandleAggregator aktualisiert Ringpuffer (15m, 1h, 1d)
   ├── 15 Pattern-Detektoren identifizieren FVG, OrderBlocks, DoubleBottom, Liquidity Sweeps
   ├── 10 CoreStrategies evaluieren Signale & erzeugen Exit-Pläne (TP1, TP2, Trailing-Stop, Break-Even)
   └── TechnicalScoringEngineV2 berechnet Confluence-Score (Indikatoren + Patterns + Strategie)

3. ENGINE EVALUATION (FinlyticEngine)
   ├── OpportunityPollerBackgroundService pollt Top-Picks (Score >= 70)
   ├── CompositeOpportunityScorerV2 berechnet COS (Tech 45%, Sent 35%, Fund 20%)
   ├── Filter-Gates: EarningsLockout (2 Tage), DividendGate (1 Tag), Simulation Matrix Veto
   ├── AiReasoningGateService sendet strukturierten Context an n8n AI-Webhook
   └── KnockOutDerivativeResolver matcht Hebel & Safety-Buffer -> Proposal persistiert & publiziert

4. EXECUTION & BOT (FinlyticBot / FinlyticApp)
   ├── FinlyticApp: User sieht Proposal im UI, klickt "Accept" -> Trade eröffnet
   ├── FinlyticBot: Falls AutoExecution aktiv -> 1-2% Risikosizing -> Orderausführung (Alpaca/Ledger)
   └── FinlyticNotify: ntfy Push-Notification an Smartphone/Desktop

5. ACTIVE MONITORING & EXITS
   ├── ActiveTradeMonitoringBackgroundService (Engine) & BotTradeLifecycleBackgroundService (Bot)
   ├── Regelmäßige Kursabfrage (15s - 60s)
   ├── Bei TP1: Teilverkauf (50%) & Verschieben des Stop-Loss auf Break-Even (gebührenbereinigt)
   ├── Bei TP2: Teilverkauf (30%) & Aktivierung des ATR-Trailing-Stops für verbleibende 20%
   └── Bei Stop-Loss / Knock-Out / MaxBars: Positionsschließung & PnL-Verbuchung

7. Frontend-Architektur (FinlyticApp)

  • Technologie: Flutter (Dart) mit Web- und Mobile-Unterstützung.
  • State Management: flutter_bloc (BlocProvider, BlocBuilder, BlocConsumer, Cubit).
  • Netzwerk & Security:
    • Zentraler Dio-Client mit AuthInterceptor.
    • Injiziert automatisch Authorization: Bearer <token> in jeden Request.
    • Automatischer Logout: Fängt 401 Unauthorized und 403 Forbidden zentral ab, löscht Secure Storage und leitet sofort auf den Login-Bildschirm um.
  • Realtime-Kommunikation: SignalRService mit automatischem Reconnect und Event-Subskriptionen (trade-stream, news, health, favorites-prices, logs).
  • Feature-Struktur:
    • features/auth: Login, Passwortänderung.
    • features/dashboard: Schnellübersicht, aktive Trades, Markttrends.
    • features/discovery: Top-Assets, Scanner-Ergebnisse.
    • features/asset_detail: Interaktiver Chart, Multi-Timeframe-Indikatoren, Fundamentaldaten, Sentiment-Historie, Derivate-Selektor.
    • features/proposals: Trade-Vorschläge mit detaillierter KI-Begründung, Setup-Chart und Direkt-Annahme.
    • features/trades: Eigene Positionen, TP/SL-Visualisierung, manuelles Schließen.
    • features/bot: Bot-Positionen, Performance-Graphen, Kontostand, Panic-Close-Button.
    • features/simulation: Backtest-Runner, Equity-Kurven, Strategie-Zuverlässigkeitsmatrix, Parameter-Tuning.
    • features/news: Live-Newsfeed mit Sentiment-Badges und Filter nach Asset.
    • features/calendar: Earnings- und Corporate-Events-Kalender.
    • features/favorites: Realtime-Watchlist mit Kurs-Ticker.
    • features/admin: Dynamische Service-Settings, Live-Log-Konsole, System-Health, Benutzerverwaltung, Evaluierungs-Historie ("Warum kein Proposal?").