Zum Inhalt springen

Original anzeigen

BtcSpotDualTimeframeMomentumConfluenceLong

Hypothesen

BTC Spot-Dual-Timeframe-Momentum-Konfluenz, LONG-ONLY 1x (BTCUSDT.BINANCE_SPOT, 4H-Primär + 1D-Bestätigung, Long nur, wenn BOTH Zeitrahmen UP zeigen, FLAT sonst zu Cash, ATR-Trailing + Exit beim Bruch des Tagesregimes, quelloptimierte Parameter beibehalten)

Hypothesen

Ein LONG-ONLY-, 1x-, CASH-Konto-Port der bestperformenden beworbenen Strategie der Factory (BtcDualTimeframeMomentumConfluenceLS, Sharpe 1.99, 458 Trades, +$4,774 über 29 Tage im Paper-Trading) auf BTCUSDT.BINANCE_SPOT, speziell erstellt als FIRST LIVE-TRADING CANDIDATE, da der Live-Handelsplatz ausschließlich Spot ist. Mechanismus unverändert, reines OHLCV, einzelnes Instrument: FAST-Leg = Vorzeichen der rollierenden Rendite über 18 Bars auf 4-HOUR Bars; SLOW-Leg = Vorzeichen der rollierenden Rendite über 15 Bars auf DAILY Bars (über on_extra_bar als Kontext-Leg gelesen, niemals als Synchronisationsbarriere). Beide müssen AGREE. Die einzige strukturelle Änderung, die das CASH-Konto erzwingt, ist die Zusammenfassung von {LONG/FLAT/SHORT} zu {LONG/FLAT}: Wo das Futures-Elternsystem bei gemeinsamer Abwärts-Konfluenz SHORT geht, hält die Spot-Version 100% USDT. Alles andere bleibt wortgetreu erhalten: ATR(14)-Trailing-Stop bei 3.033x ATR vom laufenden Extremwert, Exit beim Bruch des Tagesregimes, volatilitätsskalierte, kapitalrelative Positionsgrößenbestimmung (risk_pct 1.011% / 3.033x ATR-Stop-Distanz), 49.7%-Nominalwertlimit und exakt der vom Quelloptimierungslauf ausgewählte Parametervektor (fast_lookback 18, slow_lookback 15, trail_atr_mult 3.033). Drei Tuning-Parameter, keine Zusatzdaten, keine Shorts, kein Hebel. Spot-spezifische Codeänderungen: BINANCE_SPOT CASH-Handelsplatz (kein Hebel-Multiplikator in position_size), size_precision 5 / price_precision 2, min_notional $10, Verkäufe werden ausschließlich auf die gehaltene Basisstückzahl bemessen. Daten vollständig vorhanden: BTCUSDT.BINANCE_SPOT 4–HOUR und 1–DAY Bars laufen kontinuierlich ab 2017-08-17 (~9 Jahre, ~19,800 4H-Bars).

Hypothesen

