Mga Estratehiya
Pooled Nasdaq Q-Learning (2-Taóng Rolling Training): Pinipiling Daily Exposure mula sa mga State na may SMA-Difference
Resulta: Inabandona
PooledNasdaqQLearningSmaStateUseq
Buod ng Resulta
Isinasakatuparan ng strategy na ito ang panukala sa pooled-equity Q-learning paper bilang policy na nire-refit kada quarter, may 36 state at SMA-difference, at nagte-trade nang long, short o cash sa anim na large cap ng Nasdaq. Matapos ang 4 iteration, kabilang ang rebisyon ng kontrata na nag-ayos sa warm-up para magsimula ang trading noong 1994, maayos na tumakbo ang backtest ngunit halos walang edge: Sharpe na 0.043, profit factor na 1.016, average trade na 0.033% at drawdown na 20.6% na hindi na nabawi. Itinuring ng backtest review ang mga resultang ito bilang rolling out-of-sample test at napansing nagpapalit ng sign ang mga kumikitang state sa bawat era, na kahawig ng ingay mula sa multiple testing. Iniwan ang strategy bago ang optimization, kaya hindi na narating ang mga yugto ng analyst, risk at promotion.
Hypothesis
Pumalya ang kontrata, hindi ang agham: nagsimula sa simula ng data ang itinakdang warm-up na 1,272 bar, kaya walang masusuring bar ang window 0 at hindi nakapasa sa inner validation ang iisang nakapirming kandidato (error sa imprastraktura ang SSL ng window 64). Pinanatili ang idea, mga instrumento at mekanismo. Mga binago: training window mula 1,260 -> 504 bars at warm-up mula 1,272 -> 516 bars; idineklarang magsisimula ang evaluation sa 1994-01-03 para mauna ang ~2 taon ng history sa window 0 bilang warm-up sa bawat leg; min_state_samples 100 -> 50 para makabuo pa rin ng states ang mas maliit na pooled sample. Walang idinagdag na parameter na maaaring i-tune — nananatili itong eksperimento na may nakapirming parameter, kaya walang bagong search degree of freedom ang rebisyon.
Implementasyon
Pooled tabular Q-learning (gamma 0, alpha 1/bilang ng pagbisita) sa 36 SMA(5)-SMA(10) difference states (kasalukuyan + naunang bin) sa ADBE, AMGN, CSCO, INTC, MSFT, QCOM na daily USEQ bars. Long/short/cash na mga aksyon, reward = return mula next-open hanggang next-open matapos ibawas ang 0.05% RT. Sinasanay ang model sa naunang 504 session (rolling) at isang beses na nire-refit sa simula ng bawat 3-buwang calendar deployment window, at nakapirmi sa pagitan. Gagawin lamang ang aksyon kung Q >= 0.1%, n >= 50 at HAC t >= 1.96. Isinasagawa sa susunod na session open ang mga desisyon sa close. Bawat leg ay 10% ng equity (gross <= 60%), na may 5% reduce-only intrabar stop.
Mga Resulta ng Beripikasyon
Katanggap-tanggap itong pagsasakatuparan ng tuntuning hindi tinukoy ng kontrata. Kung nais ng Research Lead ng mahigpit na iisang policy bawat evaluation window, dapat ilagay sa kontrata ang haba ng deployment window.
Sinasabi ng hypothesis na isang beses nire-refit ang model sa simula ng bawat sinusuring deployment window at pinananatiling nakapirmi rito, ngunit hindi nito sinasabi kung gaano kahaba ang window. Itinatakda ng code ang window sa isang calendar quarter (refit_every_months=3, bagong nakapirming parameter na kinukuha mula sa timestamp ng bar, alinsunod sa check 20). Sa walk-forward na may reset_with_warmup, nagre-refit ang strategy sa simula ng bawat outer window. Kapag tumawid sa hangganan ng Enero/Abril/Hulyo/Oktubre ang ~90-araw na outer window, nagre-refit din ito minsan sa gitna ng window. Walang natututuhan sa pagitan ng mga refit, kaya hindi ito update habang sinusuri; gayunman, maaaring tumakbo ang dalawang nakapirming policy sa iisang sinusuring window.
Opsyonal: buuin ang series para sa bawat state sa lahat ng training session, gamit ang zero sa mga session na hindi lumitaw ang state, bago ilapat ang Bartlett lags.
Inilalapat ng _hac_z ang mga Newey-West lag nito (hac_lags=5) sa pinagsunod-sunod na listahan ng mga session kung kailan naganap ang state na iyon, hindi sa magkakasunod na calendar session. Kaya ang lag na 1 ay “nakaraang paglitaw ng state na ito,” na maaaring ilang linggo na ang nakalipas. Tama ang pag-cluster sa mga pooled sample sa parehong araw. Tinatantiya lamang ang bahagi ng serial correlation, at maaaring magkaiba nang kaunti ang HAC z-stat kumpara sa calendar-session na HAC.
Walang kailangan.
Ang min_bars_required() ay pinapalitan ng slow_sma+3 (13), samantalang ang nakarehistrong warm-up ay 516 na bar. Hindi ito nakapipinsala: hawak ng estratehiya ang cash hanggang magkaroon ang _train_buf ng 504 na may label na sesyon (humigit-kumulang 516 bar, katugma ng warm-up ng kontrata), at nakahanay pa rin ang mga leg dahil sa base barrier.
Sa bawat muling pag-aakma, sinusubok kung makalalagpas sa Q>=0.1% at HAC z>=1.96 ang isa sa 36 estado x 2 aksyon, kaya humigit-kumulang 3-4 estado ang maaaring pumasa dahil lamang sa pagkakataon sa antas na 5%. Natuklasan sa sariling replay ng developer na nag-a-activate ang humigit-kumulang kalahati ng mga window na 2 taon ng 1-3 estado. Kaya maaaring ingay mula sa maramihang pagsusuri ang alinmang aktibong estado sa halip na matatag na bentahe ng SMA estado. Suriin kung gaano katagal nananatiling aktibo ang mga estado sa magkakasunod na muling pag-aakma bago magtiwala sa positibong resulta.
Pagsusuri ng Backtest
- Sharpe
- 0.04
- Kabuuang Return
- 2.86%
- Max Drawdown
- 20.64%
- Kabuuang Trade
- 1329
- Win Rate
- 48.0%
- Profit Factor
- 1.02
Ginagawa ng code ang sinasabi ng binagong kontrata. Pinagsasama sa anim na stock at nire-refit kada quarter gamit ang naunang 504 session ang 36-state table (SMA(5)-SMA(10)/close, kasalukuyan at naunang bin). Nananatili itong nakapirmi sa pagitan ng mga refit, sinasala gamit ang Q>=0.1% at HAC z>=1.96, at isinasagawa sa susunod na open na may 5% stop. Naging maayos ang pag-aayos sa warm-up: nagsimula ang trading noong Abril 1994.
Malaki at maaasahan ang sample: 1,203 nakasarang trade sa loob ng 26-taóng development period (1994 hanggang Okt 2019). Malinis ang audit ng input.
Out-of-sample test na ng pamamaraan ang backtest na ito. Inaangkop lamang ang policy ng bawat quarter sa naunang dalawang taon at pagkatapos ay tine-trade ito nang walang pagbabago. Walang parameter na maaaring i-tune ang plano, kaya uulitin lamang ng walk-forward ang kaparehong tuntunin. Hindi makapagdaragdag ng edge ang optimization; narito na ang ebidensiya kung mayroon nito.
Halos walang net edge. Ang Sharpe ay 0.079 (95% CI -0.32 hanggang 0.47, probabilistic Sharpe 0.58), ang profit factor ay 1.033, at ang kabuuang return ay +5.7% sa loob ng 26 taon (CAGR 0.21%). Ang average na return kada trade ay 0.058% ng notional, bahagyang lampas sa USEQ na floor na 0.05% at mas mababa sa gustong 0.10%. Ang win rate ay 48.5% at ang payoff ratio ay 1.10.
Hindi na nababawi ng strategy ang peak nito bago ang -2000. Ang maximum drawdown na 20.6% ay lampas sa limit ng kontrata na 15%, at tumatagal nang 7,214 araw ang drawdown. Noong 2000, nalugi ng $17.3k ang strategy, na bumura sa lahat ng kinita noong 1995-1998 (+$16.4k). Mula noon, halos zero ang taunang P&L. Ang 2013-2015 (+$9.7k) lang ang positibong takbo, at matagal na nanatiling cash ang strategy (2007, 2010, 2012, 2016-2018).
Napatunayan ang alalahanin ni QA. Pinapadaan ng gate ang iilang state sa bawat refit, at hindi nananatili ang sign ng mga trade mula rito. Sinusundan ang mga panahong kumita (1996-98, 2013-15) ng mga panahong nalugi (2000, 2011) nang walang pare-parehong asal. Ganyan ang itsura ng ingay mula sa multiple testing, hindi ng matatag na edge sa SMA state.
Pagsusuri
Backtest gate: - Naglabas ang backtest ng ZERO trade — hindi kailanman na-trigger sa totoong data ang kondisyon sa pagpasok
Kasaysayan ng Iterasyon
Opsyonal na pangasiwaan ang on_position_changed kapag nagpalit ang panig, para mailagay muli ang stop anuman ang pagkakasunod-sunod ng pagpuno.
Sa pagbaligtad, isinusumite sa parehong bar ang pagsasara at ang kabaligtarang entry. Inilalagay ang bagong stop sa on_position_opened, at kinakansela ng on_position_closed ang bawat reduce-only order sa instrumento. Gumagana lamang ito dahil napupunan ang pagsasara bago ang bagong entry sa susunod na open, ayon sa developer. Kung entry muna ang punan ng engine, babaligtad ang netting position sa iisang PositionChanged event sa halip na sunod-sunod na pagsasara at pagbubukas, at walang stop ang bagong leg.
Walang kailangang baguhin sa backtest. Para sa paper, isaalang-alang ang pag-init ng buong 1272-bar training window mula sa history sa pagsisimula.
Nakadepende sa uptime ng proseso ang progreso ng training (_train_days at mga Q/count/HAC accumulator) at hindi ito nai-save. Kung mag-restart ang paper node bago mag-freeze, magsisimula muli ang training sa ibang window. Nananatiling naka-save ang mismong string ng frozen policy, kaya hindi naaapektuhan ang node na na-freeze na. Mahalaga lang ito kapag may restart, na hindi kritikal sa beripikasyon.
Wala.
Sadyang itinatakda ng override na min_bars_required sa slow_sma+3, kaya walang epekto rito ang babala sa Layer-1 base_shadow. Hiwalay na pinangangasiwaan ng _train_days ang training gating.
Hindi kailangan ng pagbabago sa code kung ang platform ang naglalagay ng window. Opsyonal na itala ang bilang ng sample sa bawat leg sa oras ng pag-freeze para makita kung kakaunti ang mga sample sa maagang pool.
Gumagamit ang training ng unang 504 naka-align na session na nakikita ng run, saka pinananatiling nakapirmi ang table sa natitirang bahagi nito. Tugma ito sa kontrata (minsan lang mag-refit kada sinusuring window, boundary_policy reset_with_warmup). Gayunman, hindi kailanman binabasa ng code ang parameters.data_start = 1994-01-03. Kung magsisimula ang run nang mas maaga roon (ADBE nagsisimula ang history sa 1986), gagamitin sa training ang anumang leg na nakalista noon, at maaaring mas maliit sa ~3,000 sample ang pool. Sa iisang full-history backtest, pamamahalaan ng isang maagang table ang buong history.
Opsyonal na buuin ang cluster series sa buong session grid (zero sa mga araw na walang state) para maging calendar lags ang mga lag.
Gumagana ang mga Newey-West lag sa _hac_z sa magkakasunod na entry ng pinagsunod-sunod na listahan ng session ng state (mga araw na naganap ang state), hindi sa mga calendar session lag. Tama ang paghawak sa pag-cluster sa parehong araw. Tinatantiya ang serial correlation gamit ang mga kapitbahay sa loob ng state, na maaaring ilang linggo ang pagitan. Ipinauubaya ng hypothesis sa Research Lead ang HAC procedure, kaya katanggap-tanggap itong pagtatantiya, hindi pagkakaiba.
Iwanang gaya nito maliban kung tumukoy ang Research Lead ng cool-off pagkatapos ng stop.
Pagkapuno ng 5% intrabar stop, muling papasok sa parehong panig ang susunod na bar kung L/S pa rin ang state mapping. Hindi tinutukoy ng hypothesis ang mangyayari pagkatapos ng stop, kaya tapat ito rito, ngunit maaaring paulit-ulit na matamaan ng stop sa masamang galaw ng trend.
Walang kailangang baguhin sa code ayon sa kontrata. Dapat isaalang-alang ito ng analyst sa pagbasa sa mga numero ng full history at umasa sa windowed evaluation.
Sa loob ng isang backtest, isang beses lang natututuhan ang policy gamit ang unang 504 naka-align na session at hindi na muling nire-refit (update_during_evaluation=false). Lubos na nakadepende ang pag-refit sa bawat deployment window sa muling pagpapatakbo ng evaluator sa bawat window gamit ang sarili nitong warm-up (boundary_policy reset_with_warmup). Kaya tine-trade ng karaniwang full-history backtest ang policy na 1994-1996 hanggang 2026.
Opsyonal: ilipat ito sa submit_stop_order(..., reduce_only=True, crossed_policy='market') para maging pare-pareho ang kahulugan ng session at venue.
Ang proteksiyon na stop ay isang raw na reduce-only stop_market na ipinadala kasama ng submit_order mula sa on_position_opened. Nasa 5% ang trigger nito mula sa presyo ng open fill, kaya hindi ito nalalampasan kapag inilagay at isa itong wastong intrabar stop. Hindi ito dumadaan sa mga helper na submit_stop_order/_submit_stop_market, kaya nalalampasan ang pangangasiwa ng mga helper sa session-venue. Walang itinakdang emulation_trigger.
Buod ng Resulta
Kapag nire-refit ang natutunang policy gamit ang rolling window at pinananatiling nakapirmi sa pagitan ng mga refit, ebidensiya na ng walk-forward ang karaniwang backtest. Kung wala itong ipinakitang gross edge, gaya rito kung saan nagbabago ang sign ng mga aktibong state sa bawat era, maaga itong iwan sa halip na i-optimize; dapat bagong hypothesis ang ibang pagbasa sa source.
Inabandona ito ng backtest review dahil premise_falsified. Dahil sa quarterly rolling refit, out-of-sample test na ng nakapirming pamamaraan ang backtest, at ipinakita ng test na iyon na walang gross edge (zero ang commissions). Lumabag sa paunang itinakdang limit na 15% ang max drawdown na 20.6%, at hindi na nabawi ng strategy ang peak nitong 1998. Dahil walang parameter na maaaring i-tune, hindi makatutulong ang optimization.
Isang bersiyon para sa Research Lead ng pinagsama-samang ideya ng Q-learning nina Chang, Lizardi at Shah: isang nakapirming tabular Q-table sa 36 na ni-normalize na SMA(5)-SMA(10) na mga estado ng pagkakaiba, pinagsama-sama sa ADBE, AMGN, CSCO, INTC, MSFT at QCOM sa USEQ. Muling iniakma ang talahanayan kada quarter gamit ang nakaraang 504 sesyon at maaari itong pumili ng long, short o cash, na isinasagawa sa susunod na open sa ilalim ng HAC confidence gate.
Nagsagawa ang backtest sa buong kasaysayan ng 1,329 trade para sa +2.86% kabuuang kita, Sharpe na 0.043, profit factor na 1.016, karaniwang trade na 0.033% ng notional at 20.6% pinakamataas na drawdown. Sa pagsusuri ng backtest, na sumaklaw sa 1994-2019, binanggit ang 1,203 trade, +5.7% sa kabuuan, Sharpe na 0.079 (95% CI -0.32 hanggang 0.47) at karaniwang trade na 0.058% kumpara sa USEQ na hangganang 0.05%.
Pagsusuri
Pag-optimize ng mga Kita Gamit ang Hurst Exponent at Q Learning sa mga Estratehiya sa Momentum at Mean Reversion
Pagsusuri
max_drawdown_pct
Nabigo ang backtest o walang ibinalik na ulat
Nabigo ang max_drawdown_pct constraint o walang ebidensiya para rito
mga kandidatong undefined; walang PBO na para lamang sa mga nakaligtas
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.