Langsung ke konten

Lihat teks asli

BtcSpotDualTimeframeMomentumConfluenceLong

Hipotesis

BTC Spot Dual-Timeframe Momentum Confluence, LONG-ONLY 1x (BTCUSDT.BINANCE_SPOT, 4H Primary + 1D Confirm, Long Only When BOTH Timeframes Point UP, FLAT to Cash Otherwise, ATR-Trailing + Daily-Regime-Break Exit, Source-Optimised Parameters Retained)

Hipotesis

Port LONG-ONLY, 1x, akun CASH dari strategi berkinerja terbaik yang dipromosikan factory (BtcDualTimeframeMomentumConfluenceLS, Sharpe 1.99, 458 trade, +$4,774 selama 29 hari paper) ke BTCUSDT.BINANCE_SPOT, dibuat khusus sebagai FIRST LIVE-TRADING CANDIDATE karena venue live hanya spot. Mekanisme tidak berubah, pure-OHLCV, single-instrument: leg FAST = sign dari return trailing 18-bar pada bar 4-HOUR; leg SLOW = sign dari return trailing 15-bar pada bar DAILY, dibaca melalui on_extra_bar sebagai leg konteks, bukan sync barrier. Keduanya harus AGREE. Satu-satunya perubahan struktural yang dipaksa oleh akun CASH adalah mengempiskan {LONG/FLAT/SHORT} menjadi {LONG/FLAT}: di mana parent futures melakukan SHORT pada joint-down confluence, versi spot memegang 100% USDT. Semuanya yang lain dipertahankan verbatim: stop trailing ATR(14) pada 3.033x ATR dari running extreme, exit daily-regime-break, sizing capital-relative vol-scaled (risk_pct 1.011% / jarak stop 3.033xATR), cap max-notional 49.7%, dan vektor parameter persis yang dipilih optimisasi sumber (fast_lookback 18, slow_lookback 15, trail_atr_mult 3.033). Tiga tunable, tanpa data tambahan, tanpa short, tanpa leverage. Perubahan kode khusus spot: venue BINANCE_SPOT CASH (tanpa pengali leverage di position_size), size_precision 5 / price_precision 2, min_notional $10, sell disesuaikan ukurannya hanya terhadap kuantitas base yang dipegang. Data terverifikasi tersedia: BTCUSDT.BINANCE_SPOT bar 4-HOUR dan 1-DAY berjalan kontinu sejak 2017-08-17 (~9 tahun, ~19,800 bar 4H).

Hipotesis

Port langsung dari parent futures yang telah dipromosikan, BtcDualTimeframeMomentumConfluenceLS, ke venue spot, karena venue live yang dituju hanya spot. Mekanisme dipertahankan secara verbatim: kedua leg momentum yang sama, gate AGREE-atau-flat yang sama, stop trailing ATR(14) 3.033x dari running extreme yang sama, exit daily-regime-break yang sama, sizing vol-scaled risk_pct / stop-distance yang sama dengan cap notional 49.7%, dan vektor parameter persis yang dipilih oleh optimisasi sumber (fast_lookback 18, slow_lookback 15, trail_atr_mult 3.033). Akun CASH memaksa tepat satu perubahan struktural, sesuai spesifikasi hipotesis: {LONG,FLAT,SHORT} menjadi {LONG,FLAT} — should_enter mengembalikan BUY hanya pada joint-up dan None selain itu, sehingga joint-down berarti 100% USDT bukan short. Edit khusus spot: venue BINANCE_SPOT dengan leverage 1.0 dan tanpa term leverage pada position_size, size_precision 5 / price_precision 2 (BTCUSDT spot), min_notional dinaikkan menjadi $10, dan semua exit dialihkan melalui reduce-only close_position milik base template sehingga SELL hanya bisa mengurangi kuantitas base yang dipegang (short spot naked tidak mungkin terjadi secara konstruksi, dan guard _would_open_spot_short milik base tidak pernah terpicu). calculate_signal mengembalikan return 18-bar 4H yang kontinu setiap bar (bervariasi antar bar); gate confluence diskret berada di should_enter, sesuai kebutuhan. Biaya per-bar adalah O(1): ATR menggunakan window 15-bar tetap dan return fast adalah satu lookup terindeks, sehingga tidak ada pekerjaan yang skalanya bertambah seiring histori. Satu caveat jujur untuk Analyst: biaya round-trip spot adalah ~0.20% dibandingkan ~0.10% pada parent futures, sehingga edge per-trade harus melampaui friksi dua kali lipat — struktur exit trend-following (trail + regime break, tanpa take-profit tetap) adalah yang membuat rata-rata hold cukup panjang agar hal ini masuk akal, tetapi ini adalah metrik yang harus diawasi pertama kali.

