Trend Analysis Service – Overview
Ziel
Der Trend Analysis Service analysiert kontinuierlich die Preisbewegungen der gehandelten Währungspaare anhand technischer Indikatoren. Ziel ist es, dem Nutzer eine visuell nachvollziehbare und datenbasierte Entscheidungsgrundlage für potenzielle Trades zu liefern – ohne automatische Handelssignale oder Alerts.
Kernfunktionen
- Berechnung technischer Indikatoren auf Basis der vom Data Layer bereitgestellten OHLCV-Daten
- Visuelle Darstellung von Candlestick-Charts mit überlagerten Indikatoren im Browser
- Unterstützung mehrerer Zeitrahmen (15min, 1h, 4h, Daily)
- Darstellung klassischer und kreativer Indikatoren zur Trendanalyse
- Leichtgewichtige Architektur optimiert für Raspberry Pi 4
Plattform-Integration
| Komponente | Beschreibung |
|---|---|
| Data Layer | Bezieht OHLCV-Daten aus PostgreSQL (Schema: market_data) |
| Frontend | Stellt Charts und Indikatoren im Browser bereit |
| Cloudflare Tunnel | Erreichbar über matus-toolbox.com (hinter Cloudflare Access) |
Zielbild
Der Nutzer öffnet die Applikation im Browser und sieht:
- Candlestick-Chart für das gewählte Währungspaar
- Überlagerte technische Indikatoren (Basis-Set + Kreativ-Set)
- Wechsel zwischen Zeitrahmen (15min, 1h, 4h, Daily)
- Wechsel zwischen Währungspaaren (EUR/USD, GBP/USD, USD/JPY, USD/CAD)
- Klare, übersichtliche Darstellung ohne Informationsüberflutung
Architektur
PostgreSQL (market_data.forex_ohlcv, 15-Minuten-Kerzen)
↓
FastAPI Backend "trend-analysis" (eigener Container, Port 8002)
– Resampling 15min → 1h/4h/Daily via pandas
– Heikin-Ashi-Transformation
– Indikator-Berechnung direkt via pandas/numpy
↓
React-Komponente TrendAnalysis.jsx (Teil des bestehenden Frontend-Containers)
– Visualisierung via TradingView Lightweight Charts
↓
Browser des Nutzers
Der Trend-Analysis-Service besteht aus einem eigenen Backend-Container
(analog zu trading-data-layer, eigene Python-Abhängigkeiten wie pandas)
und einer neuen Seite innerhalb der bestehenden Frontend-App — es gibt
keinen zweiten Frontend-Container. Das passt zur Plattform, die genau eine
Frontend-App hat, in der alle Bereiche als Navigationspunkte gebündelt sind.
Technischer Stack
| Schicht | Technologie | Begründung |
|---|---|---|
| Datenquelle | PostgreSQL (market_data.forex_ohlcv) | bestehende Instanz aus Data Layer, rein lesend |
| Berechnung | Python + pandas/numpy (direkt, kein pandas-ta) | leichtgewichtig, Resampling/Heikin-Ashi/Indikatoren |
| API | FastAPI (eigener Container, Port 8002) | schnell, ressourcenschonend, gleiches Muster wie trading-data-layer |
| Visualisierung | TradingView Lightweight Charts | Browser-seitig, Pi wird nicht belastet |
| Frontend | React-Komponente im bestehenden Frontend-Container | kein zweiter Container/Build, CSS konsistent zum bestehenden Stack (kein Tailwind) |
Fachlicher Fokus
Basis-Set (klassisch)
| Indikator | Zweck |
|---|---|
| EMA 20/50/200 | Trendrichtung und Trendstärke |
| RSI | Überkauft / Überverkauft Erkennung |
| MACD | Trendwechsel und Momentum |
| Bollinger Bands | Volatilität und Ausbruchszonen |
Kreativ-Set (weniger verbreitet)
| Indikator | Zweck |
|---|---|
| Supertrend | Klare Trendrichtung + Stop-Loss Level |
| Heikin-Ashi | Geglättete Candlesticks, Rauschen reduziert |
| Bollinger + Keltner Squeeze | Erkennung bevorstehender Ausbrüche |
| Force Index | Trendstärke durch Preis + Volumen Kombination |
Unterstützte Zeitrahmen
- 15 Minuten
- 1 Stunde
- 4 Stunden
- Daily
Unterstützte Währungspaare
- EUR/USD
- GBP/USD
- USD/JPY
- USD/CAD
Abgrenzung
| In Scope | Out of Scope |
|---|---|
| Technische Indikatorberechnung | Fundamentale Analyse |
| Visuelle Chart-Darstellung | Automatische Handelssignale |
| Manuelle Zeitrahmen-/Paarauswahl | Alerts oder Benachrichtigungen |
| Historische Daten (6 Monate) | Echtzeit-Tick-Daten |
| Leseansicht für den Nutzer | Orderausführung oder Broker-Anbindung |
Technische Eigenheiten & Entscheidungen
pandas-ta nicht verwendbar
pandas-ta war ursprünglich als Indikator-Library vorgesehen. Die einzige mit Python 3.11 / pandas 2.2 kompatible Version (0.3.14b0) wurde von PyPI zurückgezogen. Die aktuelle Version (0.4.71b0) erfordert Python ≥ 3.12 sowie numba (schwerer JIT-Compiler, nicht geeignet für Raspberry Pi ARM).
Entscheidung: Alle Indikatoren werden direkt mit pandas und numpy berechnet (ewm, rolling, etc.). Gilt für alle künftigen Indikatoren.
Forex-Volume von Twelve Data immer 0
Der kostenlose Twelve-Data-Feed liefert für alle Forex-Paare volume = 0. Der Force-Index-Indikator (REQ-TA-011) wäre damit wertlos.
Entscheidung: Der Indikator wird als "Tick-Momentum" umbenannt und verwendet die volumenfreie Formel EMA(13) von Δclose × |Δclose|. Größere Kursbewegungen werden quadratisch gewichtet, das Vorzeichen gibt die Richtung an.
lightweight-charts v4 – bekannte Einschränkungen
| Einschränkung | Workaround |
|---|---|
| Kein Multi-Pane-Support | Separate createChart()-Instanz je Panel; Zeitachse und Crosshair werden manuell synchronisiert |
| Keine Farbe pro Datenpunkt bei Line-Serien | Zwei Serien mit Lücken (z.B. Supertrend: grün für Aufwärts, rot für Abwärts) |
| Kein "Fill between two lines" | Zwei-Area-Serien-Trick: obere Area bis baseValue = -1e6, zweite Area in Hintergrundfarbe deckt Überschuss ab |
| Keine Punkte an fixer Y-Position (z.B. Nulllinie) | setMarkers() mit position: belowBar/aboveBar je Vorzeichen des Histogramm-Werts |
Pip-Größen nach Währungspaar
| Typ | Beispiele | Pip-Größe |
|---|---|---|
| Standard-Paare | EUR/USD, GBP/USD, USD/CAD | 0,0001 (4. Dezimalstelle) |
| JPY-Paare | USD/JPY | 0,01 (2. Dezimalstelle) |
Wird im Backend via "JPY" in pair erkannt und für alle Pip-Berechnungen (Trade-Setup, ATR-Anzeige) verwendet.
Changelog
| Version | Datum | Änderungen |
|---|---|---|
| 1.0 | 2026-06-25 | Initiale Version |