Praleisti ir pereiti prie turinio

Peržiūrėti originalą

CryptoLowVolAnomalySpotBasketLongOnly

Hipotezės

Kriptovaliutų žemo kintamumo anomalija, tik ilgos pozicijos atranka (be trumposios kojos): Laikyti 5 LOWEST-Realizuoto-Kintamumo pavadinimus iš fiksuotos 25-monetų likvidžios spot visatos, lygiais svoriais, 10-dienų perbalansavimas pagal DAILY barus, portfelis pritaikytas prie 15% ex-ante kintamumo tikslo — grynas OHLCV, be vartų, be papildomo srauto

Hipotezės

LONG-ONLY, SELECTION-BASED (aiškiai NOT dolerine prasme neutrali (dollar-neutral), NOT apsidraudusi nuo beta (beta-hedged), NO trumpoji pozicija) skerspjūvio (cross-sectional) strategija, taikoma BINANCE_SPOT FIXED 25 pavadinimų likvidžioje visatoje. Kas 10-ąjį dienos barą kiekviena moneta reitinguojama pagal jos pačios slenkantį 20 dienų realizuotą kintamumą ir laikoma 5 LOWEST lygiais svoriais; visas portfelis tuomet mastelinamas vienu koeficientu min(1.0, 0.15 / mean_RV_of_the_5), kad portfelis siektų ~15% metinio kintamumo ir niekada neviršytų 1.0x nominalios vertės (be sverto, grynųjų sąskaita). Nėra jokio momentumo nario, jokio tendencijos filtro, jokio režimo vartelio, jokio papildomo šaltinio ir jokio slenkstinio parametro — realizuotas kintamumas yra ENTIRE signalas ir jis naudojamas kaip RANK, o ne kaip įjungimo/išjungimo vartai. Tai išmatavau prieš siūlydamas, remdamasis katalogu, o ne tiesiog teigdamas. Dekoduojant Nautilus fiksuoto taško barus tiesiogiai (BINANCE_SPOT dienos, 25/25 pavadinimai pateikti, 2017-10-27 -> 2026-09-19, ~9 metai), aukščiau nurodyta konfigūracija grąžina Sharpe +0.74 NET viso 0.20% spot pirkimo-pardavimo ciklo, 13.4% metinę grąžą su 18.1% kintamumu, didžiausią nuosmukį -33.6%, 430 įėjimų ir vidutinę grąžą vienam sandoriui 1.37% pozicijos nominalios vertės. Kiekvienais kalendoriniais metais: 2018 -19%, 2019 +17%, 2020 +49%, 2021 +40%, 2022 -26%, 2023 +40%, 2024 +41%, 2025 +6%, 2026 -5% — 6 iš 9 metų teigiami, ir ji išgyvena BOTH pilnas „lokio“ rinkas (bear markets). CRITICAL ROBUSTNESS EVIDENCE (tai replikacijos patikra, NOT tarpinė (proxy) pozicija — strategija prekiauja tik BINANCE_SPOT): identiška reitingavimo taisyklė buvo nepriklausomai paleista BYBIT linijinėms bevardėms sutartims (perps) ir BINANCE USD-M bevardėms sutartims. Datomis suderintame 2022-2026 lange abi biržos sutampa iki antro skaičiaus po kablelio — mažiausio kintamumo Sharpe +0.58 (Bybit) prieš +0.57 (Binance), didžiausio kintamumo +0.11 prieš +0.11, metinė grąža 31.0% prieš 30.4% — palyginti su lygaus svorio +0.25/+0.21 etalonu (benchmark). Tas pats efektas atkartojamas trijose nepriklausomose biržų duomenų srautuose. Nesuderintame lange biržos atrodė nesutariančios (0.38 prieš 1.01); tai buvo grynai istorijos pradžios artefaktas (Bybit visata nepilna iki 2022), kurį izoliavau, o ne pateikiau kaip rezultatą. Ekonominė priežastis ir WHO PAYS: tai mažo kintamumo / loterijos pageidavimo (lottery-preference) anomalija (Bali-Cakici-Whitelaw; Frazzini-Pedersen), o kriptovaliutos yra grynoji jos buveinė. Didelio realizuoto kintamumo monetos yra ten, kur sutelkiamas sverto ir loterijos siekiantis mažmeninis srautas — jos superkamos, nes pirkėjai moka už didelio išmokėjimo CHANCE, o ne už tikėtiną grąžą. Tie pirkėjai yra sandorio šalis: jie sistemingai permoka už kintamumą ir sutinka su prasta rizikos koreguota grąža. Matavimas yra ryškus ir yra pagrindinis paneigiamas teiginys — per 2022-2026 5 HIGHEST kintamumo pavadinimai grąžino ~9% metinę grąžą, tuo tarpu 5 LOWEST grąžino ~31%, o didelio kintamumo krepšelis nešė maždaug dvigubai didesnį kintamumą. Priemoka nėra kainos tendencijos efektas: patikrinau, kad slenkančio momentumo reitingavimas duoda skirtingą ir silpnesnį profilį sąžininguose nesikertančiuose languose (t=+1.25) nei kintamumo reitingavimas (t=+3.30 neapdorotas, +2.53 pagal datą sugrupuotas).

