Lumaktaw papunta sa nilalaman
Lahat ng estratehiya

Mga Estratehiya

Pagpapatuloy ng Earnings-Gap (PEAD Proxy), Long-Short na Basket na Batay sa Pangyayari sa 20 na Likidong US na Malalaking Kumpanya (USEQ 1-DAY — pumasok sa CLOSE ng isang overnight gap na may mataas na volume at >=3-sigma, sundan ang drift matapos ang anunsyo sa humigit-kumulang 15 na session, 3-parametro)

Resulta: Inabandona

UsLargeCapEarningsGapContinuationLS

Buod ng Resulta

Nag-trade ang UsLargeCapEarningsGapContinuationLS sa post-earnings drift sa 20 US large cap, pumapasok sa pagsasara matapos ang high-volume na overnight gap na humigit-kumulang 3 sigma o higit pa at sumusunod sa direksiyon ng gap. Mukhang maganda ang nakaulat na optimization: 58.65% return, Sharpe na 1.28 sa 148 trade, 4.20% average return bawat trade, pumasa sa holdout (Sharpe na 1.52) at PBO 0.27. Gayunman, hindi ito pumasa sa programme-wide FDR check, at halos lahat ng trade ay long (133 sa 148). Sa iteration 8, pumalya ang code sa Layer 3 sandbox backtest dahil lumampas sa limitasyong 300 segundo; itinigil ang run bago magbigay ng hatol ang analyst o risk team.

Hypothesis

Isang LONG-SHORT, MULTI-INSTRUMENT, EVENT-DRIVEN na continuation strategy sa US equities (venue USEQ, 1-DAY bar) na kumukuha ng post-earnings-announcement drift (PEAD) WITHOUT nangangailangan ng earnings calendar: lumilitaw ang anunsyo ng earnings sa price tape bilang di-pangkaraniwang laki ng overnight gap na may di-pangkaraniwang taas ng volume. Sinusuri ng strategy ang takdang universe ng 20 likidong large cap sa bawat daily bar, minamarkahan ang mga pangalang lampas sa ~3x ng trailing daily volatility sa 60……Magpakita ng higit paMagpakita ng mas kaunti

Isang LONG-SHORT, MULTI-INSTRUMENT, EVENT-DRIVEN na continuation strategy sa US equities (venue USEQ, 1-DAY bar) na kumukuha ng post-earnings-announcement drift (PEAD) WITHOUT nangangailangan ng earnings calendar: lumilitaw ang anunsyo ng earnings sa price tape bilang di-pangkaraniwang laki ng overnight gap na may di-pangkaraniwang taas ng volume. Sinusuri ng strategy ang takdang universe ng 20 likidong large cap sa bawat daily bar, minamarkahan ang mga pangalang lampas sa ~3x ng trailing daily volatility sa 60 session ang gap ng open kumpara sa naunang close, at may average volume na >= 2x; pumapasok ito AT THE CLOSE OF THE EVENT DAY sa DIRECTION ng gap (long sa gap-up, short sa gap-down — pinahihintulutan ng Reg-T margin ang short leg), at humahawak nang takdang ~15 session. Sadyang NOT ito pumapasok sa open (hindi maaaring i-trade ang mismong pagtalon) at NOT nito kinokontra ang gap — pagpapatuloy ang dokumentadong anomalya ng UNDER-reaction. Sabay nitong pinupunan ang tatlong pinakamalayo sa target na portfolio bucket: USEQ ay 1.6% sa 3074 eksperimento, long_short ay 14.8%, at multi-instrument ang 18.5%; iniiwasan din nito ang BINANCE (70.0%, doble ng limitasyong 40%). Tahasan itong NOT sa daily ETF regime-rotation / cross-asset dual-momentum family na pinapatigil ng aralin L99, at NOT sa cross-sectional weekly reversal na nabigo noon.

