Strategie
BTC cash-and-carry konvergence kvartální báze, tržně neutrální (long BTCUSDT.BINANCE_SPOT + short nejbližší expirující BTC USD-M DATED QUARTERLY futures, drženo do vypořádání pro zachycení báze DETERMINISTICALLY-CONVERGENT contanga — NOT perp funding, rolování při expiraci, 2 parametrů)
Výsledek: Zrušeno
BtcQuarterlyBasisConvergenceCarryNeutral
Souhrn výsledků
Tato strategie navrhla skutečně odlišnou výhodu oproti neúspěšným carry strategiím továrny založeným na funding rate perpetualů — delta-neutrální cash-and-carry BTC, který využívá basis datovaných čtvrtletních futures s deterministickou konvergencí, drží je do vypořádání a každé čtvrtletí roluje, přičemž má pouze dva laditelné parametry. Backtest nikdy nevznikl: ve všech 3 iteracích běh selhal, protože engine nedokázal získat historii funding rate pro čtvrtletní nohu „BTCUSDT_230929.BINANCE“, považoval datovaný kontrakt za perpetual a kvůli přesnosti blokoval spuštění. Protože nebylo dosaženo fází backtestu, kontroly backtestu, optimalizace ani analýzy, byla strategie opuštěna kvůli závislosti na datech/infrastruktuře, nikoli kvůli ekonomické výhodnosti. Hypotéza výslovně upozornila, že dostupnost dat čtvrtletních kontraktů je kritickou závislostí, a právě tam se proces zastavil.
Hypotéza
backtest_failed: RuntimeError: Funding data pro perp nohu 'BTCUSDT_230929.BINANCE' nejsou dostupná — sběr na vyžádání selhal nebo burza nemá historii funding sazeb (backtest byl zablokován kvůli přesnosti; obejdete nastavením SF_DISABLE_ONDEMAND_FUNDING=1) Traceback (poslední volání): File "/opt/strategy-factory/src/agents/backtest_agent.py", řádek 190, v _run_backtest await self._ensure_funding_for_perp_legs(instrument_id, extra_instrs) File "/opt/strategy-factory/src/agents/backtest_agent.py", řádek 406, v _ensure_funding_for_perp_legs raise RuntimeError( RuntimeError: Funding data pro perp nohu 'BTCUSDT_230929.BINANCE' nejsou dostupná — sběr na vyžádání selhal nebo burza nemá historii funding sazeb (backtest byl zablokován kvůli přesnosti; obejdete nastavením SF_DISABLE_ONDEMAND_FUNDING=1)
Implementace
Výsledky ověření
Ověření selhalo (vrstva 3 — sandboxový backtest): smoke test překročil limit 300 s. Téměř vždy to znamená práci na každém baru, která roste s délkou historie — například opakované procházení celé funding/doplňkové řady nebo sestavování seznamu a volání min()/sorted() uvnitř calculate_signal()/on_bar() na každém baru. Předpočítejte seřazená pole časových značek ONCE v __init__ a použijte bisect nebo ukládejte vyhledávání do mezipaměti podle časové značky, aby náklady na bar byly O(log n), nikoli O(n).
Rozšiřte extra_instruments na kvartální řadu FULL BTC (~16-20 kontraktů od 2020) pomocí hrubších kvartálních barů 12H/1D, aby se běh vešel do limitu sandboxu, metrics_reliable=true a každé okno průběžného testování obsahovalo několik konvergencí. Jde pouze o rozšíření konfigurace — logika rolování už zpracovává řetězce libovolné délky.
Počet konvergencí je hraniční (8) a metrics_reliable=false — pod hodnotou ~16-20, na kterou jsem cílil v iteraci -1. Vývojář omezil řetězec na 8 kontraktů kvůli rozpočtu Layer-3. UNLIKE neúspěšných makro trendových strategií jde o upravitelnou konfiguraci, nikoli o vnitřní limit: více konvergencí lze snadno dosáhnout zalistováním dalších historických datovaných čtvrtletních kontraktů BTC (až zhruba do 2020). Zásadní je, že data diagnosticky podporují výhodu i při n=8: Sharpeho poměr CI [1.14, 46.66] má dolní mez POSITIVE (nezahrnuje nulu) a rozdělení se chová dobře (šikmost -0.56, špičatost 2.37) — v ostrém kontrastu s trendovými strategiemi, jejichž intervaly spolehlivosti sahaly hluboko do záporných hodnot. Výhoda deterministické konvergence znamená, že 8 téměř nezávislých událostí představuje skutečný důkaz, nikoli štěstí.
Vyhodnocujte především konvergence v průběžném testování (prodloužená řada), nikoli 15-denní holdout; upozorněte operátora, pokud holdoutová podmínka blokuje platné carry držené do konce kvartálu.
Upozornění k horizontu (stejně jako u makro strategií): držení ~90 dní znamená, že holdout o délce 15 dní obsahuje ~0 uzavřených konvergencí, takže podmínku holdout je strukturálně obtížné vyhodnotit. Je to méně omezující než u trendových strategií, protože rozšířený řetězec poskytuje dost konvergencí pro diagnostická okna walk-forward, ale operátor by měl vzít na vědomí, že holdout pro carry obchody držené čtvrtletí vyžaduje zohlednění horizontu.
Potvrďte delta-neutralitu a příspěvek basis za každé čtvrtletí v úplném backtestu s rozšířeným řetězcem.
Dvě kontroly analytiků (ani jedna není vadou kódu): (1) exposure_pct 227% — u delta-neutrálního páru spot + short futures při capital_frac 0.45 za nohu je zamýšlená hrubá hodnota ~0.90x; 227% je nejspíš artefakt hrubé nominální hodnoty / zhodnocení podle tržní ceny (beta 0.0105, max_dd 3.24%, téměř symetrické zisky a ztráty largest_win potvrzují, že kniha je IS neutrální), ověřte však, že se při prodloužení řady nezměnilo nastavení velikosti. (2) avg_loss ($13,905) mírně převyšuje avg_win ($12,384) při win_rate 0.5625 — čistý výsledek je kladný, ale některé kvartály konvergují nepříznivě (backwardace/rozšíření báze před rolováním); ověřte, že výhodu netvoří jen jeden či dva kvartály s bohatým contangem.
Kód nemá žádné nedostatky — rolování je správné a lze je opakovat v řetězci libovolné délky.
CREDIT (bez vady): ROLL je správně implementován podle mého požadavku v iteraci -1 — _candidate vybírá aktuální nejbližší kvartální kontrakt s dostatečným časem do expirace (3-denní kontrola zastaralosti _live + _dte pro každý kontrakt), drží jej do roll_buffer_days před vypořádáním a poté přechází na další nejbližší kvartální kontrakt; expirace se parsuje pro každý kontrakt, ochrana proti nekryté noze, delta-neutrální nohy se stejnou nominální hodnotou (lineární marže USDT), spot pouze BUY (bezpečné pro CASH), omezená velikost nezávislá na dráze, práce O(1) na bar. Kvartální časový rámec 12–HOUR (odlišný od primárního 1–DAY) správně obchází patovou situaci zarovnání stejného časového rámce u expirovaných/nevypsaných kontraktů. Mechanismus ověřen: 8 čistých konvergencí držených 90 dní, ~4 ročně, poplatkově životaschopné (1.06% provize).
Historie iterací
RuntimeError: Funding data pro perp nohu 'BTCUSDT_230929.BINANCE' nejsou dostupná — sběr na vyžádání selhal nebo burza nemá historii funding sazeb (backtest byl zablokován kvůli přesnosti; obejdete nastavením SF_DISABLE_ONDEMAND_FUNDING=1) Traceback (poslední volání): File "/opt/strategy-factory/src/agents/backtest_agent.py", řádek 190, v _run_backtest await self._ensure_funding_for_perp_legs(instrument_id, extra_instrs) File "/opt/strategy-factory/src/agents/backtest_agent.py", řádek 406, v _ensure_funding_for_perp_legs raise RuntimeError( RuntimeError: Funding data pro perp nohu 'BTCUSDT_230929.BINANCE' nejsou dostupná — sběr na vyžádání selhal nebo burza nemá historii funding sazeb (backtest byl zablokován kvůli přesnosti; obejdete nastavením SF_DISABLE_ONDEMAND_FUNDING=1)
Souhrn výsledků
Hypotéza označila dostupnost historických kline dat pro kvartální kontrakty s datovanou expirací jako závislost vyžadující okamžité ukončení při nesplnění; ukázalo se, že je rozhodující: požadavek backtestovacího prostředí na funding data pro futures nohu musí být splněn (nebo obejit pomocí SF_DISABLE_ONDEMAND_FUNDING), než lze carry založené na kvartální bázi vůbec vyhodnotit.
Strategie byla opuštěna po 3 iteracích, když backtest skončil chybou RuntimeError: funding data nebyla pro nohu 'BTCUSDT_230929.BINANCE' dostupná — engine považoval datované kvartální futures za perp vyžadující historii funding sazeb, čímž zablokoval backtest kvůli přesnosti.
Tržně neutrální cash-and-carry BTC, který nakupuje spot BTCUSDT a prodává nejbližší datovaný čtvrtletní futures kontrakt USD-M; držením do vypořádání zachycuje kontango basis s deterministickou konvergencí (~5-15% anualizovaně) namísto nízkého funding rate perpetualů.
Nejsou k dispozici žádné výkonnostní metriky — backtest nebyl dokončen, takže nejsou známy výnos, Sharpe ani počet obchodů; fáze optimalizace vůbec nezačala.
Důvod zavržení
backtest_failed: RuntimeError: Funding data pro perp nohu 'BTCUSDT_230929.BINANCE' nejsou dostupná — sběr na vyžádání selhal nebo burza nemá historii funding sazeb (backtest byl zablokován kvůli přesnosti; obejdete nastavením SF_DISABLE_ONDEMAND_FUNDING=1) Traceback (poslední volání): File "/opt/strategy-factory/src/agents/backtest_agent.py", řádek 190, v _run_backtest await self._ensure_funding_for_perp_legs(instrument_id, extra_instrs) File "/opt/strategy-factory/src/agents/backtest_agent.py", řádek 406, v _ensure_funding_for_perp_legs raise RuntimeError( RuntimeError: Funding data pro perp nohu 'BTCUSDT_230929.BINANCE' nejsou dostupná — sběr na vyžádání selhal nebo burza nemá historii funding sazeb (backtest byl zablokován kvůli přesnosti; obejdete nastavením SF_DISABLE_ONDEMAND_FUNDING=1)
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.