Methodik

Wie das Modell funktioniert

Detaillierte Beschreibung des aktuellen Stands — Formel, Live-Kalibrierung, Datenquellen, Validierung, Grenzen.

Idee — Merit-Order in einer Formel

Im deutschen Strommarkt setzt das jeweils teuerste eingesetzte Kraftwerk den Day-Ahead-Preis (Merit-Order). Hohe Wind- und Solareinspeisung verdrängt teure Gas- und Kohlekraftwerke aus dem Einsatz — der Preis fällt. Hohe Last (Morgen- und Abendspitzen, Werktage) zieht die Merit-Order nach oben. Über diese Mechanik schätzen wir aus Wetter- und Lastprofil-Signalen die Form der Day-Ahead-Kurve über die nächsten 72 Stunden.

Die Formel (aktuell)

score(t) = BASE
         + α·(loadFactor(t) − loadCenter)        // Last (€/MWh)
         − β·windFactor(t)                       // Wind drückt
         − γ·solarFactor(t)                      // Solar drückt
         − δ·solarFactor(t)·max(0, loadCenter − loadFactor(t))
                                                 // Solar × Schwachlast-Interaktion
         + εgas·(gas(t) − gasCenter)              // TTF-Gas
         + εco2·(co2(t) − co2Center)              // EUA-CO₂-Proxy
         − εnuke·(nuke(t) − nukeCenter)           // FR-Atom (mehr → günstiger)

Default-Koeffizienten (Fallback ohne Kalibrierung):
α = 60   β = 70   γ = 45   loadCenter = 0.95
δ, εgas, εco2, εnuke = 0
  • windFactor: kubisch in der 100-m-Windgeschwindigkeit (P ∝ v³), normiert und gecappt bei 13 m/s.
  • solarFactor: lineare Normierung der Globalstrahlung gegen 900 W/m² (Sommer-Mittag-Maximum).
  • loadFactor: stündliches DE-Profil × Wochenend-Faktor × Saison-Faktor × Feiertags-Maske (deutsche Bundesfeiertage).
  • Solar×Last-Interaktion: zusätzlicher Mittagspreis-Drücker, der nur greift, wenn Solar hoch und Last niedrig ist (Sommer-Wochenenden, Ferientage). Verhindert, dass das Modell den negativen Mittagspreis im Sommer systematisch unterschätzt.
  • BASE: gleitender 7-Tage-Median realer SMARD-Preise. Wird von der Kalibrierung als OLS-Intercept überschrieben, sobald genügend Trainingsdaten vorliegen.

Live-Kalibrierung (OLS)

Statt fixer Lehrbuch-Koeffizienten lernt das Modell die Sensitivitäten täglich neu aus den realen Daten der letzten 14 / 30 / 60 Tage. Auf den verbundenen Datensatz aus SMARD-Preisen × Open-Meteo-Wetterfaktoren × Yahoo-Tagesschlüssen (Gas, CO₂) × FR-Atom wird eine gewöhnliche Kleinste-Quadrate-Regression (OLS) gefahren:

price ≈ b0
       + b1·(loadFactor − loadCenter)
       − b2·windFactor
       − b3·solarFactor
       + b4·(gas − gasCenter)
       + b5·(co2 − co2Center)
       − b6·(nuke − nukeCenter)

→  { base = b0, load = b1, wind = b2, …,  RMSE,  n }

Wind, Solar, Gas, CO₂ und Nuke werden auf ≥ 0 geclampt, damit die Vorzeichen physikalisch interpretierbar bleiben. Die centers (gasCenter, co2Center, nukeCenter) sind die Mittelwerte des Trainingsfensters — so liefert ein „durchschnittlicher" Tag 0 €/MWh Beitrag aus dem jeweiligen Term. Die kalibrierten Koeffizienten + RMSE und Stichprobengröße sind im Dashboard sichtbar.

Datenquellen

  • Wetter (DWD ICON): Open-Meteo — stündliche Vorhersage und Reanalyse für 5 gewichtete Punkte: Helgoland (Offshore-Wind), Rostock (Ostsee), Magdeburg (Mitte/Ost), Hannover (NW), München (Süd-PV). Wind-Gewichtung 30/20/20/20/10, Solar-Gewichtung 5/10/20/20/45 — bildet grob die installierte Leistung und Standortdichte ab. Fallback auf Bright Sky (DWD MOSMIX) bei Open-Meteo-Ausfall.
  • Strompreise (Day-Ahead): SMARD.de (Bundesnetzagentur), Filter 4169, Region DE-LU, Stundenauflösung. Über Server-Function geproxied (SMARD setzt keine CORS-Header).
  • Erdgas TTF (€/MWh): Yahoo Finance, Symbol TTF=F (ICE TTF Front-Month). Tagesschlüsse, exakter Einheitenmatch.
  • CO₂-Proxy: Yahoo, Symbol KRBN (KraneShares Global Carbon ETF, USD). Kein direktes EUA-€/t — der absolute Wert ist nicht direkt vergleichbar, aber Tagesbewegungen korrelieren stark mit dem EUA-Front-Month, was für die OLS-Sensitivität ausreicht. Der gefittete Koeffizient absorbiert die Skala.
  • Französische Atom-Verfügbarkeit: energy-charts.info (Fraunhofer ISE), Endpoint public_power?country=fr. 15-Min-Auflösung der letzten 35 Tage, aggregiert auf Tagesmittel in GW. Der zuletzt verfügbare Wert wird in den 72-h-Horizont fortgeschrieben (Atomausfälle sind planbar, ändern sich auf Wochen-Skala).
  • EPEX-Spot live (Optimierer): aWATTar /v1/marketdata — offene API ohne Key, liefert die realen EPEX-Day-Ahead-Stunden für heute + morgen (sobald die Auktion gegen ~14:00 fertig ist).

