Lumaktaw papunta sa nilalaman
Lahat ng estratehiya

Mga Estratehiya

Basket ng Long-Horizon Trend-Following sa Majors (~200-Araw na Absolute Trend, Long-Short, Binance USD-M Futures, Purong OHLCV, Lingguhang Rebalance)

Resulta: Inabandona

LongHorizonTrendFollowingMajorsBasketLS

Backtest gate: - hindi maaasahan ang metrics: kulang ang ebidensiya sa 261 trade / 2437 araw ng datos (kailangan ng >=5 trade sa loob ng >=10 araw) — dagdagan ang dalas ng signal o palawakin ang window

Hypothesis

Isang basket na LONG-SHORT, MULTI-INSTRUMENT LONG-HORIZON TREND-FOLLOWING sa humigit-kumulang 10 pangunahing perpetual ng Binance USD-M na kumpirmadong kumpleto ang history. Hinahawakan nito ang bawat asset nang LONG kapag nasa pangmatagalang (~200-araw / 40-linggo) uptrend, at SHORT kapag nasa pangmatagalang downtrend, na pantay ang timbang ayon sa risk. Kinukuha nito ang ONE napatunayang crypto edge -- MOMENTUM/CONTINUATION (positibo ang cross-sectional momentum at kabilang ito sa optimization; lubhang mali ang……Magpakita ng higit paMagpakita ng mas kaunti

Isang basket na LONG-SHORT, MULTI-INSTRUMENT LONG-HORIZON TREND-FOLLOWING sa humigit-kumulang 10 pangunahing perpetual ng Binance USD-M na kumpirmadong kumpleto ang history. Hinahawakan nito ang bawat asset nang LONG kapag nasa pangmatagalang (~200-araw / 40-linggo) uptrend, at SHORT kapag nasa pangmatagalang downtrend, na pantay ang timbang ayon sa risk. Kinukuha nito ang ONE napatunayang crypto edge -- MOMENTUM/CONTINUATION (positibo ang cross-sectional momentum at kabilang ito sa optimization; lubhang mali ang hula ng bawat fade/reversion) -- sa LONG-HORIZON takdang panahon na hindi saklaw ng mga medium-horizon momentum strategy ng portfolio (60-araw na cross-sectional / absolute / dual / nearness-to-high basket). Ayon sa empirikal na datos, DISTINCT salik ang pangmatagalang trend (Faber 2007 / managed-futures) na hiwalay sa medium-horizon momentum: iba ang estruktura ng return autocorrelation nito, mas LOWER ang turnover (mas kaunti at mas matagal hawak na mga posisyon), at mas malakas ang likas na pag-iwas nito sa bear market. Hindi ito muling pagsasaayos ng mga nailunsad nang basket. Pinupunan din nito ang pinakakaunting kinatawang pangkat ng horizon sa portfolio (macro_1w_plus, ~0.3%). Isinasaalang-alang ng pasyang EVERY ito ang mga aral sa sesyong ito na dapat sundin: (1) direksiyong MOMENTUM -- ito lang ang gumaganang edge. (2) venue na FUTURES -- paulit-ulit na nagkaroon ng problema sa pagtakda ng laki at accounting ang mga estratehiyang SPOT; madaling itakda nang tama ang laki sa USD-M futures at pinapayagan nito ang short leg. (3) PURE OHLCV, NO na supplementary/funding -- nagtatapos ang funding_rates sa ~2024-12 (walang laman ang holdout), at nabigo ang lahat ng pagsubok sa supplementary stream dahil kulang ang saklaw ng datos; presyo lang ang ginagamit nito. (4) unibersong MAJORS-ONLY CONFIRMED-DATA -- nabigo sa datos o paglilipat ang mga paglalapat sa iisang asset/pattern (ADA 3-bar 0-for-8) at mga basket ng thin-alt/HL; dito, mga pangunahing asset lang na nakalista sa 2020 at may kumpletong history ang ginagamit, kasama ang pananggalang na nag-aalis ng asset at nagpapatuloy. (5) DIVERSIFIED BASKET -- ang matatag na anyo; sa humigit-kumulang 10 asset, nagbubunga pa rin ang mabagal na trend ng kalat-kalat na multi-year trade stream (binabawi ng dami ng basket ang mahabang horizon, kaya naiiwasan ang mga problemang dulot ng kakaunting event o trade). (6) proteksiyon sa crash na NET-DIRECTIONAL -- net-long sa malawakang uptrend, net-short sa malawakang downtrend. (7) paglabas na LET-TRENDS-RUN (magpalit ng posisyon kapag bumaligtad ang pangmatagalang trend), hindi maliit na TP/malaking SL. Sadyang simple: 3 parameter na maaaring baguhin (trend_lookback, rebalance_days, vol_lookback).

Tinutugunan ng Iteration 3 ang iniulat na timeout ng sandbox sa Layer-3, at sinukat ko ang sanhi sa halip na manghula. Muli kong pinatakbo ang dating code gamit ang parehong subprocess runner, venue at 2400-araw/1-DAY smoke window na ginagamit ng sandbox: 10 legs / band 0.25 = 94.5s at 89.0s sa dalawang run (969 order); 10 legs / band 1.0 = 89.0s (313 order); 6 legs / band 1.0 = 88.8s; at estratehiyang iisa ang instrumento na naglalagay ng ZERO trade sa parehong window = 50.9s. Kaya nakapirmi sa humigit-kumulang……Magpakita ng higit paMagpakita ng mas kaunti

Tinutugunan ng Iteration 3 ang iniulat na timeout ng sandbox sa Layer-3, at sinukat ko ang sanhi sa halip na manghula. Muli kong pinatakbo ang dating code gamit ang parehong subprocess runner, venue at 2400-araw/1-DAY smoke window na ginagamit ng sandbox: 10 legs / band 0.25 = 94.5s at 89.0s sa dalawang run (969 order); 10 legs / band 1.0 = 89.0s (313 order); 6 legs / band 1.0 = 88.8s; at estratehiyang iisa ang instrumento na naglalagay ng ZERO trade sa parehong window = 50.9s. Kaya nakapirmi sa humigit-kumulang 51s ang gastos ng bawat run sa makinang ito para sa engine + catalog + metrics, at halos walang epekto sa kabuuang oras ang dami ng leg o order. Walang trabahong ginagawa sa bawat bar ang estratehiya na lumalaki kasabay ng haba ng history (O(1) ang mga append sa buffer, nililimitahan sa trend_lookback+2, at O(legs) ang rebalance sa lingguhang grid). Ang pagkabigong 300s ay dulot ng CPU contention: nagpapatakbo ang makina ng 11-17 sabay-sabay na backtest subprocess habang nagsusukat ako; ito rin ang kakulangan sa mapagkukunan na tinutugunan ng mga tala sa pipeline. Dahil dito, ginawa ko ang dalawang pagbabagong tunay na nagpapababa sa sariling gastos ng estratehiya at nagpapahusay dito, habang hindi ginalaw ang pumapasang signal logic: (1) binago ang default na rebalance_band 0.25 -> 1.0, kaya bumaba ang mga order mula 969 -> 313 (-68%), dahil magte-trade lang ang isang leg kapag nagbago ang direksiyon ng trend sa FLIP, may bagong aktibong leg, o may pagsasara, sa halip na baguhin ang timbang nito ayon sa galaw ng equity bawat linggo. Mas tapat din ito sa hypothesis (mas LOWER na turnover, hayaang magpatuloy ang mga trend), at sapat ang ibinawas nito sa epekto ng bayarin para umangat ang resulta sa smoke window mula -14.7% total return / -7.2% average bawat trade tungo sa +41.6% / +4.1%. (2) Nakaangkla na ngayon sa CALENDAR ang iskedyul ng rebalance: ang period index ay int(bar.ts_init) // (86400e9 * rebalance_days) at nagaganap ang rebalance sa unang bar ng bawat bagong period. Pinalitan nito ang bar counter na nakabatay sa proseso, na muling nag-aangkla sa bawat restart, lumilihis sa nakapirming grid at pumipigil sa pagtutugma ng backtest at paper replay. Idineklara ko rin ang _param_bounds para sa bawat parameter na nililimitahan ng code, upang hindi maghanap ang optimizer ng mga halagang lihim na binabago ng code. May isa pang datos na dumating matapos ang unang tatlo: pinatakbo ng code na SUBMITTED (10 legs, band 1.0, nakaangkla sa kalendaryo) ang parehong window sa 203.1s habang may 17 sabay-sabay na backtest subprocess sa makina, kumpara sa 89.0s para sa gawaing byte-identical sa 11. Ipinakikita nito na nakabatay sa sabayang pagpapatakbo ang oras, hindi sa estratehiya. Natapos pa rin ito sa loob ng limitasyong 300s sa pinakamabigat na load na naobserbahan ko (266 trade, +58.8% total return, Sharpe 0.43, average bawat trade +4.06%), pero nakadepende sa load ang palugit. Kung mag-timeout pa rin ang Layer 3, imprastraktura na lang ang natitirang maaaring baguhin (presyon sa sabayang slot o SF_SANDBOX_BAR_BUDGET), hindi ang trabahong ginagawa ng estratehiya sa bawat bar. Ang baseline na 51s na walang trade ang pinakamababang oras na maaabot ng anumang code ng estratehiya.

Negatibo ang expectancy sa maaasahang sample na 273 trade / 6.7 taon: profit_factor 0.962 (<1), avg_trade_pnl_usd -39.30, expectancy -$39.30/trade, CAGR -2.19%. Artifact ng mark-to-market ang +48.2% total_return — nangangahulugan ang end_unrealized_pct 58.9 na mga bukas na posisyong hindi na-exit ang headline na ENTIRE, minarkahan sa huling bar; negatibo ang realized record. Sumasalungat sa negatibong size-weighted USD expectancy ang mataas na equal-weighted avg_trade_return_pct (3.03%): mas malaking notional ang……Magpakita ng higit paMagpakita ng mas kaunti

Negatibo ang expectancy sa maaasahang sample na 273 trade / 6.7 taon: profit_factor 0.962 (<1), avg_trade_pnl_usd -39.30, expectancy -$39.30/trade, CAGR -2.19%. Artifact ng mark-to-market ang +48.2% total_return — nangangahulugan ang end_unrealized_pct 58.9 na mga bukas na posisyong hindi na-exit ang headline na ENTIRE, minarkahan sa huling bar; negatibo ang realized record. Sumasalungat sa negatibong size-weighted USD expectancy ang mataas na equal-weighted avg_trade_return_pct (3.03%): mas malaking notional ang taglay ng mga talong leg. Sharpe 0.35 na sumasaklaw sa zero ang CI [-0.43, 1.08], nalulugi sa 3 sa huling 5 buong taon (2025 -38.3%), at kinukumpirma ng pagkakulong ng edge sa normal-vol tercile na walang matibay na gross edge. 1.18% lang ng gross ang mga komisyon, kaya hindi ito marupok dahil sa bayarin — negatibo sa gross ang long-horizon net-directional trend signal sa majors, at hindi mababaligtad ng pag-optimize sa 3 tunable ang signal na PF<1. Lagda ito ng multi-instrument long-short basket (L45/L63, multi_instrument ~0/84) na ang headline return ay MTM beta/leverage, hindi edge sa bawat pangalan. Hindi sulit ang 2 oras ng optimization. abandon_class=negative_expectancy.

Implementasyon

Long-short na long-horizon (Faber / managed-futures) absolute-trend basket sa 10 Binance USD-M majors na may kumpletong kasaysayan (BTC, ETH, BNB, XRP, ADA, SOL, DOGE, LTC, LINK, BCH) sa 1-DAY na bar. Bawat leg ay hawak LONG kapag positibo ang sarili nitong ~200-araw na trailing return at SHORT kapag negatibo, naka-size bilang equal-RISK sa pamamagitan ng inverse realized volatility (vol_target / std(20d returns), limitado sa [0.3, 1.5]) at may cap upang hindi kailanman lumampas ang aggregate gross sa 1x na……Magpakita ng higit paMagpakita ng mas kaunti

Long-short na long-horizon (Faber / managed-futures) absolute-trend basket sa 10 Binance USD-M majors na may kumpletong kasaysayan (BTC, ETH, BNB, XRP, ADA, SOL, DOGE, LTC, LINK, BCH) sa 1-DAY na bar. Bawat leg ay hawak LONG kapag positibo ang sarili nitong ~200-araw na trailing return at SHORT kapag negatibo, naka-size bilang equal-RISK sa pamamagitan ng inverse realized volatility (vol_target / std(20d returns), limitado sa [0.3, 1.5]) at may cap upang hindi kailanman lumampas ang aggregate gross sa 1x na equity. Dahil ang signal ay ABSOLUTE (sariling trend) sa halip na cross-sectional, ang book ay net-directional: net-long sa malawakang uptrend, net-short sa malawakang downtrend, na siyang structural crash protection. Inililipat ang mga posisyon sa target sa pamamagitan ng iisang netting delta order bawat leg sa bawat calendar rebalance date; sa default na no-trade band na 1.0, nagte-trade lamang ang isang leg kapag ang trend sign nito ay FLIPS, kapag bagong armed ito, o kapag zero na ang target nito, kaya pinapayagang tumakbo ang mga trend at ang turnover ay nananatili sa ilang flips bawat instrumento kada taon. Puro OHLCV, walang karagdagang data, leverage 1.0.

Mga Resulta ng Beripikasyon

sandbox_timeout: Nabigo ang verification (Layer 3 — sandbox backtest): lumampas ang smoke test sa 300s na limitasyon ng wall-clock sa ~20000-bar na window (2400 araw ng BTCUSDT.BINANCE-1-DAY-LAST-EXTERNAL). Halos palaging nangangahulugan ito ng per-bar na trabahong lumalaki kasabay ng history — halimbawa, muling pag-scan sa buong funding/supplementary series, o muling pagbuo ng listahan at pagtawag sa min()/sorted() sa loob ng calculate_signal()/on_bar() sa bawat bar. Paunang kalkulahin ang mga nakaayos na timestamp array na ONCE sa __init__ at gumamit ng bisect, o i-cache ang mga lookup batay sa timestamp, upang maging O(log n) sa halip na O(n) ang gastos sa bawat bar.

Opsyonal na baguhin ang teksto ng hypothesis para sabihing '200-araw na trend lookback, lingguhang rebalance, sa daily bars' upang hindi ito muling mamarkahan ng heuristic. Walang kailangang baguhin sa code.

Inihambing ng consistency check ng Layer 1.5 ang pamagat ng hypothesis ('~200-Araw / 40-linggo / Lingguhang Rebalance') sa config.bar_type=1-DAY at minarkahan ito bilang posibleng salungatan sa timeframe. Sa pagsusuri, isa itong FALSE POSITIVE: tumutukoy ang hypothesis sa ~200-DAY na trend LOOKBACK at sa WEEKLY na ritmo ng REBALANCE, hindi sa lingguhang bars. Tama ang paggamit ng code sa 1-DAY bars, kung saan trend_lookback=200 (araw) at rebalance_days=7 (lingguhang grid). Kung lingguhang bar ang implementasyon, aabot sa 200 linggo ang 200 lookback at iyon ang tunay na hindi pagtutugma. Walang kailangang baguhin; itinatala ito upang hindi muling itaas ang babala bilang hadlang.

Walang kailangang aksyon; sinadya ang override at iginagalang ito ng base.

Ino-override ng min_bars_required(self) ang isang base framework method (babala ng static analyzer na base_shadow). Na-verify sa base_template.py line 412: tinatawag ng base na DOES ang self.min_bars_required() para salain ang pangunahing pagproseso, kaya wastong sinusunod ang override (ibinabalik ang max(trend_lookback,vol_lookback)+2 = 202) at kapaki-pakinabang talaga ito (tinitiyak ang 200-araw na warmup). Malayang nagsasagawa rin ng pananggalang ang calculate_signal sa pamamagitan ng internal length check, kaya hindi magdudulot ng look-ahead kahit mali ang pagkakakabit ng warmup. Hindi nakapipinsala.

Positibo at magkakaugnay ang resulta sa sandbox (total_return +58.8%, PF 1.21, avg_trade_return_pct +4.06% sa 266 trade, avg hold na 74d), pero katamtaman at nakadepende sa regime ang edge na inayos ayon sa risk: Sharpe 0.43 na sumasaklaw sa zero ang CI [-0.34, 1.18], at ipinakikita ng regime_performance na halos sa 'normal' vol tercile lang umiiral ang edge (+82.2%, Sharpe 1.43), samantalang negatibo ang parehong 'kalma' (-8.3%) at 'stressed' (-5.5%) tercile. 39% ang max drawdown (CI hanggang 65%) at may 699-araw na panahong underwater. Iisang hindi na-optimize na draw ito sa pinaikling window, kaya hindi ito humahadlang — pero dapat kumpirmahin ng analyst na nananatili ang long-horizon trend factor sa labas ng normal-vol regime at nahihigitan ang mga medium-horizon momentum basket na sinasabi nitong naiiba rito bago maglaan ng oras sa optimization.

Pagsusuri ng Backtest

Sharpe
0.35
Kabuuang Return
48.20%
Max Drawdown
44.24%
Kabuuang Trade
273
Win Rate
41.8%
Profit Factor
0.96

Maayos na diversified basket sa majors na may buong history; sapat ang sample na 273 trade / 6.7 taon (metrics_reliable=true)

Ipinatutupad ng mga trade ang hypothesis (139 long / 134 short na net-directional leg, ~72d na hawak — tapat ang pagkakakodigo sa disenyong mababa ang turnover at nagpapadaloy sa trend)

Nalalampasan ng avg_trade_return_pct 3.03% ang antas ng bayarin na kailangan upang hindi kainin ng komisyon ang kita sa pantay na pagtimbang; 1.18% lang ng gross ang komisyon, kaya hindi ito NOT na nalulugi dahil sa bayarin.

Negatibo ang gross edge: profit_factor 0.962 (<1), avg_trade_pnl_usd -39.30, expectancy -$39.30/trade — negatibo ang size-weighted USD expectancy dahil mas malaki ang notional ng mga talo kaysa sa ipinahihiwatig ng positibong equal-weighted avg_trade_return_pct

Ilusyon sa mark-to-market ang headline na +48.2%: ibig sabihin ng end_unrealized_pct 58.9, ang buong headline ay mga bukas na posisyong hindi na-exit sa dulo ng backtest; negatibo ang realized track record at ang CAGR ay -2.19%

Sharpe 0.35 na may CI [-0.43, 1.08] ay sumasaklaw sa zero; nalulugi sa karamihan ng mga taon sa kalendaryo (2021 -26.7%, 2024 -3.6%, 2025 -38.3%) at sa normal-vol tercile lang umiiral ang edge (kalma -14.5%, stressed +9.8% pero normal +56.8%) — napatunayan ang alalahanin ni QA tungkol sa regime

Hindi naipakita na hiwalay na factor ang long-horizon trend: benchmark_meaningful=false, at hindi nahihigitan ng strategy ang simpleng paghawak sa basket batay sa realized na resulta

Pagsusuri

Backtest gate: - hindi maaasahan ang metrics: kulang ang ebidensiya sa 261 trade / 2437 araw ng datos (kailangan ng >=5 trade sa loob ng >=10 araw) — dagdagan ang dalas ng signal o palawakin ang window

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.