Implementasi

LONG-ONLY 1x BTCUSDT spot (BINANCE_SPOT, CASH) dual-timeframe momentum confluence. Leg FAST = sign dari return trailing 18-bar pada bar 4-HOUR (primary); leg SLOW = sign dari return trailing 15-bar pada bar 1-DAY, dikonsumsi melalui on_extra_bar sebagai leg konteks timeframe yang lebih lambat (timeframe berbeda, sehingga barrier alignment cross-leg milik base template tidak pernah menunda sinyal 4H). Kedua leg harus mengarah UP agar bisa memegang BTC; joint-down (di mana parent futures melakukan short) dan disagreement keduanya berarti memegang 100% USDT. Exit: stop trailing ATR(14) pada 3.033x ATR di bawah puncak running posisi, OR leg daily berbalik turun di bawah posisi long (regime break timeframe lebih tinggi). Sizing bersifat vol-scaled dan capital-relative: equity * 1.011% / (3.033 * ATR), dibatasi pada 49.7% dari saldo USDT dalam notional, dengan pengali leverage NO (akun CASH tidak dapat meminjam), dikuantisasi ke size_precision 5 dan ditolak di bawah min notional spot $10. Tiga tunable, pure OHLCV, tanpa data tambahan, tanpa short.

Hasil Verifikasi

Baik gunakan self._atr (saat ini) pada perbandingan trail milik should_exit agar cocok persis dengan parent, atau nyatakan secara eksplisit dalam deskripsi bahwa trail berpatokan pada ATR entry-bar sehingga analis tidak mengatribusikan divergensi dari parent kepada perubahan venue.

Hasil Verifikasi

ATR trailing-stop adalah FROZEN saat entry (self._entry_atr, ditangkap di should_enter / pada adopsi posisi) dan tidak pernah di-refresh, sehingga jarak trail adalah 3.033 x ATR-at-entry, bukan 3.033 x ATR(14) saat ini. Parent futures yang dipromosikan (BtcDualTimeframeMomentumConfluenceLS4H) meng-ratchet trail-nya dengan CURRENT ATR setiap bar. Rumusan hipotesis ('stop trailing ATR(14) pada 3.033x ATR dari running extreme') terpenuhi kedua caranya, dan karena _extreme bersifat monoton, level stop tetap hanya ratchet naik, sehingga ini bukan defek kebenaran — tetapi pada ekspansi volatilitas setelah entry, stop efektif lebih ketat dibandingkan milik parent, yang merupakan perbedaan perilaku nyata dari strategi yang diklaim di-port 'verbatim'.

Hasil Verifikasi

Set state trade dari fill (on_order_filled / bar pertama dengan posisi terbuka) alih-alih di dalam should_enter, atau reset secara defensif di bagian atas calculate_signal sebelum lookup posisi.

Hasil Verifikasi

should_enter() mengubah state trade (_in_long = True, _extreme, _entry_atr) BEFORE base template melakukan sizing order dan menerapkan gate min-notional. Jika position_size() mengembalikan 0 atau pemeriksaan min-notional $10 men-drop entri, strategi tertinggal dalam status ditandai in-long dengan trail yang armed padahal flat. Dalam praktiknya ini self-heal pada bar berikutnya (calculate_signal melihat posisi adalah None dan mereset flag, dan should_exit tidak pernah dijangkau saat flat), sehingga tidak ada bug perilaku yang teramati — tetapi invariant ini rapuh jika jalur exit pernah diubah.

Hasil Verifikasi

Tidak diperlukan perbaikan untuk kebenaran. Jika konsumsi same-bar yang tepat diinginkan, hitung ulang _slow_dir secara lazy dari self._extra_bars[...] di dalam calculate_signal alih-alih meng-cache-nya di on_extra_bar.

Hasil Verifikasi

