Skip to content

🧪 Test Suite — Executor V1

83 Tests, 100% Grün | Run: pytest tests/ -v


Übersicht

Schicht Files Tests Was sie fangen
Unit 5 75 Modul-Logik, Bug-Regressionen pro Funktion
E2E 1 7 Full Pipeline: Candle → Signal → Guard → Entry → Exit → Equity
Regression (in Unit) 1 SOFT_PAUSE Endlos-Loop

Unit Tests

test_state_manager (14 Tests)

Kategorie Tests Bug-Regression
Position Lifecycle 5 Open/Close/Persistenz
Equity Tracking 4 Start/Peak/Persistenz
BUG 2 Regr. 3 NET vs GROSS PnL in trades-Tabelle
Accounting-Invariante 3 equity = initial + sum(net_pnl) - sum(entry_fees)

test_risk_guard (10 Tests)

Kategorie Tests Bug-Regression
Guard State Machine 2 RUNNING → KILL_SWITCH
BUG 4 Regr. 2 Daily Loss nutzt CURRENT equity (nicht start_equity)
Consecutive Losses 4 CL-Counter, Reset, SOFT_PAUSE, CL-Reset bei Expiry
Drawdown 2 < 20% kein Kill, > 20% Kill

test_signal_generator (17 Tests)

Kategorie Tests
Entry Conditions 5
Exit Conditions 6
Indicator Calculation 3
Parameter Consistency 6

test_discord_reporter (18 Tests)

Kategorie Tests Bug-Regression
BUG 3 Regr. 8 Alle 6 Assets in Hourly Status (war nur BTC/ETH)
Format Functions 5 Entry/Exit/Blocked/Guard Tuples
Color Constants 5 Green/Red/Amber/Blue/Gray

test_paper_engine (11 Tests)

Kategorie Tests Bug-Regression
BUG 1 Regr. 2 Entry Fee wird von Equity abgezogen
BUG 2 Regr. 1 NET PnL in trades-Tabelle
Position Sizing 5 Leverage Tiers, Fee in Size
Multi-Trade Accounting 2 Invariante über 3 Trades
PnL Tracking 2 Daily PnL, Equity ≥ 0

E2E System Tests

test_e2e_system (7 Tests)

Test Was geprüft wird
No trade on flat market Kein SIGNAL_LONG → kein Entry
Entry on uptrend SIGNAL_LONG → Position geöffnet, Fee abgezogen
Full trade cycle accounting Entry → Exit: final = start - entry_fee + net_pnl
Risk guard blocks after KILL DD > 20% → kein neuer Entry
Accounting invariant Ein vollständiger Trade-Zyklus
All 6 assets in status BUG 3 auf System-Ebene
PAPER_MODE enforcement Engine bricht ab wenn PAPER_MODE=False

Accounting Invariant Check

Neben der Test Suite gibt es einen täglichen Live-Check der die produktive state.db prüft:

Check Was geprüft wird
Equity Invariant equity ≈ start - entry_fees + sum(pnl)
Orphan Positions Position offen >48h
Guard Consistency Timestamps passen zum Guard-State
Candle Freshness Letzter Candle <2h her
Peak ≥ Equity Peak-Equity-Tracking nicht kaputt

Läuft: Täglich 09:00 Berlin via Housekeeping → Report nach #system


Bug → Test Workflow

1. Bug finden → fixen
2. Test schreiben der den Bug VOR dem Fix reproduziert (sollte FAILen)
3. Fix anwenden → Test muss PASSen
4. pytest tests/ -v → alles grün = sicher
5. Commit mit Bug-Referenz

Quality Pipeline

Code-Änderung → Pre-Commit Hook (pytest) → Commit → Push → Cloudflare Build
                     ↓ FAIL
                 Commit blockiert

Pre-Commit Hook: scripts/pre-commit.sh — pytest MUSS grün sein für Executor-Commits.


Bekannte Lücken

Lücke Nur lösbar durch
Multi-Asset Concurrent (SQLite Race) Paper Trading
Crash Mid-Trade / Restart Recovery Test
Echte WebSocket-Formate Live-Feed Test
CommandListener + Discord Polling Integration Test
Echte Marktdaten 14+ Tage Paper Trading

Echte Sicherheit kommt nur aus Paper Trading mit echten Testnet-Daten.


Quick Reference

cd forward_5/executor
pytest tests/ -v          # Alle Tests
pytest tests/ -k "Regression"  # Nur Bug-Regressionen
pytest tests/ --cov=.     # Mit Coverage