Přeskočit na obsah

Zobrazit originál

CryptoLowVolAnomalySpotBasketLongOnly

Hypotézy

Kryptoměnová anomálie nízké volatility, výběr pouze na dlouhé straně (bez short nohy): Držte 5 názvů s LOWEST realizovanou volatilitou z fixního likvidního spotového univerza 25 mincí, stejná váha, rebalancování každých 10 dnů na barech DAILY, kniha škálovaná na ex-ante cíl volatility 15% — čisté OHLCV, žádná brána, žádný doplňkový feed

Hypotézy

Průřezová (cross-sectional) strategie typu LONG-ONLY, SELECTION-BASED (výslovně NOT dolarově neutrální, NOT zajištěná vůči betě, NO krátká noha) na BINANCE_SPOT napříč FIXED likvidním univerzem 25 názvů. Každou 10. denní svíčku seřaďte každou minci podle vlastní klouzavé realizované volatility za 20 dní a držte 5 LOWEST rovnoměrně vážené; celé portfolio je poté škálováno jediným faktorem min(1.0, 0.15 / mean_RV_of_the_5), takže portfolio cílí na ~15% roční volatility a nikdy nepřekročí nominál 1.0x (bez páky, hotovostní účet). Neobsahuje žádný momentum člen, žádný trendový filtr, žádnou bránu podle režimu, žádný doplňkový zdroj dat a žádný prahový parametr — realizovaná volatilita je ENTIRE signál a používá se jako RANK, nikoli jako zapínací/vypínací brána. Toto jsem změřil před navržením, na katalogu, nikoli pouze tvrdil. Přímým dekódováním svíček Nautilus s pevnou desetinnou čárkou (BINANCE_SPOT denně, přítomno 25/25 názvů, 2017-10-27 -> 2026-09-19, ~9 let), výše uvedená konfigurace vrací Sharpeho ratio +0.74 NET plného spotového round-tripu 0.20%, roční výnos 13.4% při volatilitě 18.1%, maximální propad -33.6%, 430 vstupů a průměrný výnos na obchod 1.37% nominálu pozice. Podle kalendářních let: 2018 -19%, 2019 +17%, 2020 +49%, 2021 +40%, 2022 -26%, 2023 +40%, 2024 +41%, 2025 +6%, 2026 -5% — 6 z 9 let pozitivních, a přežije BOTH plné medvědí trhy. CRITICAL ROBUSTNESS EVIDENCE (jedná se o kontrolu replikace, NOT proxy nohu — strategie obchoduje pouze BINANCE_SPOT): identické pravidlo řazení bylo spuštěno nezávisle na lineárních perpetuálech BYBIT a perpetuálech BINANCE USD-M. V datově sladěném okně 2022-2026 se obě burzy shodují na druhé desetinné místo — Sharpeho ratio nejnižší volatility +0.58 (Bybit) vs +0.57 (Binance), nejvyšší volatility +0.11 vs +0.11, roční výnos 31.0% vs 30.4% — oproti rovnoměrně váženému benchmarku +0.25/+0.21. Stejný efekt se reprodukuje napříč třemi nezávislými pipeline dat z jednotlivých burz. V nesladěném okně se burzy zdánlivě lišily (0.38 vs 1.01); to bylo čistě artefaktem počátku historie (univerzum Bybitu je před 2022 neúplné), což jsem izoloval, místo abych to uvedl jako výsledek. Ekonomická příčina a WHO PAYS: jde o anomálii nízké volatility / preference loterie (Bali-Cakici-Whitelaw; Frazzini-Pedersen), a kryptoměny jsou jejím nejčistším prostředím. Mince s vysokou realizovanou volatilitou jsou místem, kde se koncentruje maloobchodní tok vyhledávající páku a loterii — jsou nadhodnocené, protože kupující platí za CHANCE vysoké výplaty, nikoli za očekávaný výnos. Tito kupující jsou protistranou: systematicky přeplácejí za volatilitu a přijímají špatné riziko-vážené výnosy. Měření je jasné a je hlavním falzifikovatelným tvrzením — za 2022-2026 vrátily 5 HIGHEST názvy s nejnižší volatilitou ~9% ročně, zatímco 5 LOWEST vrátily ~31%, přičemž koš s vysokou volatilitou nesl přibližně dvojnásobnou volatilitu. Prémie není efektem cenového trendu: ověřil jsem, že řazení podle klouzavého momenta produkuje odlišný a slabší profil na poctivých nepřekrývajících se oknech (t=+1.25) než řazení podle volatility (t=+3.30 surové, +2.53 datově shlukované).