Latensi satu bar pada leg daily: bar DAILY dan bar 4H terakhir hari itu memiliki timestamp close yang sama. Jika engine mengirimkan bar primer 4H terlebih dahulu, _maybe_process_primary() berjalan dan mencatat _last_processed_ts, dan update _slow_dir dari bar daily (yang tiba dengan ts yang sama) hanya dikonsumsi dari bar NEXT 4H berikutnya. Ini konservatif (hanya bisa menunda sinyal, tidak pernah membocorkan data masa depan), tetapi artinya exit daily-regime-break bisa terpicu hingga 4 jam setelah close harian pada sekitar setengah kasus, dan paritas backtest/paper bergantung pada urutan pengiriman yang stabil.

Hasil Verifikasi

Implementasi yang setia, tetapi ada tiga hal yang perlu dipertimbangkan analis pada histori lengkap: (1) round-trip spot adalah ~0.20% vs ~0.10% milik parent futures, sehingga edge gross yang sama nettonya kurang lebih setengahnya — sandbox sudah menunjukkan komisi sebesar 10.03% dari gross; (2) vektor parameter (fast 18 / slow 15 / trail 3.033) dipilih oleh run optimisasi pada DIFFERENT venue, campuran timeframe, dan set arah (LONG/SHORT futures) yang berbeda, sehingga ini adalah transfer out-of-sample, bukan konfigurasi yang dioptimisasi — Sharpe sandbox adalah 0.527 dengan sharpe_ci_low -0.233 dan information_ratio -0.760 dibandingkan benchmark, yaitu book long-only BTC yang underperform dibandingkan holding BTC pada window smoke; (3) menghilangkan leg short menghapus kurang lebih setengah dari populasi trade parent (250 trade, semua long, eksposur 43.6%), sehingga Sharpe yang terealisasi seharusnya diperkirakan jauh di bawah 1.99 milik parent, bukan mendekatinya. Hal pertama yang perlu diperiksa pada backtest sebenarnya: avg_trade_return_pct terhadap floor spot 0.25% (sandbox menunjukkan 0.82%, tetapi window tersebut tidak mencakup 2017 dan hanya 2401 hari) dan apakah tercile volatilitas 'normal' (-8.77% dalam sandbox) tetap negatif sepanjang histori lengkap.

Tinjauan Backtest

314 trade yang ditutup selama 3146 hari (2017-08 → 2026-03), metrics_reliable=true, entry_diag 314/314 entri diajukan dengan 0 yang di-drop.

Tinjauan Backtest

Trade mengimplementasikan hipotesis: semua 314 LONG / 0 short (kolaps CASH yang benar dari LONG/FLAT/SHORT milik parent), max notional/equity 0.50 vs cap 0.497, rata-rata hold 4d8h dan eksposur 43.6% yang mereproduksi parent futures.

Tinjauan Backtest

avg_trade_return_pct 1.20% vs ~0.20% BINANCE_SPOT transaksi bolak-balik; komisi hanya 8.97% dari bruto, dampak 4.33% — bukan marjinal biaya.

Tinjauan Backtest

max_drawdown 10.3% (di bawah default spot 15%), PF 1.41, payoff 2.07 pada hit rate 40.4% (bentuk trend yang benar), tercile volatilitas stress +28.0%.

Tinjauan Backtest

Konsentrasi ekstrem: top 10 dari 314 trade = 93.8% dari total return per-trade, top 20 = 141% (trade 21–314 net negatif).

Tinjauan Backtest

Hanya 6/10 tahun kalender positif — tepat di batas minimum — dan kedua tahun terbaru negatif (2025 −10.5%, 2026 −9.9%).

Tinjauan Backtest

Sharpe 0.664 dengan sharpe_ci_low 0.0042 dan PSR 0.924 (<0.95): sudah marjinal sebelum bar seleksi ~225-trial.

Tinjauan Backtest

Kekhawatiran QA sebagian terkonfirmasi: tercile volatilitas 'normal' tetap negatif (−7.70%, 16.1% DD), information_ratio −0.757, alpha hanya +2.4%/tahun — ini underperform dibandingkan holding BTC, dan benchmark_meaningful=true sehingga shortfall tersebut nyata.

Tinjauan Backtest

Parameter merupakan transfer out-of-sample dari venue/set arah lain — tidak di-tuning, bukan overfit, tetapi juga belum diuji di sini.
Laporan strategi

Stratmill adalah alat riset dan paper trading, bukan nasihat keuangan atau broker. Hasil backtest dan paper trading bersifat hipotetis. Trading mengandung risiko kerugian.