Mga Estratehiya
LTC Balvers-Wu/Serban Momentum + Standardized Mean-Reversion Regression: Hinuhulaan ng Point-in-Time Expanding OLS ang Susunod na 7-Day Log Return mula sa z(log price kumpara sa trailing 365-day mean) at 21-Day Log Momentum; Long/Short/Flat Deadband sa Daily Bars (LTCUSDT.BINANCE USD-M, purong OHLCV)
Resulta: Inabandona
LtcMomentumMeanReversionRegression
Buod ng Resulta
Inilipat ng hypothesis ang FX momentum at mean-reversion regression sa single-instrument, time-compressed at mahigpit na point-in-time na bersiyon sa LTC daily perp bars. Muling isinulat ng iteration 2 ang strategy para gumamit ng O(1) per-bar running sums at closed-form 3x3 OLS solve matapos ang Layer-3 sandbox timeout, pero naulit ang timeout. Natukoy ng iteration 3 na ang instrument globbing ng catalog sa backtest runner ang sanhi, at hindi binago ang logic. Inabandona ang run sa verification loop matapos ang 3 iteration nang walang nagawang backtest, kaya hindi kailanman nasubok ang edge mismo.
Hypothesis
Hindi nagbago ang model at signal logic mula sa iteration 2, na O(1) na sa bawat bar (running sums at closed-form 3x3 solve). Lokal kong naulit ang Layer-3 timeout, at infrastructure ang sanhi, hindi ang strategy. Lumampas din sa wall-clock limit ang isang payak na no-op strategy sa parehong 2400-day LTC 1-DAY window. Ipinapakita ng py-spy na naipit ang backtest child sa ParquetDataCatalog.instruments() sa src/backtesting/runner.py:531. Doon, nag-glob at naglalakad ang fsspec sa catalog na may humigit-kumulang 126k bar directory bago pa ma-replay ang anumang bar. Walang pagbabagong magagawa sa strategy ang makaaayos nito. Mga komento lang ang idinagdag ng resubmission na ito, kaya naiiba ang code hash at muling tatakbo ang smoke test kapag naayos na ang catalog I/O. Kailangan ng engine-side na pag-aayos ang instrument lookup sa runner.py, halimbawa direktang path lookup gaya ng ginagamit ng InstrumentResolver.
verification_loop: sandbox_timeout: Nabigo ang verification (Layer 3 — sandbox backtest): lumampas sa 300s na wall-clock limit ang smoke test sa ~20000-bar window (2400 araw ng LTCUSDT.BINANCE-1-DAY-LAST-EXTERNAL). Halos palaging nangangahulugan ito ng per-bar na gawaing lumalaki kasabay ng history — halimbawa, muling pag-scan sa buong funding/supplementary series, o muling pagbuo ng list at pagtawag sa min()/sorted() sa loob ng calculate_signal()/on_bar() sa bawat bar. Ihanda nang maaga ang mga nakaayos na timestamp array ONCE sa __init__ at gumamit ng bisect, o i-cache ang mga lookup ayon sa timestamp, para O(log n) sa halip na O(n) ang per-bar cost.
Implementasyon
Ipinagpapalit ang LTCUSDT.BINANCE perpetual sa daily bars. Dalawang feature: ang z-score ng log close kumpara sa trailing 365-day mean at std (mean reversion), at ang 21-day log momentum na isina-scale ng 365-day daily-return volatility. Hinuhulaan ng expanding OLS ang susunod na 7-day log return mula sa mga feature na ito. Mahigpit na point-in-time ang fit: gumagamit ito ng running normal-equation sums, idinadagdag lang ang mga 7-day forward return na ganap nang na-realize, inaalis ang mga sample na may |z| > 3, at naghihintay ng 180 sample bago manghula. Nagiging long ang strategy kapag lampas sa +deadband ang prediksiyon, short kapag mas mababa ito sa -deadband, at nananatiling flat kung hindi. Lumalabas ito kapag bumalik ang prediksiyon patawid sa exit band.
Mga Resulta ng Beripikasyon
sandbox_timeout: Nabigo ang verification (Layer 3 — sandbox backtest): lumampas sa 300s na wall-clock limit ang smoke test sa ~20000-bar window (2400 araw ng LTCUSDT.BINANCE-1-DAY-LAST-EXTERNAL). Halos palaging nangangahulugan ito ng per-bar na gawaing lumalaki kasabay ng history — halimbawa, muling pag-scan sa buong funding/supplementary series, o muling pagbuo ng list at pagtawag sa min()/sorted() sa loob ng calculate_signal()/on_bar() sa bawat bar. Ihanda nang maaga ang mga nakaayos na timestamp array ONCE sa __init__ at gumamit ng bisect, o i-cache ang mga lookup ayon sa timestamp, para O(log n) sa halip na O(n) ang per-bar cost.
Buod ng Resulta
Kapag nagpapatuloy ang sandbox timeout matapos gawing O(1) ang per-bar logic, at nagti-timeout din ang no-op strategy sa parehong window, ipadala ito para sa infrastructure investigation sa halip na mag-ubos pa ng coding iteration sa strategy.
Matapos ang 3 iteration, inabandona ito ng verification loop sa Layer 3 (sandbox backtest), dahil lumampas sa 300s na wall-clock limit ang smoke test sa ~2400-day LTCUSDT.BINANCE 1-DAY window. Ayon sa mga tala ng code ng iteration-3, infrastructure ang sanhi nito, hindi ang strategy: nag-timeout din ang isang payak na no-op strategy sa parehong window, at ipinakita ng py-spy na naipit ang run sa catalog globbing ng ParquetDataCatalog.instruments() bago pa ma-replay ang anumang bar.
Iangkop ang Balvers-Wu/Serban momentum plus mean-reversion model sa LTCUSDT.BINANCE daily bars: bawat araw, hinuhulaan ng point-in-time expanding OLS fit ang log return sa susunod na 7 araw mula sa z(log price kumpara sa trailing 365-day mean) at 21-day log momentum, at nagiging long, short o flat ang strategy depende sa posisyon ng prediksiyong iyon kaugnay ng deadband.
Walang datos ng performance. Hindi nakumpleto ng strategy ang sandbox backtest, kaya walang datos ng return, Sharpe o bilang ng trade. Hindi rin ito umabot sa mga yugto ng backtest, optimization at analyst.
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.