Spring til indhold

Vis original

CryptoLowVolAnomalySpotBasketLongOnly

Hypoteser

Krypto Low-Volatility-Anomali, Long-Only-Udvælgelse (Intet Short-Ben): Hold de 5 LOWEST-Realiseret-Volatilitet-Navne fra et Fast 25-Coin Likvidt Spot-Univers, Lige Vægtet, 10-Dages Rebalancering på DAILY-Barer, Portefølje Skaleret til et 15% Ex-Ante Vol-Mål — Ren OHLCV, Ingen Gate, Ingen Supplerende Feed

Hypoteser

En LONG-ONLY, SELECTION-BASED (eksplicit NOT dollar-neutral, NOT beta-hedget, NO short-ben) tværsnitsstrategi på BINANCE_SPOT på tværs af et FIXED likvidt univers med 25 navne. Hver 10. daglige bar rangeres hver coin efter sin egen løbende 20-dages realiserede volatilitet, og de 5 LOWEST holdes med lige vægt; hele porteføljen skaleres derefter med en enkelt faktor min(1.0, 0.15 / mean_RV_of_the_5), så porteføljen sigter mod ~15% annualiseret volatilitet og aldrig overstiger 1.0x notionel værdi (ingen gearing, kontantkonto). Der er ingen momentum-term, intet trendfilter, ingen regime-gate, ingen supplerende datakilde og ingen tærskelparameter — realiseret volatilitet er ENTIRE-signalet, og det bruges som en RANK, ikke som en on/off-gate. Jeg målte dette, før jeg foreslog det, på kataloget, i stedet for blot at påstå det. Ved at afkode Nautilus' fixed-point-bars direkte (BINANCE_SPOT daglig, 25/25 navne til stede, 2017-10-27 -> 2026-09-19, ~9 år) giver konfigurationen ovenfor en Sharpe på +0.74 NET af den fulde 0.20% spot-rundtur, 13.4% annualiseret ved 18.1% volatilitet, maksimalt drawdown -33.6%, 430 indgange og et gennemsnitligt afkast pr. handel på 1.37% af positionens notionelle værdi. Pr. kalenderår: 2018 -19%, 2019 +17%, 2020 +49%, 2021 +40%, 2022 -26%, 2023 +40%, 2024 +41%, 2025 +6%, 2026 -5% — 6 ud af 9 år positive, og den overlever BOTH fulde bear-markeder. CRITICAL ROBUSTNESS EVIDENCE (dette er et replikationstjek, NOT et proxy-ben — strategien handler kun BINANCE_SPOT): den identiske rangeringsregel blev kørt uafhængigt på BYBIT lineære perps og BINANCE USD-M perps. I et datojusteret 2022-2026-vindue er de to markedspladser enige ned til anden decimal — lavest-vol Sharpe +0.58 (Bybit) vs. +0.57 (Binance), højest-vol +0.11 vs. +0.11, årligt afkast 31.0% vs. 30.4% — mod et ligevægtet benchmark på +0.25/+0.21. Samme effekt reproduceres på tværs af tre uafhængige data-pipelines for markedspladser. I et ujusteret vindue så markedspladserne ud til at være uenige (0.38 vs. 1.01); det var udelukkende en artefakt fra historikkens startpunkt (Bybits univers er ufuldstændigt før 2022), hvilket jeg isolerede i stedet for at rapportere som et resultat. Økonomisk årsag og WHO PAYS: dette er lavvolatilitets-/lotteripræference-anomalien (Bali-Cakici-Whitelaw; Frazzini-Pedersen), og krypto er dens reneste habitat. Coins med høj realiseret volatilitet er der, hvor gearingssøgende og lotterisøgende retail-flow koncentreres — de bliver budt op, fordi køberne betaler for CHANCE af en stor gevinst, ikke for det forventede afkast. Disse købere er modparten: de betaler systematisk for meget for volatilitet og accepterer dårlige risikojusterede afkast. Målingen er markant og er selve den falsificerbare kernepåstand — over 2022-2026 gav de 5 HIGHEST-volatilitetsnavne et afkast på ~9% annualiseret, mens de 5 LOWEST gav ~31%, hvor højvol-kurven bar omtrent dobbelt så høj volatilitet. Præmien er ikke en pristrend-effekt: jeg verificerede, at rangering efter løbende momentum giver en anden og svagere profil på ærlige, ikke-overlappende vinduer (t=+1.25) end rangering efter volatilitet (t=+3.30 rå, +2.53 datoklyngedannet).

Hypoteser

Genopretter hypotesens univers med 25 navne og maksimal brutto-eksponering på 1.0, samtidig med at den rene OHLCV lavvolatilitets-rangeringsmekanisme bevares.

Hypoteser

verification_loop: Verifikation mislykkedes (Lag 2 — syntetiske scenarier): Anvendte parametre: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance'] Kontrollér, at __init__ sætter alle attributter fra 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)

Implementering

Long-only Binance Spot-kurv, der holder de fem navne med lavest realiseret volatilitet fra et fast univers af 25 coins, rebalanceret hver tiende daglige bar og skaleret til 15% annualiseret volatilitet med et 1.0x bruttoloft.

