C3H HUMAN REVIEW WAVE 1: migriert 16 freigegebene HR-A PAIR_MIGRATION_SAFE Paare. Pro Pair: Root (representation=source) + Canonical (representation=canonical, derived_from=Root-ID) atomar. Body byte-genau unveraendert. IDs stabil aus C3 Mapping Preview v2. modul-12/18/19/vps.md NICHT angefasst. Knowledge schema v1. (Red Queen)
5.7 KiB
| knowledge_schema | id | type | role | representation | state | derived_from | _organized |
|---|---|---|---|---|---|---|---|
| 1 | object/31671ffa-fc39-ae9c-9449-e9322c9bb7be | design | design | canonical | current | object/91c7786c-cffa-1197-0837-e55a87cdc161 | true |
trend_pullback_v1.1 — Spezifikation
Status: IMPLEMENTIERT + DEPLOYT (
backtesting:0.1.2, Modul-12), V1-Kompatibilitätsmodus bitgenau. Erstellt: 20.08.2026 (Rain Ocampo) · Aktualisiert: 20.08.2026
1. Motivation
Die Produktions-Strategie trend_pullback_v1 (Modul-05/12) ist unter den
unveränderten produktiven Regime-Schwellen fachlich widersprüchlich
(messbar): Ein TREND_UP-Regime verlangt Volatilität, der Pullback
close < EMA20 verlangt ein flaches Plateau. Im 60-Bars-Produktionsfenster
(regime_lookback=60) schneiden sich TREND_UP und close<EMA20 nur in
1–4 von 1620 Kerzen (m13_evidence.py, Messwerte 20.08.2026). Die
Vol-Override (HIGH_VOL/LOW_VOL) kippt das Regime bei jedem sinnvollen
Pullback (>95% der close<EMA20-Kerzen werden LOW_VOL).
V1.1 trennt Richtung und Pullback-Timing. Richtung wird aus einem strategie-internen, längeren Fenster berechnet (nicht durch Vol-Override kippbar); Volatilität fließt nur noch ins Pullback-Timing (ATR-Band um EMA20) ein.
2. Kernentscheidungen
-
V1.1 bleibt zustandslos. Trendrichtung wird jede Bar neu aus dem aktuellen Fenster berechnet. Kein Sticky-State. Kein Hidden-State. Begründung: einfacher, transparenter und reproduzierbarer (deterministisch nach Seed/Replay).
-
Kein kurzfristiger Vol-Override auf die Richtung.
regime_vol_override=false(V1.1-Default): Die Trend-Richtung wird strategie-intern berechnet und nicht durchHIGH_/LOW_VOLATILITYüberschrieben. Volatilität beeinflusst nur das Pullback-Timing (Band). -
Optimierungsraum für V1.1 bewusst klein. Erste Iteration optimiert ausschließlich
pullback_band_atr,trend_regime_window,rr_multiplier. ADX-/EMA-Perioden undatr_periodbleiben fix auf produktiven V1-Werten.
3. Pseudo-Regel (Variante A, lookahead-frei)
Strategie-intern, jede Bar, aus geordneten prev_*-Serien (kein Lookahead,
kein versteckter Zustand):
# --- Trend-Richtung (Fenster = trend_regime_window) ---
ema_fast_l = EMA(prev_closes, ema_fast_period, lookback=trend_regime_window)
ema_slow_l = EMA(prev_closes, ema_slow_period, lookback=trend_regime_window)
adx_l = ADX(prev_highs, prev_lows, prev_closes, adx_period, lookback=trend_regime_window)
trend_dir = UP wenn (ema_fast_l > ema_slow_l) UND adx_l >= adx_trend_threshold
trend_dir = DOWN wenn (ema_fast_l < ema_slow_l) UND adx_l >= adx_trend_threshold
sonst: kein Trade # KEIN atr_ratio-Check für die Richtung
# --- Pullback-Timing (ATR-Band um EMA20) ---
atr_prev = ATR(prev_highs, prev_lows, prev_closes, atr_period)
ema20 = EMA20(prev_closes)
pullback_limit = ema20 + pullback_band_atr * atr_prev # LONG
pullback_limit = ema20 - pullback_band_atr * atr_prev # SHORT
LONG wenn trend_dir==UP UND last_close>sma200 UND last_close < pullback_limit
UND last_close>prev_close UND swing_low<last_close UND rr>=min_risk_reward
SHORT wenn trend_dir==DOWN UND last_close<sma200 UND last_close > pullback_limit
UND last_close<prev_close UND swing_high>last_close UND rr>=min_risk_reward
break_highentfällt (Befund:prev_high ≥ prev_close⇒break_high ⇒ close_up; bleibt alsclose_up/close_downerhalten — nicht restriktiv).- Deterministisch: reine Listen-Berechnung, kein Zufall, kein Hidden-State.
4. Parameter-Tabelle
| Parameter | V1 produktiv (Code) | V1.1 Default | Min | Max | Zweck | V1.1 Optimierbar? |
|---|---|---|---|---|---|---|
pullback_band_atr |
— (strikt < EMA20) |
0.35 | 0.0 | 1.0 | ATR-Band um EMA20. 0.0=strikt V1. |
Ja |
atr_period |
14 | 14 | 14 (fix) | 14 (fix) | ATR-Fenster für Pullback-Band | Nein (fix) |
trend_regime_window |
60 (geteilter 60er) | 200 | 60 | 500 | Fenster für strategie-internes Trend-Regime | Ja |
regime_vol_override |
true (geteilt) | false | — | — | false=V1.1 strategie-eigene Richtung | Nein (fix) |
rr_multiplier |
2.0 | 2.0 | 1.0 | 4.0 | Target = Entry + rr_multiplier×Risiko | Ja |
min_risk_reward |
1.0 | 1.0 | 1.0 (min) | 3.0 | Mindest-RR; keine Kandidaten mit Chance/Risiko <1 | Nein (fix) |
Zusätzliche Trend-Parameter (produktiv, V1.1 fix — NICHT von Modul-13 optimieren):
| Parameter | V1 produktiv (Code) | V1.1 | Zweck |
|---|---|---|---|
adx_trend_threshold |
20.0 (config.py:54) | fix 20.0 | ADX-Schwelle für echten Trend |
adx_period |
14 (config.py:50) | fix 14 | ADX-Indikatorfenster |
ema_fast_period |
20 (config.py:36) | fix 20 | Fast-EMA (Strategie-Pullback-Basis) |
ema_slow_period |
30 (config.py:47) | fix 30 | Slow-EMA (Regime-Flanke) |
5. V1-Kompatibilitätsmodus (bitgenau V1)
pullback_band_atr = 0.0
regime_vol_override = true
trend_regime_window = 60
+ alle übrigen V1-Parameter auf produktiven Defaults
⇒ muss V1 bitgenau reproduzieren (Rückwärtskompatibilität; Backtest ohne
strategy_params bleibt fachlich identisch). E2E-verifiziert: V1-Kompatmodus
LONG+SHORT bitgenau (net 200.0, target r=2.0).
6. Abgrenzung / No-Go
- Keine KI/LLM in V1.1, keine Live-Orders.
- Produktions-Regime-Schwellen (
adx_trend_threshold=20,trend_min_ema_gap=0.02,high_vol_atr_ratio=0.03,low_vol_atr_ratio=0.008) werden nicht verändert. atr_period, ADX-/EMA-Perioden,min_risk_rewardwerden in dieser ersten Optimierungsrunde nicht über Modul-13 optimiert.
Geändert
Geändert von: Rain Ocampo
Datum: 20.08.2026
Grund: V1.1-Spec von ENTWURF auf DEPLOYT aktualisiert (backtesting:0.1.2); V1-Kompatmodus bitgenau E2E-verifiziert.