CryptoLowVolAnomalySpotBasketLongOnly
Hipotesis
Anomali Volatilitas Rendah Kripto, Seleksi Long-Only (Tanpa Leg Short): Menahan 5 Nama dengan Volatilitas Terealisasi LOWEST-Hari Terendah dari Universe Spot Likuid 25-Koin Tetap, Equal-Weight, Rebalance 10-Hari pada Bar DAILY, Buku Diskalakan ke Target Vol Ex-Ante 15% — OHLCV Murni, Tanpa Gate, Tanpa Feed Tambahan
Hipotesis
Sebuah strategi cross-sectional LONG-ONLY, SELECTION-BASED (secara eksplisit NOT dollar-neutral, NOT beta-hedged, NO short leg) pada BINANCE_SPOT di seluruh semesta likuid FIXED 25-nama. Setiap bar harian ke-10, peringkatkan setiap koin berdasarkan volatilitas terealisasi trailing 20-hari miliknya sendiri dan tahan 5 LOWEST dengan bobot sama; seluruh portofolio kemudian diskalakan oleh satu faktor tunggal min(1.0, 0.15 / mean_RV_of_the_5) sehingga portofolio menargetkan volatilitas tahunan ~15% dan tidak pernah melebihi notional 1.0x (tanpa leverage, akun tunai). Tidak ada suku momentum, tidak ada filter tren, tidak ada regime gate, tidak ada feed tambahan, dan tidak ada parameter threshold — volatilitas terealisasi adalah sinyal ENTIRE dan digunakan sebagai RANK, bukan sebagai gerbang on/off.
Saya mengukur hal ini sebelum mengusulkannya, pada katalog, alih-alih hanya menyatakannya. Dengan mendekode bar fixed-point Nautilus secara langsung (BINANCE_SPOT harian, 25/25 nama hadir, 2017-10-27 -> 2026-09-19, ~9 tahun), konfigurasi di atas menghasilkan Sharpe +0.74 NET dari round-trip spot 0.20% secara penuh, imbal hasil tahunan 13.4% pada volatilitas 18.1%, max drawdown -33.6%, 430 entri, dan rata-rata imbal hasil per-trade sebesar 1.37% dari notional posisi. Per tahun kalender: 2018 -19%, 2019 +17%, 2020 +49%, 2021 +40%, 2022 -26%, 2023 +40%, 2024 +41%, 2025 +6%, 2026 -5% — 6 dari 9 tahun positif, dan strategi ini bertahan melewati BOTH bear market penuh.
CRITICAL ROBUSTNESS EVIDENCE (ini adalah pemeriksaan replikasi, NOT sebuah proxy leg — strategi ini hanya memperdagangkan BINANCE_SPOT): aturan peringkat yang identik dijalankan secara independen pada BYBIT linear perps dan BINANCE USD-M perps. Pada jendela 2022-2026 yang selaras tanggal, kedua venue setuju hingga desimal kedua — Sharpe lowest-vol +0.58 (Bybit) vs +0.57 (Binance), highest-vol +0.11 vs +0.11, imbal hasil tahunan 31.0% vs 30.4% — dibandingkan dengan benchmark equal-weight sebesar +0.25/+0.21. Efek yang sama tereplikasi di tiga pipeline data venue yang independen. Pada jendela yang tidak selaras, kedua venue tampak tidak sepakat (0.38 vs 1.01); itu murni artefak awal-histori (semesta Bybit tidak lengkap sebelum 2022), yang saya isolasi alih-alih dilaporkan sebagai hasil.
Penyebab ekonomi dan WHO PAYS: ini adalah anomali low-volatility / lottery-preference (Bali-Cakici-Whitelaw; Frazzini-Pedersen), dan kripto adalah habitat paling murninya. Koin dengan volatilitas terealisasi tinggi adalah tempat aliran ritel yang mencari leverage dan mencari lottery terkonsentrasi — koin-koin ini dinaikkan harganya karena pembeli membayar untuk CHANCE dari payoff besar, bukan untuk imbal hasil yang diharapkan. Pembeli tersebut adalah counterparty: mereka secara sistematis membayar lebih untuk volatilitas dan menerima imbal hasil yang disesuaikan risiko yang buruk. Pengukurannya sangat jelas dan merupakan klaim inti yang dapat difalsifikasi — selama 2022-2026 nama-nama volatilitas 5 HIGHEST menghasilkan imbal hasil tahunan ~9% sementara 5 LOWEST menghasilkan ~31%, dengan keranjang high-vol membawa volatilitas kurang lebih dua kali lipat. Premi ini bukan efek price-trend: saya memverifikasi bahwa peringkat trailing-momentum menghasilkan profil yang berbeda dan lebih lemah pada jendela non-overlapping yang jujur (t=+1.25) dibandingkan peringkat volatilitas (t=+3.30 mentah, +2.53 date-clustered).
Hipotesis
Mengembalikan semesta 25-nama hipotesis dan eksposur gross maksimum 1.0 sambil mempertahankan mekanisme peringkat volatilitas rendah OHLCV yang murni.
Hipotesis
verification_loop: Verifikasi gagal (Layer 2 — skenario sintetis):
Parameter yang digunakan: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance']
Pastikan __init__ menetapkan semua atribut dari self.parameters.get().
- steady_uptrend: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- steady_downtrend: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- flat_ranging: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- volatility_spike: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- zero_volume: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- price_gap: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
Implementasi
Keranjang Binance Spot long-only yang menahan lima nama dengan volatilitas terealisasi terendah dari semesta tetap 25-koin, diseimbangkan ulang setiap sepuluh bar harian dan diskalakan ke volatilitas tahunan 15% dengan batas gross 1.0x.
Hasil Verifikasi
Verifikasi gagal (Layer 2 — skenario sintetis):
Parameter yang digunakan: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance']
Pastikan __init__ menetapkan semua atribut dari self.parameters.get().
- steady_uptrend: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- steady_downtrend: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- flat_ranging: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- volatility_spike: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- zero_volume: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- price_gap: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
Ringkasan Hasil
CryptoLowVolAnomalySpotBasketLongOnl-7a915cf1a2
Ringkasan Hasil
Strategi ini menguji keranjang Binance Spot long-only yang menahan lima koin dengan volatilitas terendah dari semesta 25-koin. Meskipun hipotesis melaporkan hasil historis yang positif, verifikasi gagal di setiap skenario sintetis akibat TypeError Decimal/float, sehingga strategi ini ditinggalkan sebelum backtesting atau optimasi.
Ringkasan Hasil
Pastikan aritmetika Decimal dan float ditangani secara konsisten sebelum verifikasi sintetis.
Ringkasan Hasil
Strategi ini ditinggalkan setelah tiga iterasi karena verifikasi Layer 2 gagal: keenam skenario sintetis memunculkan TypeError Decimal/float. Tahap berikutnya tidak tercapai.
Ringkasan Hasil
Strategi ini mencoba memanfaatkan anomali volatilitas rendah kripto dengan menahan lima nama dengan volatilitas terealisasi terendah dari semesta Binance Spot tetap 25-koin.
Ringkasan Hasil
Hipotesis ini melaporkan Sharpe bersih sebesar 0.74, imbal hasil tahunan 13.4%, maximum drawdown -33.6%, 430 entri, dan rata-rata imbal hasil per-trade sebesar 1.37%. Tidak ada backtest pipeline atau laporan optimasi yang tercatat.
Iteration History
Verifikasi gagal (Lapisan 4 — tinjauan QA) [class=code_defect]:
- [edge_concern] Ekonomi sandbox sehat dan konsisten secara internal, sehingga profitabilitas NOT alasan kegagalan ini. avg_trade_return_pct 3.73% x avg_position_pct 8.25% x 95 trades = ~29% dari ekuitas vs total_return 32.07% — buku besar (ledger) sesuai dengan kurva ekuitas (tidak ada cacat akuntansi), dan 3.73%/trade melampaui round trip 0.20% BINANCE_SPOT sebesar ~18x dengan komisi hanya sebesar 2.64% dari gross. Dua hal yang perlu dibawa maju oleh analis: (1) Sharpe 0.547 yang dilaporkan tidak konsisten secara internal dengan CAGR 19.26% pada annualized_volatility 8.12% — deret MTM harian hanya bergerak pada 580 dari 2401 hari sementara buku memegang 5 leg spot secara terus-menerus sejak ~Nov-2022, sehingga angka risk-adjusted (Sharpe, Sortino, vol, VaR, Calmar) menjadi terdilusi/jarang relatif terhadap ledger yang terealisasi. Nyatakan gejalanya, jangan menegaskan penyebabnya. (2) atribusi rezim sudah menunjukkan +42.6% tenang (Sharpe 1.40) vs -4.1% normal dan -3.7% stres, artinya premi low-vol di sini adalah fenomena rezim tenang dalam sampel ini — tetapi tercile tersebut dihitung pada jendela waktu yang mayoritas flat (lihat isu kritis), jadi baca ulang setelah jendela waktu tersebut diperbaiki, bukan bertindak berdasarkan angka ini sekarang.
- [critical] UNIVERSE MAKES 58% OF THE BACKTEST WINDOW STRUCTURALLY UNTRADEABLE, CORRUPTING EVERY RISK METRIC. Barrier penyelarasan cross-leg pada template dasar (base_template.py _maybe_process_primary + _sync_extra_iids) menunda bar primary hingga EVERY extra leg dengan timeframe sama memiliki bar pada timestamp yang tepat itu, dan strategi ini juga mensyaratkan baris lengkap di _row_for(). Saya memverifikasi tanggal bar pertama di data/catalog untuk semua 25 leg: nama yang mengikat adalah APTUSDT.BINANCE_SPOT (bar 1-DAY pertama 2022-10-20) dan ICPUSDT.BINANCE_SPOT (2021-05-12). Primary BTCUSDT.BINANCE_SPOT dimulai 2017-08-18, dan backtest penuh tidak mengirim tanggal mulai (backtest_agent._run_backtest hanya mengirim `end`), sehingga engine berjalan 2017-08 -> 2026-09 (~9.1th) sementara buku tidak dapat menempatkan order pertamanya hingga ~2022-11-10 (APT listing + 21 baris warmup yang selaras). ~5.25 dari 9.1 tahun (58%) ditandai sebagai 0.00% hari flat pada grid harian. Sandbox sudah menunjukkan hal ini secara persis: jendela stres covid_crash_2020, china_ban_2021, luna_collapse_2022 dan rate_shock_2022 (Jan-Okt) semuanya mengembalikan 0.0000% secara tepat, sementara ftx_collapse_2022 (dimulai 2022-11-06) adalah yang pertama tidak nol pada -8.20%. Konsekuensi, yang tidak dapat dibatalkan oleh optimizer maupun analis: (a) objektif Phase-2 adalah Sharpe yang dihitung pada deret yang mayoritas nol — sandbox melaporkan 0.547 sementara CAGR buku yang sama sepanjang rentang ACTIVE-nya adalah 19.26%; (b) kira-kira lima tahun kalender akan melaporkan 0.00% secara tepat dan dihitung sebagai non-positif terhadap batas validitas positive-years-share; (c) klaim yang telah diregistrasi sebelumnya (pre-registered) dari hipotesis itu sendiri — Sharpe +0.74 selama 2017-2026, 6 dari 9 tahun positif, 'survives BOTH full bear markets' (2018 -19%, 2022 -26%) — tidak dapat dihasilkan sama sekali, karena 2018 dan sepuluh bulan pertama 2022 berada di dalam jendela mati (dead window); (d) tercile rezim realized-vol dihitung pada deret yang mayoritas berisi hari-hari mati. Ini adalah cacat sizing/konfigurasi dengan perbaikan yang jelas, bukan pernyataan tentang edge: logika trading itu sendiri sudah benar (lihat catatan). (baris 49) — perbaikan: Pilih universe yang seluruh anggotanya ada sepanjang jendela waktu yang ingin diukur, dan sebutkan dalam rasionale konfigurasi jendela mana itu. Tanggal bar pertama catalog yang telah diverifikasi untuk 25 saat ini: APT 2022-10-20, ICP 2021-05-12, lalu FIL 2020-10-16 / AAVE 2020-10-16 / NEAR 2020-10-15 / AVAX 2020-09-23 / UNI 2020-09-18 / DOT 2020-08-19 / SOL 2020-08-12, lalu BCH 2019-11-29 / HBAR 2019-09-30 / DOGE 2019-07-06 / ALGO 2019-06-23 / ATOM 2019-04-30 / LINK 2019-01-17, lalu VET 2018-07-26 / ETC 2018-06-13 / TRX 2018-06-12 / XLM 2018-06-01 / XRP 2018-05-05 / ADA 2018-04-18, dan BTC/ETH 2017-08-18, BNB 2017-11-07,
- [warning] Sizing pembelian pada rotasi dibatasi oleh `available = get_account_equity() * cash_buffer`, dibaca AFTER exit dan SELL untuk trim disubmit pada baris 279-298. Dalam backtest ini benar karena SimulatedExchange NT mengisi market order dalam iterasi engine yang sama, sehingga saldo USDT sudah mencerminkan penjualan tersebut. Dalam paper/live tidak demikian: market order menunggu (rest) hingga tick berikutnya, sehingga pada rotasi yang menjual 2-3 nama untuk mendanai 2-3 nama baru, strategi akan melihat cash pra-penjualan, menskalakan setiap defisit dengan `ratio < 1`, dan under-deploy. Karena nama yang dipegang hanya diubah ukurannya ketika bergeser di luar pita toleransi +/-25%, kekurangan tersebut dapat bertahan hingga rotasi berikutnya. Ini adalah divergensi backtest/paper, bukan bug korektivitas backtest. (baris 309) — perbaikan: Baik hitung `available` sebagai (cash + notional dari exit/trim yang baru saja disubmit), atau tunda leg beli dari rotasi ke bar berikutnya setelah penjualan settle (antrean beli yang ditunda satu bar, dikunci pada periode rebalance). Jika dibiarkan seperti sekarang, nyatakan secara eksplisit dalam rasionale agar pemeriksaan paper-parity tidak membaca divergensi ini sebagai cacat.
- [warning] Gangguan data single-leg menghentikan seluruh buku. `_row_for()` mengembalikan None kecuali EVERY salah satu dari 25 leg memiliki bar yang membawa timestamp tepat sama dengan bar primary, dan barrier template dasar secara independen memblokir bar primary dalam situasi yang sama. Satu bar harian yang hilang pada nama mana pun (gap pengumpulan data, halt bursa) secara diam-diam melewati baris hari tersebut, meninggalkan lubang pada jendela log-return yang digunakan untuk realized vol; nama yang berhenti mempublikasikan sepenuhnya (delisting) akan membekukan strategi selamanya dengan posisi tetap terbuka. Perilaku ini konservatif, bukan salah, tetapi tidak terlihat — tidak ada yang mencatat atau menghitung hari yang dilewati. (baris 88) — perbaikan: Hitung baris yang dilewati (int `self._skipped_rows` sudah otomatis dipersist oleh template dasar) dan catat peringatan ketika sebuah leg tidak ada selama lebih dari ~2 bar primary berturut-turut, sehingga delisting muncul sebagai diagnostik alih-alih buku flat yang diam-diam.
Iteration History
Verifikasi gagal (Layer 4 — review QA) [class=hypothesis_mismatch]:
- [edge_concern] Backtest smoke menguntungkan, tetapi performa tidak digunakan sebagai vonis kebenaran.
- [critical] Hipotesis mensyaratkan semesta Binance Spot tetap 25-koin, tetapi implementasi hanya mengonfigurasi 14 instrumen. Menahan 5 nama karena itu memilih 5/14 alih-alih 5/25, mengubah strategi cross-sectional secara material. (baris 45) — perbaikan: Kembalikan semesta 25-nama yang tepat di extra_instruments dan extra_bar_types, lalu jalankan ulang verifikasi dan backtesting. Sebagai alternatif, revisi hipotesis secara formal menjadi varian 14-nama.
- [critical] Hipotesis mengizinkan eksposur gross maksimum sebesar 1.0x, tetapi implementasi menetapkan max_gross_exposure ke 0.95 dan mengklem pada 0.95. (baris 29) — perbaikan: Gunakan maksimum 1.0 atau amandemen hipotesis secara eksplisit untuk mendaftarkan-awal batas 0.95.
Alasan Dibatalkan
verification_loop: Verifikasi gagal (Lapisan 2 — skenario sintetis):
Parameter yang digunakan: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance']
Pastikan __init__ menetapkan semua atribut dari self.parameters.get().
- steady_uptrend: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- steady_downtrend: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- flat_ranging: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- volatility_spike: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- zero_volume: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
- price_gap: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (bar timestamp: 1735692060000)
Stratmill adalah alat riset dan paper trading, bukan nasihat keuangan atau broker. Hasil backtest dan paper trading bersifat hipotetis. Trading mengandung risiko kerugian.