Hypotézy

Obnovuje univerzum 25 názvů hypotézy a maximální hrubou expozici 1.0 při zachování čistého OHLCV mechanismu řazení podle nízké volatility.

Hypotézy

verification_loop: Ověření selhalo (Vrstva 2 — syntetické scénáře): Použité parametry: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance'] Zkontrolujte, že __init__ nastavuje všechny atributy ze 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)

Implementace

Pouze dlouhý (long-only) spotový koš na Binance držící pět názvů s nejnižší realizovanou volatilitou z pevného univerza 25 mincí, rebalancovaný každých deset denních svíček a škálovaný na roční volatilitu 15% s hrubým limitem expozice 1.0x.

Výsledky ověření

Ověření selhalo (Vrstva 2 — syntetické scénáře): Použité parametry: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance'] Zkontrolujte, že __init__ nastavuje všechny atributy ze 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)

Souhrn výsledků

CryptoLowVolAnomalySpotBasketLongOnl-7a915cf1a2

Souhrn výsledků

Strategie testovala pouze dlouhý (long-only) spotový koš na Binance držící pět mincí s nejnižší volatilitou z univerza 25 mincí. Ačkoli hypotéza vykazovala pozitivní historické výsledky, ověření selhalo ve všech syntetických scénářích kvůli chybě TypeError typu Decimal/float, a strategie tak byla opuštěna ještě před backtestingem nebo optimalizací.

Souhrn výsledků

Zajistěte konzistentní zacházení s aritmetikou typu Decimal a float před syntetickým ověřením.

Souhrn výsledků

Byla opuštěna po třech iteracích, protože ověření ve Vrstvě 2 selhalo: všech šest syntetických scénářů vyvolalo chybu TypeError typu Decimal/float. Pozdější fáze nebyly dosaženy.

Souhrn výsledků

Snažila se využít kryptoměnovou anomálii nízké volatility tím, že držela pět názvů s nejnižší realizovanou volatilitou z pevného univerza 25 mincí na Binance Spot.

Souhrn výsledků

Hypotéza vykázala čisté Sharpeho ratio 0.74, roční výnos 13.4%, maximální propad -33.6%, 430 vstupů a průměrný výnos na obchod 1.37%. Nebyl zaznamenán žádný backtest ani zpráva o optimalizaci v rámci pipeline.

Iteration History

