Mga Estratehiya
Port ng FxBizday: EUR/USD US-session na long window sa EURUSDT spot (ginagawang flat ang sell-EUR window)
Resulta: Inabandona
FxBizdayEurUsdtSpot
Buod ng Resulta
Ini-port ng FxBizdayEurUsdtSpot ang long half ng EUR/USD-session strategy na FxBizday ng QuantRocket sa EURUSDT spot pair ng Binance. Hawak nito ang EUR mula 11:00 hanggang 16:00 oras ng New York tuwing weekday at flat kung hindi. Pagkaraan ng 4 iteration, invalid mismo ang buong backtest: mayroon lamang itong 1 closed trade dahil pinigilan ng sell cap na batay sa volume at free EUR ang pagsara ng posisyong 2020-01-07, at mukhang accounting artifact ang 61% na pagbaba ng equity na ipinapasuri sa engine. Ipinakita pa rin ng hiwalay na ebidensiya na hindi kayang bayaran ng ideya ang mga gastos nito: mga 0.45 bp gross edge kada window, 20 bp kada round trip, at -0.54% average kada trade sa sandbox ng QA. Tinalikuran ito ng analyst sa yugto ng pagsusuri ng backtest, at ang bersiyong spot na long-only lang ang tinanggihan, hindi ang orihinal na long/short strategy sa venue ng FX na mura ang gastos.
Hypothesis
Implementasyon
Salin ng long window ng FxBizday ng QuantRocket sa orasang EURUSDT spot bar; long sa mga oras ng pagsisimula ng bar na 11–16 New York tuwing weekday, at flat ang target sa lahat ng iba pang window.
Pinananatili ang dating signal, nakapirming mga parameter at instrumento. Nililimitahan ang mga buy sa malayang quote cash at mga sell sa malayang EUR, binabantayan ang mga nakabinbing pagsasara, at nag-iiwan ng isang dagdag na balanse na EUR sa ibaba ng tinatayang liquidity para sa single fill. Pinigilan ng sobrang paggastos sa cash ang pagsusuri sa edge; kailangang kumpirmahin ng beripikasyon ng pipeline ang pag-aayos na ito. Kung may natitirang alikabok sa position ledger na hindi maibenta dahil sa pag-round ng mga balanse ng account, kailangan itong itugma sa engine.
Mga Resulta ng Beripikasyon
Ilista ang limitasyon ng liquidity para sa iisang fill bilang sapilitang paglihis sa port, upang maikumpara ng analyst ang aktuwal na exposure (exposure_pct, karaniwang laki ng posisyon) sa timbang na 100% ng source.
Nililimitahan ng position_size() ang entry sa isang fill sa close tick (bar volume/4, ni-round pababa sa hakbang na EUR), at hindi nagdaragdag ang batayang template sa bukas nang posisyon. Kaya sa manipis na EURUSDT bar, maaaring mas mababa nang malaki ang long kaysa sa timbang na 100% ng kapital ng source. Maaari ring magsimula sa susunod na bar ang entry na hindi naisagawa dahil kulang ang liquidity sa 11:00 bar. Limitasyon ito ng platform/fill engine (pinipigilan nito ang crash na cash_overspend) at binabanggit sa paliwanag sa config, pero hindi ito nakalista ng port_deviations.
Kung mas mababa sa isang base step ang natitirang dami (o mas mababa sa minimum notional), ituring na sarado ang posisyon, o hayaang itugma ng engine ang alikabok, para hindi mapigilan ang muling pagpasok.
Kapag mas mababa ang malayang EUR kaysa sa dami sa position ledger (dahil ni-round ang mga bahagyang fill), should_exit lang ang naibebentang halaga. Kung may matirang alikabok na mas maliit sa isang hakbang, nagiging 0 ang cap at tuluyan nang nagbabalik ng False ang should_exit. Hindi nagsasara ang posisyon, at dahil tinatawag lang ng batayan ang should_enter kapag flat, hindi na muling papasok ang strategy. Ipinakikita ng sandbox (594 trade, mga isa bawat weekday) na hindi ito nangyari sa aktuwal na pagsubok.
Operator: suriin kung paano nakikihalubilo ang folded impact sa sizing gamit ang buong equity bago bigyang-kahulugan ang laki ng drawdown.
Pagkatapos tumakbo, isinasama ang impact (impact_folded=true), kaya nagko-compound ang sizing sa loob ng engine sa equity na hindi pa nababawasan ng humigit-kumulang $133k na impact. Higit sa panimulang kapital ang pinagsama-samang pagkalugi sa trade (mga $199k), at avg_position_pct ang 634%. Accounting ng engine ito, hindi code ng strategy, pero dahil dito ay hindi mapagkakatiwalaan bilang sukat ang bilang na -100%/liquidation.
Pagsusuri ng Backtest
- Sharpe
- -0.78
- Kabuuang Return
- -0.61%
- Max Drawdown
- 0.61%
- Kabuuang Trade
- 1
- Win Rate
- 0.0%
- Profit Factor
- 0.00
Tapat ang port: ginagamit nito ang parehong tuntunin ng source para sa window sa simula ng NY bar; eksaktong ini-port ang long window; inaasahang flat ang sell-EUR window gaya ng idineklara; at walang idinagdag na stop o filter.
Malinis ang input data: 59,305 orasang bar mula 2020-01 hanggang 2026-10, at tanging mga nasuring pagkawala ng serbisyo ng exchange ang nawawala.
Hindi valid na panukat ang buong backtest. Sa loob ng 6.8 taon, may 1 closed trade (entry_signaled=3, entries_submitted=2), kumpara sa inaasahang humigit-kumulang 1,700 weekday window. Bukas pa rin sa dulo ng run ang ikalawang entry (2020-01-07, 46,202 EUR). Hindi natapos ang exit: nililimitahan ng should_exit ang bawat sell ayon sa volume/4 at malayang EUR, at maliwanag na hindi nasaklaw ng cap na iyon ang posisyon sa manipis na mga bar ng unang bahagi ng -2020 EURUSDT. Dahil dito, naharang ang bawat sumunod na window.
Bumabagsak ng 61% ang equity curve noong 2020-01-13, samantalang -$609 lang ang price PnL ng bukas na posisyon at -$3 ang closed PnL. Hindi tugma ang sintomas at mukhang artifact ito ng accounting sa balanse ng cash/EUR. Hindi ko pa nabeberipika ang mekanismo; kailangan itong suriin sa engine. Huwag ituring na ekonomiks ng strategy ang headline na -61%, Sharpe na -0.78 at drawdown na 0.61.
Hiwalay na sinukat ang ekonomiks at malinaw na negatibo ang mga ito. Sa sandbox ng QA, ayon sa disenyo ang pag-trade ng strategy (594 round trip, isa bawat weekday), pero nalugi ito: avg_trade_return_pct -0.54% kumpara sa +0.25% BINANCE_SPOT floor, PF 0.006, win rate na 1.5%. Natuklasan ng diagnostic ng signal sa buong kasaysayan (11,856 obserbasyon, IC 0.03, t=3.2) na mga 0.45 bp ang gross edge ng long window kada 5-oras na panahon. Kung ikukumpara sa 20 bp na round trip, mga -5.5 bp ang net kada panahon: rejected_after_costs.
Nakapirmi ayon sa kontrata ang bawat parameter (walang maaaring i-tune), kaya walang mababago ang optimization.
Pagsusuri
Naglabas ng exception ang backtest sa loob ng strategy: cash_overspend: itinigil ng NautilusTrader ang backtest noong 2020-01-13 12:00:00+00:00 dahil nag-negatibo ang balanse ng account na CASH (spot). Lumampas ang halaga ng order sa magagamit na cash, kasama ang komisyon. Itakda ang laki ng mga buy ayon sa malayang cash / (presyo x (1 + taker fee)), o gamitin ang mga entry helper ng FactoryStrategy na naglilimita sa spot buy ayon sa kayang bayaran ng account. Ayusin ang code path na nagdulot nito; hindi natapos ang backtest.
Kasaysayan ng Iterasyon
Bumagsak ang beripikasyon (Layer 3 — sandbox backtest): cash_overspend: itinigil ng NautilusTrader ang backtest noong 2026-08-12 21:00:00+00:00 dahil nag-negatibo ang balanse ng account na CASH (spot). Lumampas ang halaga ng order sa magagamit na cash, kasama ang komisyon. Itakda ang laki ng mga buy ayon sa malayang cash / (presyo x (1 + taker fee)), o gamitin ang mga entry helper ng FactoryStrategy na naglilimita sa spot buy ayon sa kayang bayaran ng account. Uri ng bar na ginamit: EURUSDT.BINANCE_SPOT-1-HOUR-LAST-EXTERNAL, mga naprosesong bar: 0 Tiyaking nakakagawa ng mga trade ang strategy mo gamit ang ibinigay na data at mga parameter.
Nabigo ang beripikasyon (Layer 3 — backtest sa sandbox): cash_overspend: itinigil ng NautilusTrader ang backtest sa 2025-12-25 22:00:00+00:00 dahil naging negatibo ang isang account na CASH (spot) (mas mababa sa sero ang balanse). Mas mataas ang halaga ng isang order kaysa sa magagamit na cash, kasama na ang komisyon. Kalkulahin ang laki ng mga pagbili batay sa libreng cash / (presyo x (1 + bayad ng taker)), o gamitin ang mga entry helper ng FactoryStrategy, na naglilimita sa mga spot buy ayon sa kayang bayaran ng account. Ginamit na uri ng bar: EURUSDT.BINANCE_SPOT-1-HOUR-LAST-EXTERNAL, mga naprosesong bar: 0 Tiyaking nakakagawa ng mga trade ang iyong strategy gamit ang ibinigay na data at mga parameter.
Idagdag sa mga paglihis ng port sa hypothesis ang volume/4 na single-fill cap bilang limitasyong ipinataw ng engine. Dapat suriin ng analyst kung gaano kadalas ito sumasaklaw (mga entry na mas mababa sa target na bahagi ng equity, at mga exit na umaabot sa mga susunod na bar) bago ituring na katulad ng source rule ang mga resulta.
Paglihis sa port na hindi nakalista sa hypothesis: nililimitahan sa floor(bar volume / 4) (_one_fill_cap) ang bawat order. Kaya sa manipis na entry bar, mas maliit ang long kaysa sa 100% na kapital ng source. Kapag tumapat ang manipis na bar sa exit, ikinakalat ang pagsasara sa mga susunod na bar, na nasa flat (0/-1) window na; kaya mas tumatagal ang exposure kaysa sa 16:00 NY exit. Dahil ito sa limitasyon ng engine: nagdulot ang split fill sa 3-decimal na precision ng laki laban sa 2-decimal na balanse ng EUR ng cash_overspend sa Layer 3. Isinasaad ito ng paliwanag sa config, pero hindi ng port_deviations / derivation_note. Hindi nagbabago ang oras at direksiyon ng mga window.
Opsyonal: kapag > 0 ang signal at may natitirang bukas na posisyon, dagdagan ito hanggang sa target na laki, o tanggapin ang gawi at banggitin ito.
Maaari pa ring bukas ang bahagi ng bahagyang naisara na posisyon kapag nagsimula ang +1 window sa susunod na weekday. Magbabalik ng False ang should_exit, at hindi tatawagin ang should_enter dahil may posisyon. Sa halip na 100% ng kapital, ang natirang laki ang ititrade ng aklat sa araw na iyon. Kailangan dito ang magkakasunod na manipis na bar, kaya bihira ito.
Buod ng Resulta
Bago i-port ang isang FX intraday rule, ihambing ang gross edge nito kada trade sa round-trip cost ng target venue: hindi makakayanan ng edge na mas mababa sa isang basis point, na maaaring gumana sa gastos na IB IDEALPRO (mga 0.1-0.2 bp), ang 0.10% na spot fee bawat side.
Sa yugto ng pagsusuri ng backtest, pinili ng analyst na talikuran ito dahil negatibo ang inaasahang halaga: mga 40x na mas maliit ang edge kaysa sa 20 bp na round-trip na gastos sa Binance spot, at nakapirmi ang bawat parameter, kaya hindi ito mapapakinabangan ng optimization o pag-aayos sa exit. Hindi isinagawa ang optimization at mga susunod na yugto.
Port ito ng FxBizday ng QuantRocket na bumibili ng EUR sa 11:00-16:00 New York window tuwing weekday, batay sa palagay na gagalaw ang EUR/USD dahil sa presyur ng pagbebenta ng lokal na currency sa oras ng negosyo ng bawat rehiyon. Pinatakbo ito sa EURUSDT.BINANCE_SPOT, kung saan kinailangang manatiling flat ang short (sell-EUR) window dahil hindi puwedeng mag-short sa spot.
Hindi valid ang buong backtest (2020-01 hanggang 2026-10, 59,305 orasang bar): 1 closed trade lang ang naitala, na may kabuuang return na -61.3% at Sharpe na -0.78, dahil hindi kailanman na-exit ang posisyong binuksan noong 2020-01-07 at mukhang accounting artifact ang pagbaba ng equity. Iba pang paraan ng pagsukat ang malinaw na nagpapakitang negatibo ang ekonomiks: nagsagawa ang sandbox ng QA ng 594 round trip na may avg_trade_return_pct -0.54% at profit factor na 0.006, at natuklasan ng pagsusuri sa signal sa buong kasaysayan ang mga 0.45 bp gross edge kada 5-oras na panahon (IC 0.03, t=3.2), na may hatol na rejected_after_costs.
Pagsusuri
FxBizday
Pagsusuri
fx_bizday.py
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.