Mga Estratehiya
Quantiacs LSTM Multiple-Features Port: AAPL pang-araw-araw na regressor para sa pagtaas sa susunod na open, raw na output bilang target weight (AAPL.USEQ 1-DAY, 2x64 LSTMCell, LBFGS, muling sinasanay kada 360 bar, nakapirming default ng source)
Resulta: Inabandona
QuantiacsLstmMultiFeatureAaplUseq
Buod ng Resulta
Tinangka ng estratehiya ang tapat na NumPy port ng modelong LSTM ng Quantiacs para sa pang-araw-araw na AAPL target weight, kasama ang idineklarang paglihis sa initialization na RNG. Sa limang iteration, hindi nalutas ang katapatan ng execution dahil walang kinakailangang hook para sa open ng susunod na session ang platform. Nabigo ang huling sandbox verification matapos iproseso ang 0 bar; hindi nasuri ang performance at inabandona ang run bago ang optimization o mga susunod na review.
Hypothesis
Kongkreto at maisasagawang estratehiya ito, na itinugma sa eksaktong instrumento at laki ng bar ng source. Kulang sa representasyon ang USEQ (6.2%), at nagdaragdag ang estratehiya ng pamilya ng mekanismong ML sa halip na isa pang trend variant. Naka-freeze ang mga parameter sa mga default ng source dahil tapat na reproduksiyon ito. Ang tanging paglihis ay ang torch-to-numpy initialization na RNG, na idineklara sa simula.
verification_loop: Nabigo ang beripikasyon (Layer 3 — backtest sa sandbox): execution_contract_unsupported: Nangangailangan ang AAPL na mga desisyon sa pagsasara araw-araw ng walang pasubaling pagpapatupad sa pagbubukas ng susunod na sesyon. Walang suportadong hook ang FactoryStrategy para sa pagbubukas ng susunod na sesyon. Hindi nasasaklaw ng pagtatayang stop/market-if-touched na OCO ang mga pagbubukas na walang pagbabago at mga sesyong walang galaw, kaya naka-disable ito. Kailangan ang suporta ng engine bago masuri nang tapat ang hypothesis na ito. Uri ng bar na ginamit: AAPL.USEQ-1-DAY-LAST-EXTERNAL, Mga bar na naproseso: 0 Tiyaking nakakagawa ng mga trade ang iyong estratehiya gamit ang ibinigay na datos at mga parameter.
Implementasyon
Pagsasalin ng Quantiacs MIT AAPL daily LSTM gamit ang dating numpy model, pinananatili ang BPTT, L-BFGS, nakaiskedyul na retraining at mga kalkulasyon ng target weight. Tahasang iniuulat na ngayon ng pagsusumite ng order ang execution_contract_unsupported sa halip na isumite ang di-wastong aproksimasyong OCO. Naka-block ang bersyong ito habang hinihintay ang suporta ng engine.
Mga Resulta ng Beripikasyon
Nabigo ang beripikasyon (Layer 3 — backtest sa sandbox): execution_contract_unsupported: Nangangailangan ang AAPL na mga desisyon sa pagsasara araw-araw ng walang pasubaling pagpapatupad sa pagbubukas ng susunod na sesyon. Walang suportadong hook ang FactoryStrategy para sa pagbubukas ng susunod na sesyon. Hindi nasasaklaw ng pagtatayang stop/market-if-touched na OCO ang mga pagbubukas na walang pagbabago at mga sesyong walang galaw, kaya naka-disable ito. Kailangan ang suporta ng engine bago masuri nang tapat ang hypothesis na ito. Uri ng bar na ginamit: AAPL.USEQ-1-DAY-LAST-EXTERNAL, Mga bar na naproseso: 0 Tiyaking nakakagawa ng mga trade ang iyong estratehiya gamit ang ibinigay na datos at mga parameter.
Sa sandbox, kumikilos ang estratehiya na parang halos long at bahagyang naka-size na AAPL holder: beta 0.415, ugnayan sa benchmark na 0.94, Sharpe 0.89 at information ratio -0.76 laban sa buy-and-hold. Nireregress ng modelo ang label na pagtaas ng susunod na open na 0/1, kaya kadalasang nasa (0,1) ang mga output nito. Dahil dito, fractional-long na AAPL na posisyon ito sa halip na directional timing signal. Suriin kung mas mataas sa beta x AAPL ang return sa buong history. Alalahanin din ang ledger: hindi naging flat ang posisyon sa sandbox (0 saradong posisyon, 1 bukas, 1230 fill). Kaya total_trades at avg_trade_return_pct ay 0 at walang sinasabi tungkol sa economics ng bawat trade. Dapat husgahan ng analyst batay sa MTM equity curve at IR laban sa buy-and-hold, hindi sa ledger ng mga saradong trade.
Pagsusuri
Backtest gate: - Nakagawa ang backtest ng ZERO trade — hindi kailanman nag-trigger ang kondisyon ng entry sa totoong datos
Kasaysayan ng Iterasyon
Bumuo ng nakapirming retraining grid mula sa aktuwal na USEQ session na nakaangkla sa petsa ng pagsisimula ng source. Panatilihing eksaktong 360 trading bar ang pagitan ng mga retrain nang hindi gumagamit ng counter na nakabatay sa restart.
Hinihingi ng hypothesis ang retraining kada 360 pang-araw-araw na trading bar. Ibinubukod ng implementasyon ang weekday index na may mga holiday ng palitan na US, kaya nagre-retrain ito kada humigit-kumulang 351 session. Binabago nito ang mga training slice, model reset at prediction. Ang paglihis lang sa implementasyon ng numpy/PyTorch ang pinahihintulutan ng brief; hindi binabago ng dagdag na paglihis sa iskedyul na nasa paliwanag ng developer ang hypothesis.
I-queue ang target na nakabatay sa close at isagawa ito sa pamamagitan ng napatunayang price event sa susunod na session. Idagdag ang kinakailangang suporta ng engine/feed kung hindi kayang katawanin ng pang-araw-araw na bar lang ang event na iyon; lalayo rin sa nakasaad na contract ang pagpapaliban hanggang sa susunod na pang-araw-araw na close.
Ginagamit ng pang-araw-araw na weights ang close, open at high ng nakumpletong bar, saka agad nagsusumite ng mga market order. Agad ding isinusumite ang mga unang entry sa base template. Ayon sa naka-pin na dokumentasyon ng engine, isinasagawa ang mga market order sa kasalukuyang simulated market price; dito, iyon ang close ng nakumpletong bar. Tahasang hinihingi ng hypothesis na isagawa ang mga desisyong batay sa close sa susunod na magagamit na presyo. Binabago ng fill sa parehong close ang execution contract at isinasama ang overnight exposure na hindi umiiral sa execution sa susunod na session.
I-load ang history pabalik hanggang sa naka-iskedyul na training anchor at prediction lookback nito, o ibalik ang napatunayang model at recurrent state. Huwag gumamit ng mas huling training anchor kapag kulang ang history.
Nakadepende ang training anchor sa na-load na history buffer: max(idx[0], lookback_period-1, train_period-1). Kapag nagsimula ang window o restart sa loob ng retraining block, nagsasanay ang modelo sa mas huling bar na available sa halip na buuin muli ang nakaiskedyul na modelo. Dahil dito, maaaring magkaiba ang training data at mga prediction para sa parehong kasalukuyang timestamp, depende sa simula ng replay. Sa pangkalahatan, hindi kayang buuin muli ng 160-bar warmup ang modelong sinanay nang mas maaga sa loob ng 360-bar block at ang 155-bar na initialization ng prediction nito.
Itakda ang evaluation.warmup_bars sa >= 515. Kung mahalaga ang maiikling window, dagdagan ang batayang _max_bars para sa estratehiyang ito (o panatilihing napupunan ang sarili nitong buffer mula sa on_bar) upang muling mabuo ang nakaiskedyul na modelo sa gitna ng block.
Mas maikli kaysa sa kailangan ng estratehiyang ito ang _optimization_plan.evaluation.warmup_bars na 160. Kailangan nito ang nakaiskedyul na anchor (session 360*b) at 154 na naunang bar sa buffer nito, kaya maaaring umabot sa 359+155 = 514 bar bago ang di-tiyak na simula ng window. Mananatiling flat ang reset_with_warmup window hanggang sa susunod na nakaiskedyul na retrain, maliban kung may anchor sa o pagkatapos ng simula ng warm-up + 154. Maaari itong umabot sa 360 na session, kaya halos o lubusang flat at kulang sa lakas ang maiikling validation window. 500 lang na pangunahing bar ang itinatabi ng batayang template, kaya hindi maaabot ng pagse-seed mula sa self._bars ang mga anchor na lampas sa humigit-kumulang 345 bar kahit pahabain ang warm-up. Kinikilala ito sa rationale at tapat ito (walang pinalit na anchor), at hindi nito naaapektuhan ang nag-iisang mahabang full-history run na nagsisimula sa 1980.
Katanggap-tanggap. Opsyonal na subaybayan ang id ng kinanselang order list at huwag isama ang mga order na iyon sa orders_open guard.
Tinatawag ng _cancel_stale_orders ang cancel_all_orders sa simula ng calculate_signal. Kung hindi pa napoproseso ang pagkansela sa oras na suriin ng should_exit / _process_primary ang orders_open, malalaktawan ang rebalance ng session na iyon at muling pagpapasyahan sa susunod na bar. Bunga nito ang pagkaantala ng isang session sa mga bihirang araw na walang trigger (open na nasa loob ng isang tick mula sa nakaraang close at walang intrabar touch). Hindi ito paglabag sa kawastuhan.
Walang kailangan. Panatilihing nakapirmi ang max_abs_weight at leverage sa 1.0, gaya ng nasa plano.
Disenyong laging may posisyon ito at walang stop, araw-araw na nire-rebalance mula sa get_account_equity(). Nagbababala ang Lesson L148 laban sa ganitong mga disenyo. Dito, limitado ang panganib: |w| <= max_abs_weight 1.0 (tahasang clamp), leverage na 1.0, iisang instrumento, kaya 1.0x equity ang pinakamasamang gross, pasok sa Reg-T ng USEQ na 2x. Walang stop ang source, kaya sisira sa port ang pagdagdag nito. 16.7% ang maximum drawdown sa sandbox.
Nabigo ang verification (Layer 1.5 — pagkakatugma ng hypothesis/config) [class=hypothesis_mismatch]: - Itinatakda ng optimization_plan ang leverage sa 1.0
Gumamit ng hook na sinusuportahan ng engine para sa execution sa bukas ng susunod na session, upang walang kondisyon na maisagawa sa bukas ng kasunod na session ang naka-queue na desisyon sa close. Suriin ang mga kasong unchanged open, gap-up, gap-down at flat session. Kung walang ganitong hook, iulat na hindi suportado ang execution contract sa halip na ituring na tapat ang OCO approximation.
Hindi ginagarantiyahan ng OCO trigger pair ang kinakailangang execution sa bukas ng susunod na session. Kapag ang nakaraang close ay 100.00 at ang tick ay 0.01, ang mga trigger ay 100.01 at 99.99. Kung magbukas ang susunod na session sa 100.00, walang order na magti-trigger sa open. Isasagawa ng mas huling intraday crossing ang rebalance sa ibang presyo; kapag nanatili ang session sa pagitan ng mga trigger, hindi ito mapupunan hanggang sa pagkansela. Binabago nito ang execution contract ng hypothesis. Hindi nalulutas ng no-op flush callback ang puwang na ito. Ang paglihis lang sa implementasyon ng numpy ang idineklara ng hypothesis, hindi ang conditional intraday execution.
Magbigay ng sapat na warmup para buuin muli ang naunang nakaiskedyul na modelo, hanggang 513 na naunang session, o ibalik ang modelo at recurrent state nito. Panatilihin ang orihinal na mga retraining anchor.
Hindi kayang buuin muli ng nakapirming evaluation warmup na 160 bar ang bawat nakaiskedyul na modelo. Kailangan ng window na nagsisimula sa bandang huli ng 360-session bucket ang nakaiskedyul na anchor at ang 154 na naunang prediction-history bar nito, na posibleng umabot sa 513 na naunang session. Kung hindi naibigay ang mga bar na iyon, magbabalik ng false ang _retrain, at hindi na mababawi ng mga susunod na retry ang history bago ang window. Mananatiling flat ang estratehiya hanggang sa susunod na anchor na kayang buuin muli kahit tinukoy ang araw-araw na mga prediction.
Buod ng Resulta
Kailangan ng engine support para sa execution sa bukas ng susunod na session bago maipagpatuloy ang estratehiyang ito, kung tapat na evaluation ang kailangan.
Pagkatapos ng limang iteration, nabigo ang verification dahil walang suportadong hook ang platform para sa walang-kondisyong execution sa bukas ng kasunod na session. Hindi na pinagana ang OCO approximation dahil hindi nito natutugunan ang mga unchanged open at flat session.
I-port ang two-layer LSTM strategy ng Quantiacs sa AAPL pang-araw-araw na bar, hulaan ang direksyon sa susunod na open at gamitin ang clipped raw model output bilang target portfolio weight.
Pinroseso ng sandbox backtest sa Layer 3 ang 0 bar; walang iniulat na return, Sharpe o trade metric. Hindi naabot ang mga yugto ng optimization at susunod na pagsusuri.
Pagsusuri
strategy-ml_lstm_multiple_features
Pagsusuri ng Backtest
- Sharpe
- 0.51
- Kabuuang Return
- 599.20%
- Max Drawdown
- 36.15%
- Win Rate
- 0.0%
- Profit Factor
- 0.00
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.