Direkter Port des beworbenen Futures-Elternsystems BtcDualTimeframeMomentumConfluenceLS auf den Spot-Handelsplatz, da der vorgesehene Live-Handelsplatz ausschließlich Spot ist. Der Mechanismus bleibt wortgetreu erhalten: dieselben zwei Momentum-Legs, dasselbe AGREE-oder-Flat-Gate, derselbe ATR(14)-Trailing-Stop 3.033x vom laufenden Extremwert, derselbe Exit beim Bruch des Tagesregimes, dieselbe volatilitätsskalierte risk_pct- / Stop-Distanz-basierte Positionsgröße mit einem 49.7%-Nominalwertlimit und exakt der vom Quelloptimierungslauf ausgewählte Parametervektor (fast_lookback 18, slow_lookback 15, trail_atr_mult 3.033). Das CASH-Konto erzwingt genau eine strukturelle Änderung, wie die Hypothese vorgibt: {LONG,FLAT,SHORT} wird zu {LONG,FLAT} zusammengefasst — should_enter gibt nur bei gemeinsamer Aufwärtsbewegung BUY zurück und sonst None, sodass gemeinsamer Abwärtstrend 100% USDT statt eines Shorts ist. Spot-spezifische Änderungen: Handelsplatz BINANCE_SPOT mit Hebel 1.0 und ohne Hebelterm in position_size, size_precision 5 / price_precision 2 (BTCUSDT Spot), min_notional auf $10 angehoben und alle Exits über das Reduce-only-close_position der Basisschablone geleitet, sodass ein SELL nur gehaltene Basisstückzahl reduzieren kann (ein nackter Spot-Short ist konstruktionsbedingt unmöglich und die _would_open_spot_short-Sperre der Basis wird nie ausgelöst). calculate_signal gibt in jedem Bar die kontinuierliche Rendite über 18 4H-Bars zurück (sie variiert von Bar zu Bar); das diskrete Konfluenz-Gate befindet sich wie erforderlich in should_enter. Die Kosten pro Bar sind O(1): Der ATR verwendet ein festes 15-Bar-Fenster und die schnelle Rendite ist ein einzelner indexierter Lookup, daher gibt es keine von der Historienlänge abhängige Arbeit. Ein ehrlicher Vorbehalt für den Analysten: Die Round-Trip-Kosten im Spot-Handel betragen ~0.20% gegenüber ~0.10% beim Futures-Elternsystem, sodass die Edge pro Trade das Doppelte der Reibung überwinden muss — die trendfolgende Exit-Struktur (Trailing + Regimebruch, kein festes Take-Profit) sorgt dafür, dass die durchschnittliche Haltedauer lang genug ist, damit dies plausibel ist, aber dies ist die zuerst zu beobachtende Kennzahl.

Umsetzung

LONG-ONLY 1x BTCUSDT Spot (BINANCE_SPOT, CASH) Dual-Timeframe-Momentum-Konfluenz. FAST-Leg = Vorzeichen der rollierenden Rendite über 18 Bars auf 4-HOUR Bars (primär); SLOW-Leg = Vorzeichen der rollierenden Rendite über 15 Bars auf 1-DAY Bars, verarbeitet über on_extra_bar als Leg des langsameren Zeitrahmens (anderer Zeitrahmen, daher verzögert die Cross-Leg-Alignment-Barriere der Basisschablone das 4H-Signal nie). Beide Legs müssen gemeinsam UP zeigen, um BTC zu halten; gemeinsamer Abwärtstrend (bei dem das Futures-Elternsystem short geht) und Uneinigkeit bedeuten beide, 100% USDT zu halten. Exits: ATR(14)-Trailing-Stop bei 3.033x ATR unter dem laufenden Hoch der Position, OR sobald das Tages-Leg unterhalb der Long-Position nach unten dreht (Regimebruch im höheren Zeitrahmen). Die Positionsgröße ist volatilitätsskaliert und kapitalrelativ: Eigenkapital * 1.011% / (3.033 * ATR), begrenzt auf 49.7% des USDT-Guthabens als Nominalwert, mit NO Hebelmultiplikator (CASH-Konto kann nicht leihen), quantisiert auf size_precision 5 und unterhalb des Spot-Mindestnominalwerts von $10 abgelehnt. Drei Tuning-Parameter, reines OHLCV, keine Zusatzdaten, keine Shorts.

Verifizierungsergebnisse

Entweder self._atr (aktuell) im Trail-Vergleich von should_exit verwenden, um exakt dem Elternsystem zu entsprechen, oder in der Beschreibung ausdrücklich angeben, dass der Trail am ATR der Einstiegs-Bar verankert ist, damit der Analyst die Abweichung vom Elternsystem nicht der Änderung des Handelsplatzes zuschreibt.

Verifizierungsergebnisse