Ověření selhalo (Vrstva 4 — kontrola QA) [třída=code_defect]: - [edge_concern] Ekonomika sandboxu je zdravá a vnitřně konzistentní, takže ziskovost NOT důvodem tohoto selhání. avg_trade_return_pct 3.73% x avg_position_pct 8.25% x 95 obchodů = ~29% kapitálu vs total_return 32.07% — účetní kniha se shoduje s křivkou kapitálu (žádná účetní chyba) a 3.73%/obchod pokrývá zpáteční cestu 0.20% BINANCE_SPOT o ~18x s provizemi ve výši pouze 2.64% z hrubého zisku. Dvě věci, které by si měl analytik odnést: (1) uváděné Sharpe 0.547 není vnitřně konzistentní s CAGR 19.26% na annualized_volatility 8.12% — denní řada MTM se pohnula jen 580 z 2401 dnů, zatímco kniha drží 5 spotové nohy nepřetržitě od ~listopadu -2022, takže rizikově očištěná čísla (Sharpe, Sortino, volatilita, VaR, Calmar) jsou zředěná/řídká vzhledem k realizované účetní knize. Uveďte příznak, netvrďte příčinu. (2) atribuce podle režimu už ukazuje klidný +42.6% (Sharpe 1.40) vs. normální -4.1% a stresovaný -3.7%, tj. prémie za nízkou volatilitu je zde jevem klidného režimu v tomto vzorku — ale tyto tercily jsou počítány za okno, které je z většiny ploché (viz kritický problém), takže je znovu vyhodnoťte až po opravě okna, nikoli podle nich jednat nyní. - [critical] UNIVERSE MAKES 58% OF THE BACKTEST WINDOW STRUCTURALLY UNTRADEABLE, CORRUPTING EVERY RISK METRIC. Bariéra zarovnání napříč nohami v základní šabloně (base_template.py _maybe_process_primary + _sync_extra_iids) odkládá primární bar, dokud EVERY doplňková noha se stejným časovým rámcem nemá bar přesně v daném časovém razítku, a tato strategie navíc vyžaduje kompletní řádek v _row_for(). Ověřil jsem data prvních barů v data/catalog pro všech 25 nohou: omezujícími názvy jsou APTUSDT.BINANCE_SPOT (první 1-DAY bar 2022-10-20) a ICPUSDT.BINANCE_SPOT (2021-05-12). Primární BTCUSDT.BINANCE_SPOT začíná 2017-08-18 a úplný backtest nepředává žádné počáteční datum (backtest_agent._run_backtest posílá pouze `end`), takže engine běží 2017-08 -> 2026-09 (~9.1 let), zatímco kniha nemůže zadat svůj první příkaz dříve než ~2022-11-10 (APT listing + 21 zarovnaných řádků zahřívání). ~5.25 z 9.1 let (58%) je na denní mřížce označeno jako ploché 0.00% dny. Sandbox to přesně dokládá: stresová okna covid_crash_2020, china_ban_2021, luna_collapse_2022 a rate_shock_2022 (leden–říjen) všechna vrací přesně 0.0000%, zatímco ftx_collapse_2022 (začínající 2022-11-06) je první nenulové s hodnotou -8.20%. Důsledky, z nichž žádný nemůže optimalizátor ani analytik zvrátit: (a) cílem fáze -2 je Sharpe počítané z řady, která je z většiny nulová — sandbox uvádí 0.547, zatímco CAGR stejné knihy za její rozsah ACTIVE je 19.26%; (b) zhruba pět kalendářních let bude vykazovat přesně 0.00% a bude počítáno jako nepozitivní vůči minimální hranici platnosti podílu pozitivních let; (c) vlastní předem registrovaná tvrzení hypotézy — Sharpe +0.74 za 2017-2026, 6 z 9 let pozitivních, „přežije BOTH plné medvědí trhy“ (2018 -19%, 2022 -26%) — nelze vůbec doložit, protože 2018 a prvních deset měsíců 2022 leží uvnitř mrtvého okna; (d) tercily režimu realizované volatility jsou počítány z řady, jejíž většinu tvoří mrtvé dny. Jde o chybu ve velikosti pozic/konfiguraci se zjevnou opravou, nikoli o výpověď o hraně (edge): samotná obchodní logika je správná (viz poznámky). (řádek 49) — oprava: Zvolte univerzum, jehož všichni členové existují po celé okno, které chcete měřit, a v odůvodnění konfigurace uveďte, o jaké okno se jedná. Ověřená data prvních barů katalogu pro aktuální 25: APT 2022-10-20, ICP 2021-05-12, poté 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, poté BCH 2019-11-29 / HBAR 2019-09-30 / DOGE 2019-07-06 / ALGO 2019-06-23 / ATOM 2019-04-30 / LINK 2019-01-17, poté VET 2018-07-26 / ETC 2018-06-13 / TRX 2018-06-12 / XLM 2018-06-01 / XRP 2018-05-05 / ADA 2018-04-18, a BTC/ETH 2017-08-18, BNB 2017-11-07, - [warning] Velikost nákupu při rotaci je omezena `available = get_account_equity() * cash_buffer`, čteno AFTER výstupní a zmenšující SELL příkazy jsou zadány na řádcích 279-298. V backtestu je to správně, protože SimulatedExchange v NT vyplňuje tržní příkazy v rámci stejné iterace enginu, takže zůstatek USDT už odráží prodeje. V paper/live obchodování tomu tak není: tržní příkazy čekají do dalšího ticku, takže při rotaci, která prodává 2-3 názvů na financování 2-3 nových, strategie uvidí hotovost před prodejem, škáluje každý deficit o `ratio < 1` a nedostatečně nasadí kapitál. Protože držené názvy se přeškálovávají pouze tehdy, když se vychýlí mimo toleranční pásmo +/-25%, může nedostatek přetrvávat až do další rotace. Odchylka mezi backtestem a paper obchodováním, nikoli chyba správnosti backtestu. (řádek 309) — oprava: Buď vypočítejte `available` jako (hotovost + nominální hodnota právě zadaných výstupů/zmenšení), nebo odložte nákupní nohu rotace na další bar po vypořádání prodejů (frontu nákupů odloženou o jeden bar, klíčovanou podle období rebalancování). Pokud to zůstane beze změny, uveďte to výslovně v odůvodnění, aby kontrola parity s paper obchodováním nečetla tuto odchylku jako chybu. - [warning] Výpadky dat u jedné nohy zastaví celou knihu. `_row_for()` vrací None, pokud EVERY jedna z 25 noh nemá bar nesoucí přesně časové razítko primárního baru, a bariéra základní šablony nezávisle blokuje primární bar ve stejné situaci. Jeden chybějící denní bar u kteréhokoli jednotlivého názvu (mezera ve sběru dat, zastavení burzy) tiše přeskočí řádek daného dne a zanechá díru v okně log-výnosů použitém pro realizovanou volatilitu; název, který zcela přestane publikovat data (delisting), navždy zmrazí strategii s otevřenými pozicemi. Toto chování je spíše konzervativní než chybné, ale je neviditelné — nic nezaznamenává ani nepočítá přeskočené dny. (řádek 88) — oprava: Počítejte přeskočené řádky (celé číslo `self._skipped_rows` je automaticky perzistováno základní šablonou) a zaznamenávejte varování, když noha chybí po více než ~2 po sobě jdoucích primárních barů, aby se delisting projevil jako diagnostika místo tiché ploché knihy.

