Lumaktaw papunta sa nilalaman

Tingnan ang orihinal

CryptoLowVolAnomalySpotBasketLongOnly

Mga Hypothesis

Anomalya ng Mababang Volatility sa Crypto, Pagpiling Long-Only (Walang Short Leg): Hawakan ang 5 Instrumentong may LOWEST-Realized-Volatility mula sa isang Nakapirming Liquid Spot Universe na may 25 Coin, Pantay ang Timbang, Rebalance Tuwing 10 Araw sa mga DAILY Bar, Portfolio na Iniakma sa isang 15% Ex-Ante Vol Target — Purong OHLCV, Walang Gate, Walang Karagdagang Feed

Mga Hypothesis

Isang LONG-ONLY, SELECTION-BASED (tahasang NOT dollar-neutral, NOT beta-hedged, NO short leg) na cross-sectional na estratehiya sa BINANCE_SPOT sa loob ng isang FIXED na likidong uniberso na may 25 asset. Sa bawat ika-10 na daily bar, iranggo ang bawat coin ayon sa sarili nitong realized volatility sa nakaraang 20 araw at hawakan ang 5 LOWEST nang may pantay na timbang; pagkatapos, iaakma ang laki ng buong portfolio gamit ang iisang factor na min(1.0, 0.15 / mean_RV_of_the_5) upang magtarget ang portfolio ng ~15% na annualized volatility at hindi kailanman lumampas sa 1.0x na notional (walang leverage, cash account). Walang momentum term, walang trend filter, walang regime gate, walang pandagdag na feed, at walang threshold parameter — ang realized volatility ang ENTIRE signal at ginagamit ito bilang isang RANK, hindi bilang isang on/off gate. Sinukat ko ito sa catalog bago ito iminungkahi, sa halip na basta igiit ito. Sa direktang pag-decode ng mga Nautilus fixed-point bar (BINANCE_SPOT daily, may 25/25 asset, 2017-10-27 -> 2026-09-19, ~9 taon), nagbibigay ang configuration sa itaas ng Sharpe na +0.74 NET ng buong 0.20% spot round-trip, 13.4% na annualized return sa 18.1% na volatility, maximum drawdown na -33.6%, 430 entry, at average na return sa bawat trade na 1.37% ng notional ng posisyon. Bawat taon sa kalendaryo: 2018 -19%, 2019 +17%, 2020 +49%, 2021 +40%, 2022 -26%, 2023 +40%, 2024 +41%, 2025 +6%, 2026 -5% — positibo ang 6 sa 9 taon, at nakaliligtas ito sa BOTH buong bear market. CRITICAL ROBUSTNESS EVIDENCE (ito ay isang pagsusuri ng replikasyon, NOT isang proxy leg — BINANCE_SPOT lamang ang kinakalakal ng estratehiya): hiwalay na pinatakbo ang parehong tuntunin sa pagraranggo sa BYBIT linear perps at BINANCE USD-M perps. Sa isang 2022-2026 na window na magkatugma ang mga petsa, magkatugma ang dalawang venue hanggang sa ikalawang decimal — Sharpe ng pinakamababang volatility na +0.58 (Bybit) kumpara sa +0.57 (Binance), pinakamataas na volatility na +0.11 kumpara sa +0.11, taunang return na 31.0% kumpara sa 30.4% — laban sa benchmark na may pantay na timbang na +0.25/+0.21. Nauulit ang parehong epekto sa tatlong magkakahiwalay na pipeline ng data ng venue. Sa isang window na hindi magkatugma ang mga petsa, tila hindi magkatugma ang mga venue (0.38 kumpara sa 1.01); bunga lamang iyon ng pagkakaiba sa simula ng historikal na data (hindi kumpleto ang uniberso ng Bybit bago ang 2022), na ibinukod ko sa halip na iulat bilang resulta. Sanhing pang-ekonomiya at WHO PAYS: ito ang anomalya ng mababang volatility / pagkiling sa loterya (Bali-Cakici-Whitelaw; Frazzini-Pedersen), at ang crypto ang pinakadalisay nitong kapaligiran. Sa mga coin na may mataas na realized volatility nakasentro ang daloy ng retail trading na naghahangad ng leverage at mala-loteryang kita — naitutulak paitaas ang presyo ng mga ito dahil binabayaran ng mga mamimili ang CHANCE ng malaking kita, hindi ang inaasahang return. Ang mga mamimiling iyon ang counterparty: sistematiko silang nagbabayad nang sobra para sa volatility at tumatanggap ng mababang return na iniakma sa panganib. Malinaw ang sukat at ito ang pangunahing pahayag na maaaring mapabulaanan — sa loob ng 2022-2026, ang 5 asset na may HIGHEST na volatility ay nagbigay ng ~9% na annualized return samantalang ang 5 LOWEST ay nagbigay ng ~31%, habang ang basket na may mataas na volatility ay may humigit-kumulang dobleng volatility. Ang premium ay hindi epekto ng trend ng presyo: napatunayan kong ang pagraranggo ayon sa momentum sa nakaraang panahon ay lumilikha ng ibang at mas mahinang profile sa mga tapat at hindi nagsasapawang window (t=+1.25) kaysa sa pagraranggo ayon sa volatility (t=+3.30 raw, +2.53 na naka-cluster ayon sa petsa).