Hipotezės

Atkuria hipotezės 25 pavadinimų visatą ir 1.0 didžiausią bendrą pozicijos dydį (gross exposure), tuo pačiu išlaikant grynąjį OHLCV mažo kintamumo reitingavimo mechanizmą.

Hipotezės

verification_loop: Patikrinimas nepavyko (Sluoksnis 2 — sintetiniai scenarijai): Naudoti parametrai: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance'] Patikrinkite, ar __init__ nustato visus atributus iš 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)

Įgyvendinimas

Tik ilgųjų pozicijų (long-only) Binance Spot krepšelis, laikantis penkis mažiausio realizuoto kintamumo instrumentus iš fiksuotos 25 monetų visatos, perbalansuojamas kas dešimt dienos barų ir mastelinamas iki 15% metinio kintamumo su 1.0x bendros pozicijos riba.

Patikros rezultatai

Patikrinimas nepavyko (Sluoksnis 2 — sintetiniai scenarijai): Naudoti parametrai: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance'] Patikrinkite, ar __init__ nustato visus atributus iš 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)

Rezultatų suvestinė

CryptoLowVolAnomalySpotBasketLongOnl-7a915cf1a2

Rezultatų suvestinė

Strategija testavo tik ilgųjų pozicijų (long-only) Binance Spot krepšelį, laikantį penkias mažiausio kintamumo monetas iš 25 monetų visatos. Nors hipotezė pranešė apie teigiamus istorinius rezultatus, patikrinimas nepavyko kiekviename sintetiniame scenarijuje dėl Decimal/float TypeError klaidos, todėl strategijos buvo atsisakyta prieš atliekant grįžtamąjį testavimą ar optimizavimą.

Rezultatų suvestinė

Užtikrinkite, kad Decimal ir float aritmetika būtų nuosekliai apdorojama prieš sintetinį patikrinimą.

Rezultatų suvestinė

Jos buvo atsisakyta po trijų iteracijų, nes Sluoksnio 2 patikrinimas nepavyko: visi šeši sintetiniai scenarijai sukėlė Decimal/float TypeError klaidą. Vėlesni etapai nebuvo pasiekti.

Rezultatų suvestinė

Ji bandė išnaudoti kriptovaliutų mažo kintamumo anomaliją, laikydama penkis mažiausio realizuoto kintamumo instrumentus iš fiksuotos 25 monetų Binance Spot visatos.

Rezultatų suvestinė

Hipotezė pranešė apie 0.74 grynąjį Sharpe rodiklį, 13.4% metinę grąžą, -33.6% didžiausią nuosmukį (maximum drawdown), 430 įėjimų ir 1.37% vidutinę grąžą vienam sandoriui. Jokia proceso (pipeline) grįžtamojo testavimo ar optimizavimo ataskaita nebuvo užfiksuota.

Iteration History