Der Trailing-Stop-ATR wird beim Einstieg auf FROZEN gesetzt (self._entry_atr, erfasst in should_enter / bei der Positionsübernahme) und nie aktualisiert, daher beträgt der Trail-Abstand 3.033 x ATR-bei-Einstieg statt 3.033 x aktuellem ATR(14). Das beworbene Futures-Elternsystem (BtcDualTimeframeMomentumConfluenceLS4H) zieht seinen Trail mit dem CURRENT ATR in jedem Bar nach. Die Formulierung der Hypothese („ATR(14)-Trailing-Stop bei 3.033x ATR vom laufenden Extremwert“) ist in beiden Fällen erfüllt, und da _extreme monoton ist, wird das Stop-Niveau weiterhin nur nach oben nachgezogen; dies ist daher kein Korrektheitsfehler — aber bei einer Volatilitätsausweitung nach dem Einstieg ist der effektive Stop enger als beim Elternsystem, was einen echten Verhaltensunterschied zu der Strategie darstellt, die angeblich „wortgetreu“ portiert wird.

Verifizierungsergebnisse

Den Trade-Zustand aus dem Fill (on_order_filled / erster Bar mit offener Position) setzen statt innerhalb von should_enter, oder ihn defensiv am Anfang von calculate_signal vor dem Positions-Lookup zurücksetzen.

Verifizierungsergebnisse

should_enter() verändert den Trade-Zustand (_in_long = True, _extreme, _entry_atr) BEFORE die Basisvorlage die Ordergröße bestimmt und die Mindestnominalwertprüfung angewendet hat. Wenn position_size() 0 zurückgibt oder die Prüfung auf den Mindestnominalwert von $10 den Einstieg verwirft, bleibt die Strategie bei aktivierter Trailing-Stop-Logik als in-long markiert, obwohl keine Position besteht. In der Praxis korrigiert sich dies mit der nächsten Kerze von selbst (calculate_signal erkennt, dass position den Wert None hat, und setzt die Flags zurück, und should_exit wird ohne offene Position nie erreicht), sodass kein beobachtbarer Verhaltensfehler vorliegt — die Invariante ist jedoch fragil, falls der Ausstiegspfad jemals geändert wird.

Verifizierungsergebnisse

Für die Korrektheit ist keine Änderung erforderlich. Falls eine Verarbeitung exakt desselben Bars gewünscht ist, _slow_dir innerhalb von calculate_signal verzögert aus self._extra_bars[...] neu berechnen, statt ihn in on_extra_bar zwischenzuspeichern.

Verifizierungsergebnisse

Latenz von einem Bar beim Tages-Leg: Der DAILY-Bar und der letzte 4H-Bar des Tages haben denselben Schlusszeitstempel. Wenn die Engine den primären 4H-Bar zuerst liefert, läuft _maybe_process_primary(), setzt _last_processed_ts, und das _slow_dir-Update des Tages-Bars (das zum selben Zeitstempel eintrifft) wird erst vom NEXT 4H-Bar verarbeitet. Dies ist konservativ (es kann ein Signal nur verzögern, niemals zukünftige Daten durchsickern lassen), bedeutet aber, dass der Exit beim Bruch des Tagesregimes in etwa der Hälfte der Fälle bis zu 4 Stunden nach dem Tagesschluss ausgelöst werden kann und die Backtest-/Paper-Parität davon abhängt, dass die Lieferreihenfolge stabil ist.

Verifizierungsergebnisse