Mga Hypothesis

Ibinabalik ang 25-name universe ng hypothesis at 1.0 maximum gross exposure habang pinananatili ang purong OHLCV low-volatility ranking mechanism.

Mga Hypothesis

verification_loop: Nabigo ang beripikasyon (Layer 2 — synthetic scenarios): Mga ginamit na parameter: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance'] Tiyaking itinatakda ng __init__ ang lahat ng attribute mula sa 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)

Implementasyon

Long-only na Binance Spot basket na may hawak ng limang pangalan na may pinakamababang na-realize na volatility mula sa isang nakapirming uniberso ng 25 coin, nire-rebalance bawat sampung daily bar at sinusukat sa 15% annualized volatility na may 1.0x gross cap.

Mga Resulta ng Beripikasyon

Nabigo ang beripikasyon (Layer 2 — synthetic scenarios): Mga ginamit na parameter: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance'] Tiyaking itinatakda ng __init__ ang lahat ng attribute mula sa 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)

Buod ng Resulta

CryptoLowVolAnomalySpotBasketLongOnl-7a915cf1a2

Buod ng Resulta

Sinubukan ng estratehiya ang isang long-only na Binance Spot basket na may hawak ng limang coin na may pinakamababang volatility mula sa isang uniberso ng 25 coin. Bagama't nag-ulat ang hypothesis ng positibong makasaysayang resulta, nabigo ang beripikasyon sa bawat synthetic scenario dahil sa isang Decimal/float TypeError, kaya iniwan ang estratehiya bago ang backtesting o optimization.

Buod ng Resulta

Tiyaking pare-parehong hinahawakan ang Decimal at float arithmetic bago ang synthetic verification.

Buod ng Resulta

Iniwan ito matapos ang tatlong iterasyon dahil nabigo ang beripikasyon ng Layer 2: lahat ng anim na sintetikong senaryo ay naglabas ng Decimal/float TypeError. Hindi naabot ang mga sumunod na yugto.

Buod ng Resulta

Sinubukan nitong samantalahin ang anomalya ng mababang volatility sa crypto sa pamamagitan ng paghawak sa limang coin na may pinakamababang realized volatility mula sa isang nakapirming uniberso ng 25 coin sa Binance Spot.

Buod ng Resulta

Iniulat ng hypothesis ang net Sharpe na 0.74, 13.4% annualized return, -33.6% maximum drawdown, 430 entries, at 1.37% mean per-trade return. Walang naitalang pipeline backtest o optimization report.

Iteration History

