Lumaktaw papunta sa nilalaman
Lahat ng estratehiya

Mga Estratehiya

Buwanang momentum spread ng large cap laban sa small cap

Resulta: Inabandona

LargeSmallCapMonthlyMomentumSpread

Buod ng Resulta

Sinubukan ng strategy na ito kung nagbibigay ng maaaring i-trade na buwanang spread ang 12-buwang relative momentum sa pagitan ng large cap (SPY) at small cap (IWM). Wala sa uniberso ng USEQ ang anim na style ETF na binanggit sa source, at sinabi sa palagay na nag-time out ang mga naunang two-leg USEQ run. Nabigo ang lahat ng tatlong pag-ulit sa beripikasyon ng Layer 3 dahil lumampas ang mga ito sa 300s na limitasyon ng sandbox, kaya itinigil ang run bago ang anumang backtest, optimization o pasya ng analyst. Sinasabi sa docstring ng strategy na ipinakita ng 2026-10-02 na pagsukat na halos lahat ng runtime ay nagamit sa pagtuklas ng file ng ParquetDataCatalog, hindi sa O(1) na loop ng strategy kada bar; nagpapahiwatig ito na nasa imprastraktura ang problema, hindi sa code ng strategy.

Hypothesis

Subukan ang 12-buwang tuntunin sa relative momentum ng source gamit ang SPY bilang proxy ng large cap at IWM bilang proxy ng small cap. Wala sa naka-configure na uniberso ng USEQ ang anim na style ETF na binanggit sa source. Nag-time out ang mga naunang two-leg USEQ run, kaya mahahatulan lang ang palagay na ito kapag nakagawa na ang pipeline ng nasukat na backtest.

verification_loop: sandbox_timeout: Nabigo ang beripikasyon (Layer 3 — sandbox backtest): lumampas ang smoke test sa 300s na limitasyon ng wall-clock sa ~20000-bar na window (2400 araw ng SPY.USEQ-1-DAY-LAST-EXTERNAL). Karaniwang nangangahulugan ito ng gawaing kada bar na lumalaki kasabay ng kasaysayan — halimbawa, muling pag-scan sa buong serye ng funding/supplementary, 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 ONCE sa __init__ at gumamit ng bisect, o mag-cache ng mga lookup na nakatala sa timestamp, para maging O(log n), hindi O(n), ang gastos kada bar.

Implementasyon

Sa unang daily bar ng bawat buwan sa kalendaryo, ihambing ang kabuuang price return sa loob ng 252 session ng SPY (large cap) at IWM (small cap). Mag-long sa mas malakas na panig at mag-short sa mas mahina, na may 50% gross exposure sa bawat panig gamit ang buumbilang na shares; hawakan ang pares hanggang sa rebalance sa susunod na buwan. Ang signal ay ang tuloy-tuloy na agwat ng return na SPY_ret - IWM_ret.

Ipinatutupad nito ang 12-buwang tuntunin sa relative momentum ng source gamit ang SPY at IWM bilang proxy ng large cap at small cap. Hindi nagbago ang trading logic mula sa bersiyong pumasa sa Layers 1, 1.5 at 2; docstring lang ang idinagdag upang itala ang pagsusuri sa timeout. Pinatakbo ko nang lokal ang backtest na katumbas ng sandbox (USEQ, 2017-06 hanggang 2024-01) sa ilalim ng cProfile. 504 s ang kabuuang wall time, kung saan 494 s ang ginugol sa BacktestRunner.run. Sa panahong iyon, 470 s ang ginugol ng……Magpakita ng higit paMagpakita ng mas kaunti

Ipinatutupad nito ang 12-buwang tuntunin sa relative momentum ng source gamit ang SPY at IWM bilang proxy ng large cap at small cap. Hindi nagbago ang trading logic mula sa bersiyong pumasa sa Layers 1, 1.5 at 2; docstring lang ang idinagdag upang itala ang pagsusuri sa timeout. Pinatakbo ko nang lokal ang backtest na katumbas ng sandbox (USEQ, 2017-06 hanggang 2024-01) sa ilalim ng cProfile. 504 s ang kabuuang wall time, kung saan 494 s ang ginugol sa BacktestRunner.run. Sa panahong iyon, 470 s ang ginugol ng ParquetDataCatalog.bars() -> get_file_list_from_data_cls(), na nagpapatakbo ng fsspec glob('data/catalog/data/bar/**/*.parquet') sa humigit-kumulang 134k direktoryo ng bar (372k ls call at 2.5M stat/info call). Gumagawa ang runner ng dalawang gayong call para sa anumang two-leg strategy (ang pangunahing load_normalised at ang naka-batch na query para sa dagdag na leg), mga 200 s bawat isa sa kasalukuyang host (load average na 33-42 sa 18 core). Ilang segundo lang ang kinailangan ng sariling callback ng strategy para sa humigit-kumulang 1,700 daily bar. Ipinapaliwanag nito kung bakit nag-time out ang bawat two-leg USEQ daily run (aral 182). Walang pagbabago sa signal, buffer o rebalance ang makapagpapababa sa run nang mas mababa sa 300 s, dahil binabayaran ang gastos bago maihatid ang unang bar.

Mga Resulta ng Beripikasyon

sandbox_timeout: Nabigo ang beripikasyon (Layer 3 — sandbox backtest): lumampas ang smoke test sa 300s na limitasyon ng wall-clock sa ~20000-bar na window (2400 araw ng SPY.USEQ-1-DAY-LAST-EXTERNAL). Karaniwang nangangahulugan ito ng gawaing kada bar na lumalaki kasabay ng kasaysayan — halimbawa, muling pag-scan sa buong serye ng funding/supplementary, 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 ONCE sa __init__ at gumamit ng bisect, o mag-cache ng mga lookup na nakatala sa timestamp, para maging O(log n), hindi O(n), ang gastos kada bar.

Buod ng Resulta

Paulit-ulit na nagti-time out sa Layer 3 ang mga two-leg USEQ strategy, at itinuturo ng sariling tala ng strategy ang sanhi sa pagtuklas ng mga file sa catalog sa loob ng backtest runner (mga 494 ng 504 s), hindi sa gawaing strategy kada bar. Mas makatutulong ang pag-aayos sa pag-load ng catalog kaysa sa isa pang pag-ikot ng pag-code.

Matapos ang 3 pag-ulit, itinigil ito habang paulit-ulit na sinusubukang beripikahin. Lumampas ang Layer 3 sandbox smoke test sa 300s na limitasyon ng wall-clock sa ~20,000-bar na window (2,400 araw ng SPY.USEQ daily bar), kaya hindi tumakbo ang mga yugto ng pagsusuri sa backtest, analyst at risk.

Buwanang spread na long sa panalo at short sa talo sa pagitan ng SPY (proxy ng large cap) at IWM (proxy ng small cap) sa USEQ. Bawat buwan, inihambing nito ang kanilang 12-buwang (252-session) relative momentum, binili ang nangunguna at nag-short sa nahuhuli.

Hindi nasukat: walang natapos na backtest. Walang laman ang ulat ng backtest, walang ulat ng optimization, at walang datos para sa return, Sharpe o bilang ng trade.

Pagsusuri

Epekto ng Momentum at Pag-ikot ng Estilo

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.