Patikra nepavyko (sluoksnis 4 — QA peržiūra) [klasė=code_defect]: - [edge_concern] Sandbox ekonomika yra sveika ir vidiniai nuosekli, todėl pelningumas NOT yra šio nepavykimo priežastis. avg_trade_return_pct 3.73% x avg_position_pct 8.25% x 95 sandoriai = ~29% nuosavo kapitalo, palyginti su total_return 32.07% — apskaitos knyga sutampa su nuosavo kapitalo kreive (jokio apskaitos defekto), o 3.73%/sandoriui viršija 0.20% BINANCE_SPOT abipusę kelionę maždaug 18x, komisiniams sudarant tik 2.64% bendrosios sumos. Dvi pastabos analitikui ateičiai: (1) pranešamas Sharpe 0.547 nėra vidiniai nuoseklus su CAGR 19.26% pagal annualized_volatility 8.12% — dienos MTM serija keitėsi tik 580 iš 2401 dienų, o portfelis nuolat laiko 5 spot pozicijas nuo ~-2022, todėl rizika koreguoti rodikliai (Sharpe, Sortino, vol, VaR, Calmar) yra praskiesti/reti, lyginant su realizuota apskaitos knyga. Nurodyti simptomą, neteigti priežasties. (2) režimo priskyrimas jau rodo ramų +42.6% (Sharpe 1.40), lyginant su normaliu -4.1% ir stresiniu -3.7%, t. y. žemo kintamumo premija čia yra ramaus režimo reiškinys šioje imtyje — tačiau šie tercilai apskaičiuoti per langą, kuris daugumoje yra plokščias (žr. kritinę problemą), todėl juos reikia iš naujo interpretuoti, kai langas bus ištaisytas, o ne veikti pagal juos dabar. - [kritinė] UNIVERSE MAKES 58% OF THE BACKTEST WINDOW STRUCTURALLY UNTRADEABLE, CORRUPTING EVERY RISK METRIC. Bazinio šablono kojų sinchronizavimo barjeras (base_template.py _maybe_process_primary + _sync_extra_iids) atideda pagrindinį barą tol, kol EVERY tos pačios laiko juostos papildoma koja neturi baro tiksliai tuo pačiu laiko žymeniu, o ši strategija papildomai reikalauja pilnos eilutės _row_for(). Patikrinau pirmųjų barų datas kataloge data/catalog visoms 25 kojoms: ribojantys pavadinimai yra APTUSDT.BINANCE_SPOT (pirmas 1-DAY baras 2022-10-20) ir ICPUSDT.BINANCE_SPOT (2021-05-12). Pagrindinė BTCUSDT.BINANCE_SPOT prasideda 2017-08-18, o pilnas backtest'as nesiunčia jokios pradžios datos (backtest_agent._run_backtest siunčia tik `end`), todėl variklis veikia 2017-08 -> 2026-09 (~9.1m.), nors portfelis negali atlikti pirmojo užsakymo iki ~2022-11-10 (APT listingavimas + 21 sinchronizuotų apšilimo eilučių). ~5.25 iš 9.1 metų (58%) pažymimi kaip plokščios 0.00% dienos dienos tinklelyje. Sandbox jau tai tiksliai parodo: streso langai covid_crash_2020, china_ban_2021, luna_collapse_2022 ir rate_shock_2022 (sausis-spalis) visi grąžina lygiai 0.0000%, o ftx_collapse_2022 (prasidedantis 2022-11-06) yra pirmas nenulinis, lygus -8.20%. Pasekmės, kurių nei optimizatorius, nei analitikas negali atšaukti: (a) -2 fazės tikslas yra Sharpe, apskaičiuotas pagal seriją, kurioje dauguma yra nuliai — sandbox rodo 0.547, o to paties portfelio CAGR per jo ACTIVE laikotarpį yra 19.26%; (b) maždaug penkeri kalendoriniai metai praneš lygiai 0.00% ir bus skaičiuojami kaip neigiami prieš teigiamų metų dalies galiojimo ribą; (c) pačios hipotezės iš anksto deklaruoti teiginiai — Sharpe +0.74 per 2017-2026, 6 iš 9 metų teigiami, „išgyvena BOTH pilnas lokio rinkas“ (2018 -19%, 2022 -26%) — apskritai negali būti pateikti, nes 2018 ir pirmieji dešimt 2022 mėnesių patenka į negyvą langą; (d) realizuoto kintamumo režimo tercilai apskaičiuoti pagal seriją, kurios dauguma yra negyvos dienos. Tai yra dydžio/konfigūracijos defektas su akivaizdžiu sprendimu, o ne teiginys apie edge'ą: pati prekybos logika yra teisinga (žr. pastabas). (eilutė 49) — sprendimas: Pasirinkti visatą, kurios visi nariai egzistuoja per matuojamą langą, ir konfigūracijos pagrindime nurodyti, koks tai langas. Patikrintos katalogo pirmųjų barų datos dabartinei 25: APT 2022-10-20, ICP 2021-05-12, tada 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, tada BCH 2019-11-29 / HBAR 2019-09-30 / DOGE 2019-07-06 / ALGO 2019-06-23 / ATOM 2019-04-30 / LINK 2019-01-17, tada VET 2018-07-26 / ETC 2018-06-13 / TRX 2018-06-12 / XLM 2018-06-01 / XRP 2018-05-05 / ADA 2018-04-18, ir BTC/ETH 2017-08-18, BNB 2017-11-07, - [įspėjimas] Pirkimo dydis rotacijos metu yra ribojamas `available = get_account_equity() * cash_buffer`, skaitomas AFTER išėjimo, o SELL sumažinimo užsakymai pateikiami eilutėse 279-298. Backtest'e tai yra teisinga, nes NT SimulatedExchange įvykdo rinkos užsakymus tos pačios variklio iteracijos metu, todėl USDT likutis jau atspindi pardavimus. Popieriniame/gyvame veikime taip nėra: rinkos užsakymai laukia iki kito tako, todėl rotacijos metu, kai parduodami 2-3 pavadinimai, kad būtų finansuojami 2-3 nauji, strategija matys iki pardavimo grynuosius pinigus, kiekvieną trūkumą padauginant iš `ratio < 1`, ir nepakankamai išdiegs kapitalą. Kadangi laikomi pavadinimai perskaičiuojami tik tada, kai nukrypsta už +/-25% tolerancijos juostos, trūkumas gali išlikti iki vėlesnės rotacijos. Backtest'o/popierinio veikimo neatitikimas, o ne backtest'o korektiškumo klaida. (eilutė 309) — sprendimas: Arba apskaičiuoti `available` kaip (grynieji + ką tik pateiktų išėjimo/sumažinimo sandorių nominali vertė), arba atidėti rotacijos pirkimo dalį iki kito baro po to, kai pardavimai atsiskaito (vieno baro atidėtas pirkimo eilė, susieta su perbalansavimo periodu). Jei paliekama kaip yra, tai reikia aiškiai nurodyti pagrindime, kad popierinio atitikimo patikra neinterpretuotų neatitikimo kaip defekto. - [įspėjimas] Vienos kojos duomenų sutrikimai sustabdo visą portfelį. `_row_for()` grąžina None, nebent EVERY viena iš 25 kojų turi barą su tiksliai pagrindinio baro laiko žymeniu, o bazinio šablono barjeras nepriklausomai blokuoja pagrindinį barą tokioje pačioje situacijoje. Vieno trūkstamo dienos baro bet kuriam vienam pavadinimui (rinkimo spraga, biržos sustabdymas) tyliai praleidžia tos dienos eilutę, paliekant spragą log-grąžos lange, naudojamame realizuotam kintamumui; pavadinimas, kuris visiškai nustoja skelbti duomenis (delistingas), amžinai užšaldo strategiją su atviromis pozicijomis. Elgesys yra konservatyvus, o ne klaidingas, tačiau jis yra nematomas — niekas neregistruoja ir neskaičiuoja praleistų dienų. (eilutė 88) — sprendimas: Skaičiuoti praleistas eilutes (`self._skipped_rows` int automatiškai išsaugomas bazinio šablono) ir registruoti įspėjimą, kai koja nebūna daugiau nei ~2 iš eilės einančius pagrindinius barus, kad delistingas pasirodytų kaip diagnostika, o ne tylus plokščias portfelis.

