Mga Estratehiya
Momentum sa 12-1 Buwan ng Small Portfolio sa Siyam na Orihinal na Select Sector SPDR: Long sa Top-3 / Short sa Bottom-3, Pantay ang Timbang na 50/50 Gross, Buwanang Rebalance (USEQ DAILY, long-short, 2 parameter)
Resulta: Inabandona
SectorSpdr12m1MomentumTop3Bottom3LS
Buod ng Resulta
Inangkop ng SectorSpdr12m1MomentumTop3Bottom3LS ang small-portfolio momentum strategy ng QuantConnect para sa siyam na orihinal na sector SPDR, nagla-long sa top-3 at nagsho-short sa bottom-3 batay sa 12-1-buwang kita, na may buwanang rebalance sa venue na walang komisyon na USEQ. Sa 3 ulit, hindi pumasa sa verification ang code dahil lumampas sa 300s na wall-clock limit ang bawat Layer 3 sandbox backtest sa ~20,000-bar na window. Iniwan ang run habang paulit-ulit na sinusubukang mag-verify, kaya walang naging resulta sa backtest, optimization, analyst o risk stage, at hindi kailanman nasubok ang momentum hypothesis.
Hypothesis
Pinananatili ang umiiral na napatunayang implementasyon at inaayos ang timeout ng Layer-3 sa pamamagitan ng pag-cache ng kalkulasyon ng momentum at ranggo ng portfolio hanggang sa susunod na rebalance sa buwan ng kalendaryo. Ina-update pa rin ng mga daily bar ang naka-synchronize na rolling buffer, habang iniiwasan ng karaniwang mga bar ang paulit-ulit na pag-scan at pag-aayos ng ranggo ng momentum. Nakaangkla pa rin sa mga timestamp ng bar ang buwanang iskedyul para magkapareho ang resulta matapos mag-restart.
verification_loop: sandbox_timeout: Nabigo ang verification (Layer 3 — sandbox backtest): lumampas ang smoke test sa 300s na wall-clock limit sa ~20000-bar na window (2400 araw ng XLB.USEQ-1-DAY-LAST-EXTERNAL). Karaniwang nangangahulugan ito ng gawaing ginagawa sa bawat bar na lumalaki kasabay ng kasaysayan — 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 ONCE sa __init__ at gamitin ang bisect, o i-cache ang mga lookup batay sa timestamp, para O(log n) at hindi O(n) ang gastos sa bawat bar.
Implementasyon
Buwanang 12-1 momentum ranking sa siyam na orihinal na Select Sector SPDR ETF. May mga long position na magkakapantay ang timbang sa tatlong nangungunang sektor at mga short position sa tatlong pinakamababang sektor, na may 50% gross exposure bawat panig.
Mga Resulta ng Beripikasyon
sandbox_timeout: Nabigo ang verification (Layer 3 — sandbox backtest): lumampas ang smoke test sa 300s na wall-clock limit sa ~20000-bar na window (2400 araw ng XLB.USEQ-1-DAY-LAST-EXTERNAL). Karaniwang nangangahulugan ito ng gawaing ginagawa sa bawat bar na lumalaki kasabay ng kasaysayan — 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 ONCE sa __init__ at gamitin ang bisect, o i-cache ang mga lookup batay sa timestamp, para O(log n) at hindi O(n) ang gastos sa bawat bar.
Kasaysayan ng Iterasyon
Nabigo ang verification (Layer 2 — synthetic scenarios): Mga parameter na ginamit: ['skip_days', 'n_per_side', 'min_notional', 'lookback_days', 'gross_per_side'] Tiyaking itinatakda ng __init__ ang lahat ng attribute mula sa self.parameters.get(). - steady_uptrend: AttributeError: walang attribute na 'orders_inflight' ang '_MockCache' (timestamp ng bar: 1735706040000) - steady_downtrend: AttributeError: walang attribute na 'orders_inflight' ang '_MockCache' (timestamp ng bar: 1735706040000) - flat_ranging: AttributeError: walang attribute na 'orders_inflight' ang '_MockCache' (timestamp ng bar: 1735706040000) - volatility_spike: AttributeError: walang attribute na 'orders_inflight' ang '_MockCache' (timestamp ng bar: 1735706040000) - zero_volume: AttributeError: walang attribute na 'orders_inflight' ang '_MockCache' (timestamp ng bar: 1735706040000) - price_gap: AttributeError: walang attribute na 'orders_inflight' ang '_MockCache' (timestamp ng bar: 1735706040000)
Buod ng Resulta
Kailangang sapat na magaan ang multi-instrument per-bar path para matapos ang 20k-bar smoke test sa 300s: mag-rank muli lang tuwing simula ng buwan at iwasan ang per-bar na mga query sa order cache sa lahat ng leg, na rito ay tumakbo sa bawat bar sa pamamagitan ng calculate_signal/_reconcile.
Iniwan ito sa verification loop matapos ang 3 ulit dahil lumampas sa 300s na wall-clock limit ang Layer 3 sandbox backtest sa ~20,000-bar (2,400-araw) na XLB.USEQ daily window. Hindi tumakbo ang backtest review, optimization, analyst review at risk review.
Kunin ang 12-1 buwang sector momentum sa pagla-long sa top-3 at pagsho-short sa bottom-3 ng siyam na orihinal na Select Sector SPDR ETF (USEQ araw-araw), pantay ang timbang na 0.5 gross bawat panig, buwanang nire-rebalance.
Walang sinukat na performance: walang laman ang ulat ng backtest at walang ulat ng optimization, kaya walang datos para sa return, Sharpe o bilang ng trade. Tinataya lang ng hypothesis ang humigit-kumulang +0.8% mean return ng trade kada leg kumpara sa mga 0.04% round-trip cost at 500-700 round trip sa buong buhay ng strategy.
Pagsusuri
Epekto ng Momentum sa mga Stock sa Maliliit na Portfolio
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.