Faithful implementiert, aber drei Dinge sollte der Analyst über die vollständige Historie abwägen: (1) Der Round-Trip im Spot-Handel beträgt ~0.20% gegenüber ~0.10% beim Futures-Elternsystem, sodass dieselbe Brutto-Edge netto ungefähr halbiert wird — die Sandbox zeigt bereits eine Kommission von 10.03% der Bruttorendite; (2) Der Parametervektor (schnell 18 / langsam 15 / Trailing 3.033) wurde durch einen Optimierungslauf auf einem anderen DIFFERENT Handelsplatz, Zeitrahmenmix und Richtungssatz (LONG/SHORT Futures) ausgewählt, daher ist dies ein Out-of-Sample-Transfer und keine optimierte Konfiguration — der Sandbox-Sharpe beträgt 0.527 mit sharpe_ci_low -0.233 und information_ratio -0.760 gegenüber der Benchmark, also ein Long-only-BTC-Buch, das im Testfenster hinter dem Halten von BTC zurückbleibt; (3) Das Weglassen des Short-Legs entfernt ungefähr die Hälfte der Trade-Population des Elternsystems (250 Trades, alle Long, 43.6% Exposure), daher sollte der realisierte Sharpe deutlich unter 1.99 des Elternsystems liegen und nicht nahe daran. Als Erstes im echten Backtest prüfen: avg_trade_return_pct gegenüber der 0.25%-Spot-Untergrenze (die Sandbox zeigt 0.82%, aber dieses Fenster schließt 2017 aus und umfasst nur 2401 Tage) sowie, ob das „normale“ Volatilitäts-Teilsegment (-8.77% in der Sandbox) über die vollständige Historie negativ bleibt.

Backtest-Prüfung

314 geschlossene Trades über 3146 Tage (2017-08 → 2026-03), metrics_reliable=true, entry_diag 314/314 Entries eingereicht, davon 0 verworfen.

Backtest-Prüfung

Die Trades setzen die Hypothese um: alle 314 LONG / 0 short (korrekte CASH-Reduktion der LONG/FLAT/SHORT der übergeordneten Strategie), maximales Verhältnis von Nominalwert zu Eigenkapital 0.50 gegenüber der Obergrenze von 0.497, durchschnittliche Haltedauer 4d8h und 43.6% Exposure, wodurch die übergeordnete Futures-Strategie reproduziert wird.

Backtest-Prüfung

avg_trade_return_pct 1.20% gegenüber einem Roundtrip von ~0.20% BINANCE_SPOT; Provisionen nur 8.97% des Bruttoergebnisses, Markteinfluss 4.33% — kein durch Gebühren nur knapp profitables Ergebnis.

Backtest-Prüfung

max_drawdown 10.3% (unter dem 15%-Spot-Standard), PF 1.41, Auszahlungsprofil 2.07 bei einer Trefferquote von 40.4% (korrekte Trendform), gestresstes Volatilitäts-Teilsegment +28.0%.

Backtest-Prüfung

Extreme Konzentration: Die besten 10 von 314 Trades machen 93.8% der summierten Einzeltrade-Renditen aus, die besten 20 = 141% (Trades 21–314 netto negativ).

Backtest-Prüfung

Nur 6/10 Kalenderjahre positiv — genau am harten Mindestwert — und beide letzten Jahre negativ (2025 −10.5%, 2026 −9.9%).

Backtest-Prüfung

Sharpe 0.664 mit sharpe_ci_low 0.0042 und PSR 0.924 (<0.95): bereits vor der Auswahlgrenze von ~225 Durchläufen marginal.

Backtest-Prüfung

Die Sorge von QA teilweise bestätigt: Das „normale“ Volatilitäts-Teilsegment bleibt negativ (−7.70%, 16.1% DD), information_ratio −0.757, Alpha nur +2.4%/Jahr — es bleibt hinter dem Halten von BTC zurück, und benchmark_meaningful=true, daher ist diese Unterperformance real.

Backtest-Prüfung

Die Parameter sind ein Out-of-Sample-Transfer von einem anderen Handelsplatz/Richtungssatz — ungetunt statt überangepasst, aber hier ebenfalls ungetestet.
Strategiebericht

Stratmill ist ein Tool für Research und Paper-Trading, keine Finanzberatung und kein Broker. Backtest- und Paper-Trading-Ergebnisse sind hypothetisch. Der Handel ist mit Verlustrisiken verbunden.