Nasa code na ng iteration-7 ang lahat ng apat na pagpipino sa library: ang mga paglabas para sa gap-fill at kabaligtarang gap, ang time stop na 5 session at naka-scale ayon sa sigma, ang inverse-vol sizing na nililimitahan sa [0.5, 1.5], at iisang simetrikong threshold na nakatakda ang hold_days sa 20 at may isang parameter na maaaring hanapin. Nagmumula ang blocker na FDR sa kung gaano kataas ang Sharpe kumpara sa buong programa (4 sa 301 ang napanatili). Walang pag-aayos sa code na makapag-aalis nito, at lalo……Magpakita ng higit paMagpakita ng mas kaunti

Nasa code na ng iteration-7 ang lahat ng apat na pagpipino sa library: ang mga paglabas para sa gap-fill at kabaligtarang gap, ang time stop na 5 session at naka-scale ayon sa sigma, ang inverse-vol sizing na nililimitahan sa [0.5, 1.5], at iisang simetrikong threshold na nakatakda ang hold_days sa 20 at may isang parameter na maaaring hanapin. Nagmumula ang blocker na FDR sa kung gaano kataas ang Sharpe kumpara sa buong programa (4 sa 301 ang napanatili). Walang pag-aayos sa code na makapag-aalis nito, at lalo pang palalalain ng pagdaragdag ng mga knob na maaaring hanapin ang parusa sa deflated-Sharpe. Kaya hindi binago ang lohika ng trading. Ang tanging pagbabago ay ang kahilingan sa pag-uulat ng pagpipinong 4: naka-log at nakaimbak na ngayon bilang mga persisted scalar ang P&L at bilang ng mga exit reason ng long leg at short leg, kaya magkahiwalay na sinusuri ang mga leg sa halip na i-tune nang magkahiwalay. Hindi mahigpit na minimum ang FDR, kaya desisyon ng analyst kung magbibigay ng waiver. Kung mabigo pa rin ang eksaktong espesipikasyong ito sa FDR, inirerekomenda kong itigil na ang proseso sa halip na magpatuloy sa pag-tune. Paalala: hindi ko naisulat ang outbox file sa workspace/outbox/developer/strategy_e0ce2ad3-95ba-4478-a516-a601c8c76554-c10fef5ace.json dahil dalawang beses bumagsak ang pagsusuri ng pahintulot ng tool, kaya itong sagot na JSON lang ang output. Gayundin, wala sa brief ang previous_config, kaya muling binuo ang config mula sa code at hypothesis: META ang primary, ang iba pang 19 pangalan bilang mga dagdag na leg sa USEQ 1-DAY bar, at leverage na 1.0.

verification_loop: sandbox_timeout: Nabigo ang verification (Layer 3 — sandbox backtest): lumampas sa 300 segundo ang smoke test sa ~20000-bar na window (2400 araw ng META.USEQ-1-DAY-LAST-EXTERNAL). Karaniwang nangangahulugan ito na lumalaki kasabay ng history ang trabaho bawat bar — halimbawa, muling sinusuri ang buong funding/supplementary series, o muling binubuo ang listahan at tinatawag ang 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 ayon sa timestamp, para O(log n) sa halip na O(n) ang gastos bawat bar.

Implementasyon

Event-driven na basket na long/short at nagte-trade sa post-earnings drift sa 20 likidong US large cap (USEQ, daily bar). Bawat session, naghahanap ito ng anumang stock na may overnight gap na hindi bababa sa gap_sigma_threshold (default na 4) ulit ng daily sigma nito sa loob ng 60 session, at may average volume na hindi bababa sa 2x. Pumapasok ito sa pagsasara ng araw na iyon, sa direksiyon ng gap. Nagsasara ang posisyon sa unang mangyari sa mga ito: ganap na mapunan ang gap (magsara ang presyo pabalik lampas sa pagsasara bago ang event), magkaroon ng bagong salungat na gap na hindi bababa sa 2 sigma at may volume na hindi bababa sa 1.5x, umabot sa 5-session time stop kung mas mababa ang return sa 0.5x entry sigma, o lumipas ang 20 session. Ang laki ng posisyon ay equity x 7.5% x clamp(1.8% / sigma, 0.5, 1.5), na may hindi hihigit sa 10 pangalan at gross na nililimitahan sa 1.5x ng equity. Itinatala sa bawat pagsasara ang aktuwal na return ng long at short leg at ang bilang ng bawat dahilan ng pagsasara.