Nabigo ang beripikasyon (Layer 4 — pagsusuri ng QA) [class=code_defect]: - [edge_concern] Maayos at magkakatugma ang mga ekonomikong sukatan ng sandbox, kaya ang kakayahang kumita ay NOT ang dahilan ng pagkabigong ito. avg_trade_return_pct 3.73% x avg_position_pct 8.25% x 95 trade = ~29% ng equity kumpara sa total_return 32.07% — tumutugma ang ledger sa equity curve (walang depekto sa accounting), at ang 3.73%/trade ay lumalampas sa 0.20% BINANCE_SPOT na round trip nang ~18x, na ang mga komisyon ay 2.64% lamang ng gross. Dalawang bagay na dapat isaalang-alang ng analyst sa pagpapatuloy: (1) ang iniulat na Sharpe 0.547 ay hindi tugma sa CAGR 19.26% sa annualized_volatility 8.12% — ang pang-araw-araw na serye ng MTM ay gumalaw sa 580 lamang sa 2401 araw samantalang tuloy-tuloy na hawak ng portfolio ang 5 spot leg mula ~Nob-2022, kaya ang mga bilang na iniakma sa panganib (Sharpe, Sortino, vol, VaR, Calmar) ay nababawasan ang bisa/kakaunti ang aktibong obserbasyon kumpara sa ledger ng mga aktuwal na resulta. Ilahad ang sintomas, huwag maggiit ng sanhi. (2) ipinapakita na ng attribution ayon sa regime ang kalmado na +42.6% (Sharpe 1.40) kumpara sa normal na -4.1% at stressed na -3.7%, ibig sabihin, ang low-vol premium dito ay isang penomenon ng kalmadong regime sa sample na ito — ngunit ang mga tercile na iyon ay kinukuwenta sa isang panahong karamihan ay flat (tingnan ang kritikal na isyu), kaya muling suriin ang mga ito matapos maayos ang panahon ng pagsukat sa halip na kumilos batay sa mga ito ngayon. - [critical] UNIVERSE MAKES 58% OF THE BACKTEST WINDOW STRUCTURALLY UNTRADEABLE, CORRUPTING EVERY RISK METRIC. Ipinagpapaliban ng cross-leg alignment barrier ng base template (base_template.py _maybe_process_primary + _sync_extra_iids) ang pangunahing bar hanggang ang EVERY karagdagang leg sa parehong timeframe ay magkaroon ng bar sa eksaktong timestamp na iyon, at nangangailangan din ang estratehiyang ito ng kumpletong row sa _row_for(). Bineripika ko ang mga petsa ng unang bar sa data/catalog para sa lahat ng 25 leg: ang mga instrumentong nagtatakda ng limitasyon ay APTUSDT.BINANCE_SPOT (unang 1-DAY bar 2022-10-20) at ICPUSDT.BINANCE_SPOT (2021-05-12). Nagsisimula ang pangunahing BTCUSDT.BINANCE_SPOT sa 2017-08-18, at walang ipinapasang petsa ng pagsisimula ang buong backtest (backtest_agent._run_backtest ay nagpapadala lamang ng `end`), kaya tumatakbo ang engine mula 2017-08 -> 2026-09 (~9.1 taon) samantalang hindi makapaglagay ang portfolio ng unang order nito hanggang ~2022-11-10 (pagkakalista ng APT + 21 naka-align na row para sa warmup). ~5.25 sa 9.1 taon (58%) ang naitatala bilang mga flat na 0.00% araw sa pang-araw-araw na grid. Eksaktong ipinapakita na ito ng sandbox: ang mga stress window na covid_crash_2020, china_ban_2021, luna_collapse_2022 at rate_shock_2022 (Ene-Okt) ay pawang nagbibigay ng eksaktong 0.0000%, samantalang ang ftx_collapse_2022 (nagsisimula sa 2022-11-06) ang unang hindi zero, sa -8.20%. Mga kahihinatnan na wala ni isa mang mababawi ng optimizer o analyst: (a) ang objective ng Phase-2 ay Sharpe na kinukuwenta sa isang seryeng karamihan ay zero — iniuulat ng sandbox ang 0.547 samantalang ang CAGR ng parehong portfolio sa loob ng ACTIVE nitong panahon ay 19.26%; (b) humigit-kumulang limang taon sa kalendaryo ang mag-uulat ng eksaktong 0.00% at mabibilang bilang hindi positibo laban sa minimum na bahagi ng mga positibong taon na kailangan para sa validity; (c) ang mismong mga paunang inirehistrong pahayag ng hypothesis — Sharpe +0.74 sa loob ng 2017-2026, 6 sa 9 taon na positibo, 'nakaliligtas sa BOTH buong bear market' (2018 -19%, 2022 -26%) — ay hindi talaga maipapakita, dahil ang 2018 at ang unang sampung buwan ng 2022 ay nasa loob ng panahong walang aktibidad; (d) kinukuwenta ang mga tercile ng realized-vol regime sa isang seryeng karamihan ay mga araw na walang aktibidad. Isa itong depekto sa sizing/configuration na may malinaw na solusyon, hindi isang pahayag tungkol sa kalamangan ng estratehiya: tama ang mismong trading logic (tingnan ang mga tala). (linya 49) — pagwawasto: Pumili ng universe na ang lahat ng miyembro ay umiiral sa buong panahong nais mong sukatin, at sabihin sa paliwanag ng config kung aling panahon iyon. Mga beripikadong petsa ng unang bar sa catalog para sa kasalukuyang 25: APT 2022-10-20, ICP 2021-05-12, pagkatapos ay 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, pagkatapos ay BCH 2019-11-29 / HBAR 2019-09-30 / DOGE 2019-07-06 / ALGO 2019-06-23 / ATOM 2019-04-30 / LINK 2019-01-17, pagkatapos ay VET 2018-07-26 / ETC 2018-06-13 / TRX 2018-06-12 / XLM 2018-06-01 / XRP 2018-05-05 / ADA 2018-04-18, at BTC/ETH 2017-08-18, BNB 2017-11-07, - [warning] Ang laki ng pagbili sa isang rotation ay nililimitahan ng `available = get_account_equity() * cash_buffer`, na binabasa AFTER isinusumite ang mga exit at trim SELL sa mga linyang 279-298. Sa backtest, tama ito dahil pinupunan ng SimulatedExchange ng NT ang mga market order sa loob ng parehong iteration ng engine, kaya nasasalamin na ng balanse ng USDT ang mga benta. Sa paper/live, hindi ito tama: nananatiling nakabinbin ang mga market order hanggang sa susunod na tick, kaya sa isang rotation na nagbebenta ng 2-3 instrumento upang pondohan ang 2-3 bagong instrumento, makikita ng estratehiya ang cash bago ang bentahan, iaakma ang bawat kakulangan ayon sa `ratio < 1`, at maglalaan ng mas kaunting kapital kaysa sa nilalayon. Dahil binabago lamang ang laki ng mga hawak na instrumento kapag lumihis ang mga ito sa labas ng +/-25% tolerance band, maaaring manatili ang kakulangan hanggang sa isang susunod na rotation. Pagkakaiba ito sa pagitan ng backtest at paper, hindi bug sa kawastuhan ng backtest. (linya 309) — pagwawasto: Kuwentahin ang `available` bilang (cash + notional value ng mga exit/trim na kasususumite lamang), o ipagpaliban ang buy leg ng isang rotation hanggang sa susunod na bar matapos makumpleto ang mga benta (isang buy queue na ipinagpaliban nang isang bar at naka-key sa rebalance period). Kung pananatilihin ito sa kasalukuyang anyo, tahasang sabihin iyon sa paliwanag upang hindi ituring ng paper-parity check ang pagkakaiba bilang depekto. - [warning] Ang pagkawala ng data sa iisang leg ay nagpapahinto sa buong portfolio. Nagbabalik ng None ang `_row_for()` maliban kung ang EVERY isa sa 25 leg ay may bar na may eksaktong timestamp ng pangunahing bar, at hiwalay ding hinaharang ng barrier ng base template ang pangunahing bar sa parehong sitwasyon. Ang isang nawawalang pang-araw-araw na bar sa alinmang instrumento (puwang sa pangongolekta, paghinto ng exchange) ay tahimik na nagpapalaktaw sa row ng araw na iyon, na nag-iiwan ng puwang sa log-return window na ginagamit para sa realized vol; ang isang instrumentong tuluyang huminto sa paglalathala (delisting) ay permanenteng nagpapahinto sa estratehiya habang bukas ang mga posisyon. Konserbatibo ang pag-uugaling ito sa halip na mali, ngunit hindi ito nakikita — walang nagla-log o nagbibilang ng mga nilaktawang araw. (linya 88) — pagwawasto: Bilangin ang mga nilaktawang row (awtomatikong sine-save ng base template ang isang `self._skipped_rows` int) at mag-log ng babala kapag nawawala ang isang leg nang mahigit ~2 magkakasunod na pangunahing bar, upang lumitaw ang isang delisting bilang diagnostic sa halip na isang tahimik na flat na portfolio.