Validierung & Tracking

Drei voneinander unabhängige Validierungspfade laufen parallel:

  • Backtest: Rekonstruiert für ein historisches Datum die Heuristik aus archivierten Wetter- und Preisdaten und vergleicht stundenweise mit dem realen SMARD-Verlauf. Pearson r und RMSE pro Tag.
  • Batch-Backtest: Läuft denselben Backtest über N Tage am Stück, gibt Ø Pearson und die Verteilung der Trefferquote zurück. Aktuelles Limit: ohne historische FR-Atom-Realdaten landet die durchschnittliche Korrelation bei ca. r ≈ 0.7 über breite Zeiträume.
  • Live-Tracking: Stündlicher Cron-Job persistiert die 48-h-Forecast-Snapshots in der Cloud-DB (Tabelle forecast_log). Sobald SMARD die Day-Ahead-Preise nachliefert (~14:00 für Folgetag), läuft ein Backfill-Cron, der den realen Preis dazuschreibt. So entsteht einechtes Out-of-Sample-Performance-Maß: Pearson r, RMSE, MAE und Bias über 7 / 14 / 30 Tage.

Anwendungen

  • Paper-Trading-Simulator: Virtuelles 1000-€-Konto. Wenn die Live-Heuristik um mehr als die eingestellte Schwelle (Default 10 €/MWh) von der saisonalen Baseline abweicht, wird eine 12-h-Position eröffnet (LONG bei Forecast > Base, SHORT sonst). Abrechnung gegen den realisierten SMARD-Preis, 1 MWh pro Trade. Reine Edge-Validierung — kein Broker, kein echtes Geld. Auf Privatkundenseite gibt es keinen Marktzugang zu stündlichem EPEX-Spot mit 1000 € Budget; EPEX und EEX sind B2B mit fünfstelligen Mindestvolumina.
  • Lastoptimierer: Zieht live aWATTar-EPEX-Preise und sucht die günstigsten überlappungsfreien Fenster der nächsten 24-48 h: 1 h (Spülmaschine), 2 h (Backofen, Wallbox kurz), 4 h (Wallbox normal), 3 h Nacht 22-06 (Wärmepumpe- Boost). Nur sinnvoll mit dynamischem Tarif (aWATTar, Tibber, Ostrom, Rabot).

Was das Modell nicht kann

  • Kraftwerksausfälle und Revisionen im Stundenraster — diese gehen nur indirekt über die geänderte BASE ein.
  • Importflüsse aus NL, DK, PL, CZ, AT, CH, FR — nur FR-Atom-Verfügbarkeit ist als Proxy enthalten.
  • Netzengpässe und Redispatch.
  • Kurzfristige Volatilitätsspitzen (Dunkelflaute mit gleichzeitiger Lastspitze, negative Preise bei extremem PV-Überschuss). Form ja — Amplitude tendenziell zu konservativ.
  • Historische FR-Atom-Realdaten für Backtests > 35 Tage — hier wird der heutige Wert als Konstante fortgeschrieben, was die historische Aussagekraft begrenzt.

Tech-Stack (kurz)

  • TanStack Start (React 19, Vite, SSR auf Cloudflare-Edge-Worker).
  • Server-Logik in createServerFn (kein Supabase Edge Function), mit Cache-Headern (5-15 min) gegen API-Rate-Limits.
  • Persistenz in Lovable Cloud (PostgreSQL): Tabelle forecast_log, Cron via pg_cron + pg_net auf zwei Public-API-Routes (Forecast-Snapshot stündlich, SMARD-Backfill alle 3 h).
  • Charts: Recharts. Tabellen: Plain HTML. Keine Auth — alles lesend & öffentlich.

Disclaimer

Diese Anwendung ist ein nicht-kommerzielles Daten-Experiment. Sie stellt keine Preisprognose, keine Anlage- oder Energieberatung dar. Der Paper-Trading-Simulator ist eine reine Performance-Messung des Heuristik-Edge gegen historische Realpreise — keine Empfehlung, mit echtem Geld zu handeln. Die Daten von SMARD, Open-Meteo, Yahoo Finance, energy-charts.info und aWATTar unterliegen den jeweiligen Nutzungsbedingungen der Anbieter.