Mga Resulta ng Beripikasyon

sandbox_timeout: Nabigo ang verification (Layer 3 — sandbox backtest): lumampas sa 300 segundo ang smoke test sa ~20000-bar na window (2400 araw ng META.USEQ-1-DAY-LAST-EXTERNAL). Karaniwang nangangahulugan ito na lumalaki kasabay ng history ang trabaho bawat bar — halimbawa, muling sinusuri ang buong funding/supplementary series, o muling binubuo ang listahan at tinatawag ang 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 ayon sa timestamp, para O(log n) sa halip na O(n) ang gastos bawat bar.

Hindi kailangan ng pagbabago sa code para sa hypothesis na ito. Kung nais ng analyst na limitahan ang epekto, patakbuhin muli nang bahagyang mas mataas ang _volume_mult (hal. 2.2) at tiyaking matatag ang bilang ng trade at kita bawat trade — hindi dapat nasa bingit ang gate.

Realismo sa oras ng pagpapatupad ng volume gate. Hinihingi ng event test na volume_ratio = volume_t / mean(prior 60 volumes) >= 2.0, kung saan ang volume_t ang volume ng FULL session, at isinusumite ang entry sa mismong bar na iyon kaya napupunan ito sa close ng mismong session na iyon. Ito mismo ang nakarehistro nang maaga ng hypothesis ('pumasok sa CLOSE ng event day'), at ito ay NOT look-ahead sa mga termino ng engine (ang bar ay close-stamped, ang gap_z ay gumagamit lamang ng session open at ng mga……Magpakita ng higit paMagpakita ng mas kaunti

Realismo sa oras ng pagpapatupad ng volume gate. Hinihingi ng event test na volume_ratio = volume_t / mean(prior 60 volumes) >= 2.0, kung saan ang volume_t ang volume ng FULL session, at isinusumite ang entry sa mismong bar na iyon kaya napupunan ito sa close ng mismong session na iyon. Ito mismo ang nakarehistro nang maaga ng hypothesis ('pumasok sa CLOSE ng event day'), at ito ay NOT look-ahead sa mga termino ng engine (ang bar ay close-stamped, ang gap_z ay gumagamit lamang ng session open at ng mga strictly-prior na 60 close, at ang sigma/avg_vol ay kinukuwenta BEFORE, at ang return at volume ngayong araw ay idinaragdag sa mga deque pagkatapos nito, kaya walang current-bar leakage sa z-score). Ang caveat sa realismo ay ang isang live na implementasyon ay dapat maglagay ng market-on-close order ilang minuto bago ang bell, at sa puntong iyon ang pinal na volume ng araw ay humigit-kumulang 95-99%, hindi pa ang 100%. Para sa 2x-average-volume gate sa isang earnings day, bihira nitong babaguhin ang desisyon, ngunit ang ilang marginal na event na malapit sa threshold ay maaaring magkaiba nang live.

Imbes na index, itabi sa _entry_sess ang session TIMESTAMP (self._entry_sess[iid] = self._session_ts[-1], saka gumamit ng bisect gaya ng ts_opened path), o ibawas ang offset ng pagputol sa bawat nakaimbak na index kapag pinaiikli ang _session_ts.

Nakatagong panganib ng lipas na index sa fallback path ng _sessions_held. Iniimbak ng self._entry_sess ang ABSOLUTE index sa self._session_ts, pero pinuputol ng calculate_signal ang listahang iyon (kapag len > 600, pinapalitan ito ng huling 400 entry), kaya nalilipat ng 201 ang bawat index nang hindi ina-update ang _entry_sess. Kung ginagamit ang nakaimbak na index bago putulin, magiging negatibo ang (n - 1) - start, at ibinabalik naman ng max(0, ...) sa zero ang orasan ng paghawak; dahil dito, maaaring manatili nang walang hanggan ang isang posisyon. Hindi naaabot sa ngayon ang path na ito: ginagamit lang ito kapag ts_opened ng posisyon ay 0/wala o mas luma kaysa _session_ts[0], at palaging pinupunan ng NautilusTrader ang Position.ts_opened sa backtest, paper at live trading, habang humigit-kumulang 26x lang ang hold_days ng 30 para sa grid na nagpapanatili ng 400 session. Itinuturing itong nakatagong panganib, hindi aktibo.

Pagsusuri

Hinarang ng mga numeric gate ang pag-promote — ayusin ang mga ito bago i-promote: - hindi natugunang soft floor: hindi pumapasa sa antas ng programa na FDR (pinananatili ng Benjamini-Hochberg q=0.10 ang 4 sa 301 kandidato) ## Mga pagpino sa library (mula sa knowledge library; subukan ang mga ito, huwag ipagpalagay na epektibo) Walang pananaliksik ang library tungkol sa PEAD, pero iisa ang itinuturo ng teorya nito sa gap, mga stop model, mga tala sa risk parity, mga tala sa overfitting, at isang halimbawang……Magpakita ng higit paMagpakita ng mas kaunti

Hinarang ng mga numeric gate ang pag-promote — ayusin ang mga ito bago i-promote: - hindi natugunang soft floor: hindi pumapasa sa antas ng programa na FDR (pinananatili ng Benjamini-Hochberg q=0.10 ang 4 sa 301 kandidato) ## Mga pagpino sa library (mula sa knowledge library; subukan ang mga ito, huwag ipagpalagay na epektibo) Walang pananaliksik ang library tungkol sa PEAD, pero iisa ang itinuturo ng teorya nito sa gap, mga stop model, mga tala sa risk parity, mga tala sa overfitting, at isang halimbawang earnings event-driven. Magdagdag ng gap-fill/opposite-gap invalidation exit at 5-session na time stop, itakda ang laki ng mga posisyon batay sa inverse volatility, at paliitin ang saklaw ng paghahanap. Layunin ang mas mataas na Sharpe bawat parameter para makapasa ang estratehiya sa antas ng programa na FDR. 1. [exit] Gap-fill / opposite-gap invalidation exit: Itago ang ref_close = ang pagsasara ng session bago ang event (close_{t-1} sa araw ng event). Para sa long: lumabas sa closing price ng anumang session na hawak mo kung saan ang close < ref_close, ibig sabihin, lubos nang napunan ang gap. Para sa short: lumabas kung close > ref_close. Lumabas din nang maaga sa close kapag may NEW event sa kabaligtarang direksiyon sa parehong pangalan: gap na 2.0 sigma o higit pa laban sa posisyon habang volume_ratio >= 1.5, ibig sabihin, gap-down habang long o gap-up habang short. Kung hindi, panatilihin ang hold_days exit. Ginagamit ng lahat ng pagsusuri ang pagsasara ng session, kaya walang look-ahead. — Sa ngayon, lahat ng trade ay tumatagal sa buong 23 session anuman ang mangyari. Ang tesis ng drift ay pagpapatuloy dahil sa mabagal na pagtugon, kaya pinabubulaanan ng gap na lubos na nagsara ang tesis para sa event na iyon. Sinasabi ng panimulang gabay ng FMZ na ang gap level ay nagiging sanggunian ng suporta/paglaban sa hinaharap at itinuturing na simula ng pagbilis sa direksiyon ng gap ang bagong gap. Inililista ng artikulo tungkol sa stop model ang “bumubuo ang presyo ng downward breakaway gap” bilang pattern stop (形态止损), at eksaktong isinusulat ang exit na iyon: “kapag may downward gap sa K-line, mag-stop loss ang long” (K线出现向下跳空缺口,多头止损). Dapat pataasin ng maagang pagputol sa mga bigong event ang profit factor (1.58) at Sharpe (0.57) nang walang bagong parameter na hahanapin. (sanggunian: 发明者量化交易入门--从基础到实战 p.1; 止损模型的原理及编写 p.1) 2. [stop] Maagang time stop kapag hindi nagsisimula ang drift: Sa pagsasara ng ika-5 session pagkatapos pumasok, lumabas kung mas mababa sa +0.5 x sigma_entry ang kita ng posisyon sa direksiyon ng gap (ang pang-araw-araw na stdev sa loob ng 60 session na itinakda sa pagpasok). Katumbas ito ng humigit-kumulang +0.8% para sa karaniwang large cap. Tumatakbo ang mga posisyong pumasa sa pagsusuri hanggang hold_days o sa gap-fill exit. — Inilalarawan ng artikulo tungkol sa stop model ang 时间止损 (time stop) bilang: kung hindi agad sumunod sa trigger ang inaasahang galaw, “kung hindi ito mangyari, lumabas,” at nagbibigay ng halimbawa ng 横盘止损 (sideways stop): mag-stop loss kung hindi tumaas nang 5% sa loob ng 5 araw mula nang bumili (买入后5天内上涨幅度未达到5%即进行止损). Sinasabi rin nitong dapat itong ipares sa max-loss stop, na ibinibigay ng gap-fill exit. Hawak ng estratehiyang ito ang lahat ng 532 trade sa takdang panahon, kaya itinatali ng mga event na walang galaw ang 1.5x gross budget at ang 10 slot nang humigit-kumulang 23 session. Nagbibigay ng puwang para sa mga bagong event ang pagsusuring 5-araw na nakaayon sa volatility. Ang karaniwang kita bawat trade ay 1.38%, higit na mataas sa 0.10% na gastos sa round-trip, kaya maliit ang gastos ng mga dagdag na exit. (sanggunian: 止损模型的原理及编写 p.1) 3. [sizing] Pagtatakda ng laki ng posisyon batay sa inverse volatility: Palitan ang nakapirming notional (equity x 0.075) ng notional_i = equity x 0.075 x (0.018 / sigma_i), kung saan ang sigma_i ay ang pang-araw-araw na stdev sa loob ng 60 session sa pagpasok. Limitahan ang multiplier sa [0.5, 1.5], para manatili sa pagitan ng 3.75% at 11.25% ang notional bawat pangalan. Panatilihin ang 1.5x gross cap at 10 slot. — Pinaghahalo ng uniberso ang mga pangalang gaya ng TSLA, NVDA, AMD at MU (pang-araw-araw na sigma na humigit-kumulang 3-4%) at mga pangalang gaya ng WMT, CSCO at JPM (humigit-kumulang 1.2-1.5%). Dahil pare-pareho ang notional, nangingibabaw sa baryansa ng P&L ang ilang pangalang mataas ang volatility. Sinasabi ng buod ng risk parity na dapat ilaan ang kapital ayon sa kontribusyon sa panganib (按照风险贡献分配资金), hindi ayon sa bahagi ng kapital, at dapat gamiting pangunahing panukat ng panganib ang historikal na volatility (standard deviation) ng bawat asset. Dapat pataasin ng pagpapantay sa panganib bawat event ang Sharpe sa parehong kita, at ginagamit ang Sharpe sa deflated-Sharpe/FDR test na humahadlang sa pag-promote. (sanggunian: 风险平价模型及策略精华汇总 - BigQuant量化交易 p.1) 4. [parameter] Paliitin at itakda ang saklaw ng paghahanap (isang simetrikong threshold, takdang horizon): Pagsamahin ang gap_sigma_threshold_long at gap_sigma_threshold_short bilang iisang simetrikong gap_sigma_threshold na nakatakda sa 4.0. Inilagay ng optimizer ang short threshold sa 7.96, katabi ng hangganang 8.0, na nangangahulugang halos hindi ginagamit ang short leg. Itakda ang hold_days sa 20 sa halip na maghanap sa [3, 30]. Mag-iiwan ito ng 0 o 1 parameter na hahanapin; kung kailangang may matira, hanapin lamang ang gap_sigma_threshold sa [3.0, 5.0]. Iulat nang magkahiwalay ang P&L ng long leg at short leg sa halip na isaayos ang mga ito nang magkahiwalay. — Ang hadlang ay ang FDR sa antas ng programa (pinananatili ng Benjamini-Hochberg ang 4 sa 301). Pinaparusahan ang deflated Sharpe dahil sa dami ng pagsubok at ginagantimpalaan ang espesipikasyong kaunti ang parameter. Nagbabala ang artikulo tungkol sa overfitting na nagsasaulo ng ingay ang modelong napakaraming input o sobrang flexible, at inirerekomendang alisin ang mga input na walang sapat na katwiran (删除无用特征). Eksaktong halimbawa nito ang short threshold na nakapirmi sa hangganan: asimetrikong pag-angkop ito, hindi ang paunang itinakdang tuntuning long-short na 3-sigma. Gumagamit ang halimbawa ng BigQuant na earnings event-driven (条件选股:基于财报的事件驱动策略) ng iisang takdang panahon ng paghawak (持仓周期:30天). Sinusuportahan nito ang paunang pagtatakda ng horizon sa saklaw na 20-30 araw sa halip na hanapin ito; itinuturing lamang na pahayag ang performance ng artikulo. (sanggunian: 机器学习中的过拟合 - BigQuant量化交易 p.1; 条件选股:基于财报的事件驱动策略 - BigQuant量化交易 p.1)

Buod ng Resulta

Dapat panatilihin ng multi-leg daily basket ang O(log n) o mas mahusay na gawain bawat bar (kalkulahin nang isang beses ang mga array, gumamit ng bisect, mag-cache ng mga lookup), kung hindi ay magtatagal nang lampas sa oras ang verification gaano man kalakas ang edge. Suriin muna ang tabinging halo ng long/short (133 laban sa 15 trade) bago mag-tune ng magkakahiwalay na threshold para sa bawat leg.

Pagkaraan ng 8 iteration, iniwan ang run sa verification loop. Nag-timeout ang backtest sa sandbox ng Layer 3, lumampas sa 300s na limitasyon sa wall-clock sa ~20,000-bar na window (2,400 araw ng META.USEQ pang-araw-araw na bar), kaya hindi umabot sa backtest review, analysis o risk review ang pinakabagong bersyon. Walang naitalang hatol mula sa analyst o risk reviewer.

Kunin ang post-earnings-announcement drift sa 20 likidong US large cap (USEQ, daily bar) nang walang earnings calendar: maghanap ng overnight gap na humigit-kumulang 3 sigma o higit pa, na may average volume na hindi bababa sa 2x; pumasok sa pagsasara ng araw na iyon sa direksiyon ng gap (long o short), at humawak nang takdang bilang ng session.

Ipinakikita ng optimization report na nakatala (2012-05-18 hanggang 2023-12-29) ang kabuuang return na 58.65%, Sharpe na 1.28, 148 trade (133 long, 15 short), average return bawat trade na 4.20%, win rate na 67.6% at max drawdown na 3.35%. Ang walk-forward na out-of-sample Sharpe ay 1.08, PBO 0.27, at pumasa ang holdout na may Sharpe na 1.52 sa 39 trade, ngunit hindi nakaligtas ang estratehiya sa pagsusuring FDR sa antas ng programa (p=0.0131; pinanatili ng BH sa q=0.10 ang 4 sa 301 kandidato).

Pagsusuri ng Backtest

Sharpe
0.57
Kabuuang Return
68.71%
Max Drawdown
5.94%
Kabuuang Trade
532
Win Rate
57.3%
Profit Factor
1.58

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.