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 viapg_cron+pg_netauf 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.