Iteration History

Patikrinimas nepavyko (Sluoksnis 4 — QA peržiūra) [klasė=hypothesis_mismatch]: - [edge_concern] Dūminis (smoke) grįžtamasis testavimas yra pelningas, tačiau rezultatyvumas nėra naudojamas kaip teisingumo vertinimas. - [kritiška] Hipotezė reikalauja fiksuotos 25 monetų Binance Spot visatos, tačiau implementacija konfigūruoja tik 14 instrumentus. Todėl laikant 5 pavadinimus, pasirenkama 5/14, o ne 5/25, tai iš esmės pakeičia skerspjūvio strategiją. (eilutė 45) — pataisymas: Atkurti tikslią 25 pavadinimų visatą extra_instruments ir extra_bar_types, tada iš naujo paleisti patikrinimą ir grįžtamąjį testavimą. Alternatyviai, formaliai pakeisti hipotezę į 14 pavadinimų variantą. - [kritiška] Hipotezė leidžia maksimalų bendrą pozicijos dydį 1.0x, tačiau implementacija nustato max_gross_exposure į 0.95 ir apriboja jį ties 0.95. (eilutė 29) — pataisymas: Naudoti 1.0 maksimumą arba aiškiai pakeisti hipotezę, kad iš anksto užregistruotų 0.95 ribą.

Atmetimo priežastis

verification_loop: Patikra nepavyko (sluoksnis 2 — sintetiniai scenarijai): Naudoti parametrai: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance'] Patikrinkite, ar __init__ nustato visus atributus iš self.parameters.get(). - steady_uptrend: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (baro laiko žymuo: 1735692060000) - steady_downtrend: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (baro laiko žymuo: 1735692060000) - flat_ranging: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (baro laiko žymuo: 1735692060000) - volatility_spike: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (baro laiko žymuo: 1735692060000) - zero_volume: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (baro laiko žymuo: 1735692060000) - price_gap: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (baro laiko žymuo: 1735692060000)
Strategijos ataskaita

„Stratmill“ yra tyrimų ir popierinės prekybos įrankis, o ne finansų konsultantas ar brokeris. Testavimo ir popierinės prekybos rezultatai yra hipotetiniai. Prekyba susijusi su nuostolio rizika.