Verifikationsresultater

Verifikation mislykkedes (Lag 2 — syntetiske scenarier): Anvendte parametre: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance'] Kontrollér, at __init__ sætter alle attributter fra 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)

Resultatoversigt

CryptoLowVolAnomalySpotBasketLongOnl-7a915cf1a2

Resultatoversigt

Strategien testede en long-only Binance Spot-kurv, der holdt de fem coins med lavest volatilitet fra et univers af 25 coins. Selvom hypotesen rapporterede positive historiske resultater, mislykkedes verifikationen i alle syntetiske scenarier på grund af en Decimal/float TypeError, så strategien blev opgivet før backtesting eller optimering.

Resultatoversigt

Sørg for, at Decimal- og float-aritmetik håndteres konsistent inden syntetisk verifikation.

Resultatoversigt

Den blev opgivet efter tre iterationer, fordi Lag 2-verifikationen mislykkedes: alle seks syntetiske scenarier udløste en Decimal/float TypeError. Senere faser blev ikke nået.

Resultatoversigt

Den forsøgte at udnytte en lavvolatilitetsanomali inden for krypto ved at holde de fem navne med lavest realiseret volatilitet fra et fast Binance Spot-univers på 25 coins.

Resultatoversigt

Hypotesen rapporterede en netto Sharpe på 0.74, 13.4% annualiseret afkast, -33.6% maksimalt drawdown, 430 indgange og et gennemsnitligt afkast pr. handel på 1.37%. Der blev ikke registreret nogen pipeline-backtest eller optimeringsrapport.

Iteration History

