CryptoLowVolAnomalySpotBasketLongOnly
Hypoteesit
Kryptovaluuttojen matalan volatiliteetin anomalia, vain pitkä valinta (ei lyhyttä jalkaa): Pidä hallussa 5 LOWEST-toteutuneen volatiliteetin nimeä kiinteästä 25-kolikon likvidistä spot-universumista, tasapaino (equal-weight), 10 päivän tasapainotus DAILY-tangoilla, salkku skaalattu 15% ennakoivaan (ex-ante) volatiliteettitavoitteeseen — puhdas OHLCV, ei porttia, ei täydentävää syötettä
Hypoteesit
LONG-ONLY, SELECTION-BASED (nimenomaisesti NOT dollarineutraali, NOT beetasuojattu, NO lyhyt positio) poikkileikkausstrategia kohteessa BINANCE_SPOT, jonka likvidi sijoitusuniversumi on FIXED ja käsittää 25 kohdetta. Joka 10. päiväpalkilla kolikot järjestetään niiden oman edeltävän 20 päivän toteutuneen volatiliteetin perusteella, ja 5 LOWEST pidetään yhtä suurilla painoilla; koko salkku skaalataan sitten yhdellä kertoimella min(1.0, 0.15 / mean_RV_of_the_5), jotta salkun tavoiteltu vuotuistettu volatiliteetti on ~15% eikä nimellisarvo koskaan ylitä arvoa 1.0x (ei velkavipua, käteistili). Strategiassa ei ole momentum-termiä, trendisuodatinta, markkinatilaporttia, täydentävää tietosyötettä eikä kynnysarvoparametria — toteutunut volatiliteetti on ENTIRE signaali, ja sen käyttötapa on RANK, ei päälle/pois-portti.
Mittasin tämän katalogin aineistolla ennen sen ehdottamista sen sijaan, että olisin vain väittänyt niin. Kun Nautiluksen kiinteän pisteen esitysmuotoiset palkit dekoodataan suoraan (BINANCE_SPOT päivätasolla, 25/25 kohdetta mukana, 2017-10-27 -> 2026-09-19, ~9 vuotta), yllä oleva konfiguraatio tuottaa Sharpen luvun +0.74 NET täydestä 0.20% spot-kaupan osto- ja myyntikierroksesta, vuotuistetun tuoton 13.4% volatiliteetilla 18.1%, suurimman arvonaleneman -33.6%, 430 position avausta ja keskimääräisen kauppakohtaisen tuoton 1.37% position nimellisarvosta. Kalenterivuosittain: 2018 -19%, 2019 +17%, 2020 +49%, 2021 +40%, 2022 -26%, 2023 +40%, 2024 +41%, 2025 +6%, 2026 -5% — 6 vuotta 9 vuodesta positiivisia, ja strategia selviää BOTH kokonaisesta karhumarkkinasta.
CRITICAL ROBUSTNESS EVIDENCE (tämä on toistettavuuden tarkistus, NOT korvaava positio — strategia käy kauppaa vain kohteella BINANCE_SPOT): sama järjestyssääntö ajettiin itsenäisesti BYBIT lineaarisilla ikuisilla futuureilla ja BINANCE USD-M ikuisilla futuureilla. Päivämääriltään yhtenäistetyllä 2022-2026 jaksolla näiden kahden kauppapaikan tulokset vastaavat toisiaan toiseen desimaaliin asti — pienimmän volatiliteetin Sharpen luku +0.58 (Bybit) vs. +0.57 (Binance), suurimman volatiliteetin +0.11 vs. +0.11, vuosituotto 31.0% vs. 30.4% — tasapainoisen vertailusalkun lukujen ollessa +0.25/+0.21. Sama vaikutus toistuu kolmen kauppapaikan riippumattomissa dataputkissa. Yhtenäistämättömällä jaksolla kauppapaikkojen tulokset näyttivät eroavan toisistaan (0.38 vs. 1.01); tämä johtui yksinomaan historiatietojen alkamisajankohdasta (Bybitin sijoitusuniversumi on epätäydellinen ennen ajankohtaa 2022), minkä eristin sen sijaan, että olisin raportoinut sen tuloksena.
Taloudellinen syy ja WHO PAYS: kyseessä on matalan volatiliteetin / lottovoittojen suosimisen anomalia (Bali-Cakici-Whitelaw; Frazzini-Pedersen), ja kryptomarkkinat ovat sen puhtain esiintymisympäristö. Velkavipua ja lottovoittoja tavoittelevien yksityissijoittajien toimeksiantovirta keskittyy kolikoihin, joiden toteutunut volatiliteetti on suuri — niiden hinnat nousevat ostojen myötä, koska ostajat maksavat suuren voiton CHANCE, eivät odotetusta tuotosta. Nämä ostajat ovat vastapuoli: he maksavat järjestelmällisesti liikaa volatiliteetista ja hyväksyvät heikot riskikorjatut tuotot. Mittaustulos on selvä ja muodostaa keskeisen falsifioitavissa olevan väitteen — ajanjaksolla 2022-2026 kohteet 5, joiden volatiliteetti oli HIGHEST, tuottivat vuotuistettuna ~9%, kun taas 5 LOWEST tuottivat ~31%, ja suuren volatiliteetin korin volatiliteetti oli noin kaksinkertainen. Preemio ei johdu hintatrendistä: varmistin, että edeltävään momentumiin perustuva järjestäminen tuottaa asianmukaisilla, päällekkäisyyttä sisältämättömillä jaksoilla erilaisen ja heikomman profiilin (t=+1.25) kuin volatiliteettiin perustuva järjestäminen (t=+3.30 raakana, +2.53 päivämäärän mukaan klusteroituna).
Hypoteesit
Palauttaa hypoteesin 25 instrumentin universumin ja 1.0:n maksimibruttoaltistuksen säilyttäen puhtaan OHLCV matalan volatiliteetin järjestysmekanismin.
Hypoteesit
verification_loop: Verifiointi epäonnistui (taso 2 — synteettiset skenaariot):
Käytetyt parametrit: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance']
Tarkista, että __init__ asettaa kaikki attribuutit komennolla 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)
Toteutus
Long-only Binance Spot -kori, jossa pidetään viittä matalimman toteutuneen volatiliteetin instrumenttia kiinteästä 25 kolikon universumista, tasapainotetaan uudelleen joka kymmenennen päiväbarin jälkeen ja skaalataan 15%:n annualisoituun volatiliteettiin 1.0x:n bruttorajoitteella.
Varmennuksen tulokset
Verifiointi epäonnistui (taso 2 — synteettiset skenaariot):
Käytetyt parametrit: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance']
Tarkista, että __init__ asettaa kaikki attribuutit komennolla 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)
Lopputuloksen yhteenveto
CryptoLowVolAnomalySpotBasketLongOnl-7a915cf1a2
Lopputuloksen yhteenveto
Strategiassa testattiin long-only Binance Spot -koria, jossa pidettiin viittä matalimman volatiliteetin kolikkoa 25 kolikon universumista. Vaikka hypoteesi raportoi positiivisia historiallisia tuloksia, verifiointi epäonnistui jokaisessa synteettisessä skenaariossa Decimal/float TypeError -virheen vuoksi, joten strategiasta luovuttiin ennen backtestausta tai optimointia.
Lopputuloksen yhteenveto
Varmista, että Decimal- ja float-aritmetiikka käsitellään johdonmukaisesti ennen synteettistä verifiointia.
Lopputuloksen yhteenveto
Se hylättiin kolmen iteraation jälkeen, koska tason 2 varmennus epäonnistui: kaikki kuusi synteettistä skenaariota aiheuttivat Decimal/float-tyyppivirheen (TypeError). Myöhempiin vaiheisiin ei päästy.
Lopputuloksen yhteenveto
Sen tarkoituksena oli hyödyntää kryptojen matalan volatiliteetin anomaliaa pitämällä viittä matalimman toteutuneen volatiliteetin instrumenttia kiinteästä 25 kolikon Binance Spot -universumista.
Lopputuloksen yhteenveto
Hypoteesi raportoi netto-Sharpen 0.74, 13.4%:n annualisoidun tuoton, -33.6%:n maksimilaskun, 430 sisääntuloa ja 1.37%:n keskimääräisen tuoton kauppaa kohden. Pipeline-backtestia tai optimointiraporttia ei tallennettu.
Iteration History
Vahvistus epäonnistui (kerros 4 — QA-tarkastus) [luokka=code_defect]:
- [edge_concern] Hiekkalaatikon talous on terve ja sisäisesti johdonmukainen, joten kannattavuus on NOT tämän epäonnistumisen syy. avg_trade_return_pct 3.73% x avg_position_pct 8.25% x 95 kauppaa = ~29% pääomasta vs total_return 32.07% — tilikirja täsmää pääomakäyrään (ei kirjanpitovirhettä), ja 3.73%/kauppa ylittää 0.20% BINANCE_SPOT edestakaisen kaupan kynnyksen noin 18x verran, kun komissiot ovat vain 2.64% bruttomäärästä. Kaksi asiaa, jotka analyytikon tulee ottaa huomioon jatkossa: (1) raportoitu Sharpe 0.547 ei ole sisäisesti johdonmukainen suhteessa arvoon CAGR 19.26% kohteessa annualized_volatility 8.12% — päivittäinen MTM-sarja liikkui vain 580/2401 päivänä, kun taas salkku pitää hallussaan 5 spot-jalkaa jatkuvasti noin marraskuusta -2022 lähtien, joten riskikorjatut luvut (Sharpe, Sortino, volatiliteetti, VaR, Calmar) ovat laimentuneita/harvoja suhteessa toteutuneeseen tilikirjaan. Kerro oire, älä väitä syytä. (2) regiimikohtainen attribuutio osoittaa jo rauhallisen regiimin +42.6% (Sharpe 1.40) verrattuna normaaliin -4.1% ja stressaantuneeseen -3.7%, eli matalan volatiliteetin preemio on tässä otoksessa rauhallisen regiimin ilmiö — mutta nämä tertiilit on laskettu ikkunasta, joka on pääosin tasainen (ks. kriittinen ongelma), joten tulkitse ne uudelleen vasta ikkunan korjaamisen jälkeen äläkä toimi niiden perusteella nyt.
- [critical] UNIVERSE MAKES 58% OF THE BACKTEST WINDOW STRUCTURALLY UNTRADEABLE, CORRUPTING EVERY RISK METRIC. Peruspohjan jalkojen välinen kohdistusesto (base_template.py _maybe_process_primary + _sync_extra_iids) lykkää ensisijaista tankoa, kunnes EVERY samalla aikavälillä olevalla lisäjalalla on tanko tarkalleen tuolla aikaleimalla, ja tämä strategia edellyttää lisäksi täydellistä riviä funktiossa _row_for(). Tarkistin ensimmäisten tankojen päivämäärät hakemistosta data/catalog kaikille 25 jalalle: sitovat nimet ovat APTUSDT.BINANCE_SPOT (ensimmäinen 1-DAY-tanko 2022-10-20) ja ICPUSDT.BINANCE_SPOT (2021-05-12). Ensisijainen BTCUSDT.BINANCE_SPOT alkaa 2017-08-18, eikä koko backtest välitä lainkaan alkamispäivää (backtest_agent._run_backtest lähettää vain `end`), joten moottori ajaa väliltä 2017-08 -> 2026-09 (~9.1 v) kun taas salkku ei voi asettaa ensimmäistä tilaustaan ennen kuin noin 2022-11-10 (APT-listaus + 21 kohdistettua lämmittelyriviä). ~5.25/9.1 vuodesta (58%) merkitään tasaisiksi 0.00% päivän ajalta päivittäisessä ruudukossa. Hiekkalaatikko osoittaa tämän jo tarkalleen: stressi-ikkunat covid_crash_2020, china_ban_2021, luna_collapse_2022 ja rate_shock_2022 (tammi-loka) palauttavat kaikki täsmälleen 0.0000%, kun taas ftx_collapse_2022 (alkaen 2022-11-06) on ensimmäinen nollasta poikkeava arvolla -8.20%. Seuraukset, joita optimoija tai analyytikko ei voi perua: (a) vaiheen -2 tavoitefunktio on Sharpe laskettuna sarjasta, joka on suurimmaksi osaksi nollia — hiekkalaatikko raportoi 0.547, kun taas saman salkun CAGR sen ACTIVE-jaksolla on 19.26%; (b) noin viisi kalenterivuotta raportoi täsmälleen 0.00% ja lasketaan ei-positiivisiksi positiivisten vuosien osuuden validiteettirajaa vastaan; (c) hypoteesin omat ennalta rekisteröidyt väitteet — Sharpe +0.74 yli 2017-2026, 6/9 vuodesta positiivisia, 'selviää BOTH täydestä karhumarkkinasta' (2018 -19%, 2022 -26%) — eivät voi toteutua lainkaan, koska 2018 ja 2022:n kymmenen ensimmäistä kuukautta osuvat kuolleen ikkunan sisään; (d) toteutuneen volatiliteetin regiimitertiilit lasketaan sarjasta, jonka enemmistö on kuolleita päiviä. Tämä on mitoitus-/konfiguraatiovirhe, jolla on ilmeinen korjaus, ei kannanotto edgeen: itse kaupankäyntilogiikka on oikein (ks. huomautukset). (rivi 49) — korjaus: valitse universumi, jonka kaikki jäsenet ovat olemassa koko mittaamasi ikkunan ajan, ja kerro konfiguraation perusteluissa, mikä tuo ikkuna on. Tarkistetut katalogin ensimmäisten tankojen päivämäärät nykyiselle 25:lle: APT 2022-10-20, ICP 2021-05-12, sitten 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, sitten BCH 2019-11-29 / HBAR 2019-09-30 / DOGE 2019-07-06 / ALGO 2019-06-23 / ATOM 2019-04-30 / LINK 2019-01-17, sitten VET 2018-07-26 / ETC 2018-06-13 / TRX 2018-06-12 / XLM 2018-06-01 / XRP 2018-05-05 / ADA 2018-04-18, ja BTC/ETH 2017-08-18, BNB 2017-11-07,
- [warning] Ostojen mitoitus rotaation yhteydessä on rajattu arvolla `available = get_account_equity() * cash_buffer`, luettuna AFTER; poistumisen ja trimmauksen SELL-toimeksiannot lähetetään riveillä 279-298. Backtestissä tämä on oikein, koska NT:n SimulatedExchange täyttää markkinatoimeksiannot saman moottori-iteraation sisällä, joten USDT-saldo heijastaa jo myynnit. Paperi-/livekaupankäynnissä näin ei ole: markkinatoimeksiannot jäävät odottamaan seuraavaan tickiin asti, joten rotaatiossa, jossa myydään 2-3 nimeä rahoittamaan 2-3 uutta nimeä, strategia näkee myyntiä edeltävän käteismäärän, skaalaa jokaisen vajeen kertoimella `ratio < 1` ja allokoi liian vähän pääomaa. Koska hallussa olevien nimien kokoa muutetaan vain, kun ne ajautuvat +/-25% toleranssikaistan ulkopuolelle, vaje voi säilyä myöhempään rotaatioon asti. Backtestin ja paperikaupankäynnin välinen ero, ei backtestin oikeellisuusvirhe. (rivi 309) — korjaus: laske `available` joko muodossa (käteinen + juuri lähetettyjen poistumisten/trimmausten nimellisarvo), tai lykkää rotaation ostojalka seuraavaan tankoon myyntien selvittyä (yhden tangon viiveellä toimiva ostojono, jota ohjaa tasapainotusjakso). Jos tilanne jätetään ennalleen, mainitse se nimenomaisesti perusteluissa, jotta paperikaupankäynnin vastaavuustarkistus ei tulkitse eroa virheeksi.
- [warning] Yhden jalan datakatkokset pysäyttävät koko salkun. `_row_for()` palauttaa arvon None, ellei EVERY yhdellä 25 jalasta ole tankoa, jolla on tarkalleen ensisijaisen tangon aikaleima, ja peruspohjan esto estää ensisijaisen tangon itsenäisesti samassa tilanteessa. Yksikin puuttuva päivätanko millä tahansa yksittäisellä nimellä (keräysaukko, pörssikatkos) ohittaa hiljaisesti kyseisen päivän rivin, jättäen aukon toteutuneen volatiliteetin laskennassa käytettyyn logaritmisten tuottojen ikkunaan; nimi, joka lakkaa julkaisemasta kokonaan (listauksen purku), jäädyttää strategian ikuisesti positioiden ollessa auki. Käyttäytyminen on konservatiivinen eikä virheellinen, mutta se on näkymätöntä — mikään ei kirjaa lokiin tai laske ohitettuja päiviä. (rivi 88) — korjaus: laske ohitetut rivit (peruspohja tallentaa `self._skipped_rows`-kokonaisluvun automaattisesti) ja kirjaa varoitus lokiin, kun jalka puuttuu useammasta kuin ~2 peräkkäisestä ensisijaisesta tangosta, jotta listauksen purku näkyy diagnostiikassa hiljaisen tasaisen salkun sijaan.
Iteration History
Varmennus epäonnistui (taso 4 — QA tarkastus) [class=hypothesis_mismatch]:
- [edge_concern] Alustava toimivuuden tarkistava takautuva testi on voitollinen, mutta tuottokehitystä ei käytetä oikeellisuuden arviointiperusteena.
- [kriittinen] Hypoteesi edellyttää kiinteää 25 kolikon Binance Spot -sijoitusuniversumia, mutta toteutuksessa määritetään vain 14 instrumenttia. Näin ollen 5 kohteen pitäminen valitsee 5/14 eikä 5/25, mikä muuttaa poikkileikkausstrategiaa olennaisesti. (rivi 45) — korjaus: Palauta täsmälleen 25 kohteen sijoitusuniversumi kohteisiin extra_instruments ja extra_bar_types ja suorita sitten varmennus ja takautuva testaus uudelleen. Vaihtoehtoisesti muuta hypoteesi muodollisesti 14 kohteen versioksi.
- [kriittinen] Hypoteesi sallii enintään 1.0x suuruisen bruttoaltistuksen, mutta toteutus asettaa parametrin max_gross_exposure arvoon 0.95 ja rajoittaa sen arvoon 0.95. (rivi 29) — korjaus: Käytä enimmäisarvoa 1.0 tai muuta hypoteesia nimenomaisesti siten, että 0.95 yläraja rekisteröidään etukäteen.
Hylkäyksen syy
verification_loop: Vahvistus epäonnistui (kerros 2 — synteettiset skenaariot):
Käytetyt parametrit: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance']
Tarkista, että __init__ asettaa kaikki attribuutit kohteesta self.parameters.get().
- steady_uptrend: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (tangon aikaleima: 1735692060000)
- steady_downtrend: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (tangon aikaleima: 1735692060000)
- flat_ranging: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (tangon aikaleima: 1735692060000)
- volatility_spike: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (tangon aikaleima: 1735692060000)
- zero_volume: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (tangon aikaleima: 1735692060000)
- price_gap: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float' (tangon aikaleima: 1735692060000)
Stratmill on tutkimus- ja paperikaupankäyntityökalu, ei sijoitusneuvontaa tai välittäjä. Takaisintestaus- ja paperikaupankäyntitulokset ovat hypoteettisia. Kaupankäyntiin liittyy tappion riski.