Iteration History

Ověření selhalo (Vrstva 4 — kontrola QA) [třída=hypothesis_mismatch]: - [edge_concern] Smoke backtest je ziskový, ale výkonnost se nepoužívá jako verdikt správnosti. - [critical] Hypotéza vyžaduje pevné univerzum 25 mincí na Binance Spot, ale implementace konfiguruje pouze 14 nástrojů. Držení 5 názvů proto vybírá 5/14 namísto 5/25, čímž podstatně mění průřezovou strategii. (řádek 45) — oprava: Obnovte přesné univerzum 25 názvů v extra_instruments a extra_bar_types, poté znovu spusťte ověření a backtesting. Alternativně formálně upravte hypotézu na variantu s 14 názvy. - [critical] Hypotéza povoluje maximální hrubou expozici 1.0x, ale implementace nastavuje max_gross_exposure na 0.95 a ořezává ji na 0.95. (řádek 29) — oprava: Použijte maximum 1.0 nebo výslovně upravte hypotézu tak, aby předem registrovala limit 0.95.

Důvod zavržení

verification_loop: Ověření selhalo (Vrstva 2 — syntetické scénáře): Použité parametry: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance'] Zkontrolujte, že __init__ nastavuje všechny atributy z self.parameters.get(). - steady_uptrend: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (časové razítko baru: 1735692060000) - steady_downtrend: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (časové razítko baru: 1735692060000) - flat_ranging: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (časové razítko baru: 1735692060000) - volatility_spike: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (časové razítko baru: 1735692060000) - zero_volume: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (časové razítko baru: 1735692060000) - price_gap: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (časové razítko baru: 1735692060000)
Zpráva o strategii

Stratmill je nástroj pro výzkum a paper trading, nikoli finanční poradenství ani broker. Výsledky backtestů a paper tradingu jsou hypotetické. Obchodování je spojeno s rizikem ztráty.