Iteration History

Nabigo ang beripikasyon (Layer 4 — QA review) [class=hypothesis_mismatch]: - [edge_concern] Kumikita ang smoke backtest, ngunit hindi ginagamit ang performance bilang verdict sa correctness. - [critical] Nangangailangan ang hypothesis ng nakapirming 25-coin na Binance Spot universe, ngunit 14 instruments lamang ang kino-configure ng implementation. Samakatuwid, ang paghawak ng 5 pangalan ay pumipili ng 5/14 sa halip na 5/25, na materyal na nagbabago sa cross-sectional strategy. (line 45) — ayusin: Ibalik ang eksaktong 25-name universe sa extra_instruments at extra_bar_types, pagkatapos ay muling patakbuhin ang verification at backtesting. Bilang alternatibo, pormal na baguhin ang hypothesis sa 14-name variant. - [critical] Pinahihintulutan ng hypothesis ang maximum gross exposure na 1.0x, ngunit itinatakda ng implementation ang max_gross_exposure sa 0.95 at nililimitahan ito sa 0.95. (line 29) — ayusin: Gumamit ng 1.0 maximum o tahasang amyendahan ang hypothesis upang i-pre-register ang 0.95 cap.

Dahilan ng Pag-abandona

verification_loop: Nabigo ang beripikasyon (Layer 2 — mga synthetic scenario): Mga ginamit na parameter: ['n_hold', 'cash_buffer', 'min_notional', '_param_bounds', 'rebalance_days', 'rv_lookback_days', 'target_annual_vol', 'max_gross_exposure', 'rebalance_tolerance'] Tiyaking itinatakda ng __init__ ang lahat ng attribute mula sa self.parameters.get(). - steady_uptrend: TypeError: hindi suportadong mga uri ng operand para sa *: 'decimal.Decimal' at 'float' (bar timestamp: 1735692060000) - steady_downtrend: TypeError: hindi suportadong mga uri ng operand para sa *: 'decimal.Decimal' at 'float' (bar timestamp: 1735692060000) - flat_ranging: TypeError: hindi suportadong mga uri ng operand para sa *: 'decimal.Decimal' at 'float' (bar timestamp: 1735692060000) - volatility_spike: TypeError: hindi suportadong mga uri ng operand para sa *: 'decimal.Decimal' at 'float' (bar timestamp: 1735692060000) - zero_volume: TypeError: hindi suportadong mga uri ng operand para sa *: 'decimal.Decimal' at 'float' (bar timestamp: 1735692060000) - price_gap: TypeError: hindi suportadong mga uri ng operand para sa *: 'decimal.Decimal' at 'float' (bar timestamp: 1735692060000)
Ulat ng estratehiya

Ang Stratmill ay isang tool para sa pananaliksik at paper trading, hindi payo sa pananalapi o isang broker. Ang mga resulta ng backtest at paper trading ay hypothetical. May panganib ng pagkalugi ang pangangalakal.