Verifikation mislykkedes (Lag 4 — QA-gennemgang) [class=code_defect]: - [edge_concern] Sandbox-økonomien er sund og internt konsistent, så profitabilitet er NOT årsagen til denne fejl. avg_trade_return_pct 3.73% x avg_position_pct 8.25% x 95 trades = ~29% af egenkapitalen vs. total_return 32.07% — regnskabet afstemmer med egenkapitalkurven (ingen bogføringsfejl), og 3.73%/trade dækker 0.20% BINANCE_SPOT tur-retur med ~18x, hvor kommissioner kun udgør 2.64% af bruttoen. To ting analytikeren skal tage med videre: (1) den rapporterede Sharpe 0.547 er ikke internt konsistent med CAGR 19.26% på annualized_volatility 8.12% — den daglige MTM-serie bevægede sig kun på 580 af 2401 dage, mens porteføljen holder 5 spot-ben kontinuerligt fra ~nov-2022, så de risikojusterede tal (Sharpe, Sortino, vol, VaR, Calmar) er udvandede/sparsomme i forhold til det realiserede regnskab. Angiv symptomet, påstå ingen årsag. (2) regime-attribution viser allerede rolig +42.6% (Sharpe 1.40) vs. normal -4.1% og stresset -3.7%, dvs. low-vol-præmien her er et rolig-regime-fænomen i denne stikprøve — men disse tertiler er beregnet over et vindue, der overvejende er fladt (se det kritiske problem), så genlæs dem, efter vinduet er rettet, i stedet for at handle på dem nu. - [critical] UNIVERSE MAKES 58% OF THE BACKTEST WINDOW STRUCTURALLY UNTRADEABLE, CORRUPTING EVERY RISK METRIC. Basisskabelonens barriere for tværben-justering (base_template.py _maybe_process_primary + _sync_extra_iids) udskyder primærbaren, indtil EVERY samme-tidsramme ekstra ben har en bar på præcis det tidsstempel, og denne strategi kræver desuden en fuldstændig række i _row_for(). Jeg har verificeret første-bar-datoer i data/catalog for alle 25 ben: de bindende navne er APTUSDT.BINANCE_SPOT (første 1-DAY-bar 2022-10-20) og ICPUSDT.BINANCE_SPOT (2021-05-12). Primærinstrumentet BTCUSDT.BINANCE_SPOT starter 2017-08-18, og den fulde backtest angiver ingen startdato (backtest_agent._run_backtest sender kun `end`), så motoren kører 2017-08 -> 2026-09 (~9.1 år), mens porteføljen ikke kan placere sin første ordre før ~2022-11-10 (APT-notering + 21 justerede rækker opvarmning). ~5.25 af 9.1 år (58%) markeres som flade 0.00% dage på det daglige grid. Sandboxen demonstrerer allerede dette præcist: stressvinduerne covid_crash_2020, china_ban_2021, luna_collapse_2022 og rate_shock_2022 (jan-okt) returnerer alle præcis 0.0000%, mens ftx_collapse_2022 (starter 2022-11-06) er det første, der ikke er nul, med -8.20%. Konsekvenser, som hverken optimizeren eller analytikeren kan omgøre: (a) Fase -2's målfunktion er Sharpe beregnet på en serie, der overvejende er nuller — sandboxen rapporterer 0.547, mens samme porteføljes CAGR over dens ACTIVE-periode er 19.26%; (b) omtrent fem kalenderår vil rapportere præcis 0.00% og tælle som ikke-positive i forhold til gulvet for andel positive år; (c) hypotesens egne prærgistrerede påstande — Sharpe +0.74 over 2017-2026, 6 af 9 år positive, 'overlever BOTH fulde bear markets' (2018 -19%, 2022 -26%) — kan slet ikke produceres, fordi 2018 og de første ti måneder af 2022 ligger inden for det døde vindue; (d) de realiserede vol-regime-tertiler er beregnet over en serie, hvor flertallet er døde dage. Dette er en dimensionerings-/konfigurationsfejl med en oplagt løsning, ikke en udtalelse om edge'en: selve handelslogikken er korrekt (se noter). (linje 49) — løsning: Vælg et univers, hvis medlemmer alle eksisterer i det vindue, du har til hensigt at måle, og angiv i konfigurationsbegrundelsen, hvilket vindue det er. Verificerede katalog-første-bar-datoer for det nuværende 25: APT 2022-10-20, ICP 2021-05-12, derefter 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, derefter BCH 2019-11-29 / HBAR 2019-09-30 / DOGE 2019-07-06 / ALGO 2019-06-23 / ATOM 2019-04-30 / LINK 2019-01-17, derefter VET 2018-07-26 / ETC 2018-06-13 / TRX 2018-06-12 / XLM 2018-06-01 / XRP 2018-05-05 / ADA 2018-04-18, og BTC/ETH 2017-08-18, BNB 2017-11-07, - [warning] Købsdimensionering ved en rotation er begrænset af `available = get_account_equity() * cash_buffer`, læst AFTER exit- og trim-SELL-ordrerne er sendt på linjerne 279-298. I backtesten er dette korrekt, fordi NT's SimulatedExchange udfylder markedsordrer inden for samme motor-iteration, så USDT-saldoen allerede afspejler salgene. I paper/live er det ikke: markedsordrer ligger stille indtil næste tick, så ved en rotation, der sælger 2-3 navne for at finansiere 2-3 nye, vil strategien se kontanter fra før salget, skalere hvert underskud med `ratio < 1` og underimplementere. Fordi eksisterende positioner kun omdimensioneres, når de driver uden for +/-25%-tolerancebåndet, kan underskuddet vare ved indtil en senere rotation. Backtest/paper-divergens, ikke en backtest-korrekthedsfejl. (linje 309) — løsning: Enten beregn `available` som (kontanter + notionel værdi af de netop sendte exits/trims), eller udskyd rotationens købsben til næste bar, efter salgene er afviklet (en one-bar-deferred købskø nøglet på rebalanceringsperioden). Hvis det forbliver som det er, så sig det eksplicit i begrundelsen, så paper-paritetstjekket ikke opfatter divergensen som en fejl. - [warning] Enkeltbens-dataudfald standser hele porteføljen. `_row_for()` returnerer None, medmindre EVERY et af de 25 ben har en bar med præcis primærbarens tidsstempel, og basisskabelonens barriere blokerer uafhængigt primærbaren i samme situation. Én manglende daglig bar på et enkelt navn (indsamlingshul, børsstop) springer stille den dags række over, hvilket efterlader et hul i log-afkast-vinduet, der bruges til realiseret vol; et navn, der helt stopper med at publicere (afnotering), fryser strategien for evigt med åbne positioner. Adfærden er konservativ snarere end forkert, men den er usynlig — intet logger eller tæller de sprungne dage. (linje 88) — løsning: Tæl sprungne rækker (et `self._skipped_rows` int auto-persisteres af basisskabelonen), og log en advarsel, når et ben er fraværende i mere end ~2 på hinanden følgende primærbarer, så en afnotering fremstår som en diagnose i stedet for en stille flad portefølje.

Iteration History

Verifikation mislykkedes (Lag 4 — QA-gennemgang) [class=hypothesis_mismatch]: - [edge_concern] Smoke-backtesten er profitabel, men performance bruges ikke som en korrekthedsvurdering. - [critical] Hypotesen kræver et fast Binance Spot-univers med 25 coins, men implementeringen konfigurerer kun 14 instrumenter. At holde 5 navne udvælger derfor 5/14 i stedet for 5/25, hvilket ændrer tværsnitsstrategien væsentligt. (linje 45) — løsning: Genopret det nøjagtige univers med 25 navne i extra_instruments og extra_bar_types, kør derefter verifikation og backtesting igen. Alternativt kan hypotesen formelt revideres til varianten med 14 navne. - [critical] Hypotesen tillader en maksimal brutto-eksponering på 1.0x, men implementeringen sætter max_gross_exposure til 0.95 og fastlåser den ved 0.95. (linje 29) — løsning: Brug et maksimum på 1.0, eller ændr eksplicit hypotesen for at forhåndsregistrere loftet på 0.95.

Årsag til opgivelse

verification_loop: Verifikation mislykkedes (Lag 2 — syntetiske scenarier): Anvendte parametre: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance'] Kontrollér, at __init__ sætter alle attributter fra 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)
Strategirapport

Stratmill er et research- og papirhandelsværktøj, ikke finansiel rådgivning eller en mægler. Backtest- og papirresultater er hypotetiske. Handel indebærer risiko for tab.