Apat na numero, lahat ay sinukat mula sa sarili naming paper-trading stack, isang strategy, 1-minutong BTCUSDT perpetual signals, 31 araw at 1,418 na order. Median na oras mula sa pag-close ng bar hanggang sa ma-acknowledge ng exchange ang order: 195 ms. Ika-99 na percentile: 2,970 ms. Median sa 1% ng mga minutong may pinakamataas na realized volatility: 840 ms. At ang latency constant na naka-set sa backtest config sa halos buong naunang taon: 0.
Tatlo sa mga numerong iyon ay boring. Alam ng lahat na mali ang zero, papalitan din iyon ng lahat sa kalaunan ng kung ano, at ang kung ano ay halos palaging isang constant na pinili ng isa base sa pakiramdam. 100 ms, 250 ms, "maging conservative tayo, 500." Ang numerong talagang mahalaga ay 840, dahil sinasabi nito na function ng market state ang latency mo, at ang mga market state kung saan ito nagsi-spike ay ang parehong mga market state kung saan akala ng signal mo ay may nahanap ito.
Saan napupunta ang 195 milliseconds
Narito ang buong budget, sinukat nang stage by stage gamit ang monotonic-clock timestamps na isinusulat sa bawat hop. AWS instance sa ap-northeast-1 ang box, parehong region ng mga endpoint ng venue, na halos kasingganda na ng makukuha ng isang hindi naka-colocate, retail-shaped na setup.
| Yugto | p50 | p95 | p99 |
|---|---|---|---|
| Bar close → natanggap ang WS kline-closed event | 128 ms | 402 ms | 1,940 ms |
| Parse + pag-update ng feature state | 3 ms | 9 ms | 28 ms |
| Desisyon: model eval + risk checks | 11 ms | 22 ms | 60 ms |
| Order submit → exchange ack | 47 ms | 180 ms | 1,100 ms |
| End-to-end (sinukat, hindi dinagdag) | 195 ms | 690 ms | 2,970 ms |
Dalawang bagay na dapat tandaan bago ang interesting na bahagi. Una, hindi nagsasama-sama ang mga median: 128 + 3 + 11 + 47 = 189, at ang nasukat na end-to-end median ay 195. Hindi additive ang mga percentile, at kung bubuuin mo ang latency estimate sa pag-sum ng p99 ng bawat stage, makakakuha ka ng 3,128 ms samantalang 2,970 ang totoong p99. Sapat na kalapit dito, sobrang mali kapag correlated ang mga stage sa kabilang direksyon. Sukatin ang buong path.
Pangalawa, tingnan ang unang row. Dalawang-katlo ng median budget ay ginugugol sa paghihintay na sabihin sa iyo ng exchange na naka-close na ang bar. Hindi network, hindi ang code mo, hindi order routing. Nag-a-aggregate ang venue ng mga trade sa isang kline, nagpapasya na tapos na ang minuto, at nagpu-push. May queue sa harap ng push na iyon, at shared ang queue sa bawat ibang subscriber sa stream na iyon.
Ang 840
I-bucket ang bawat isa sa 1,418 na order ayon sa realized volatility ng minutong gumawa ng signal, at magkakawatak-watak ang distribution.
| Bucket ng volatility ng signal-bar | Mga order | p50 end-to-end | p99 end-to-end |
|---|---|---|---|
| Ibabang quartile | 201 | 141 ms | 488 ms |
| Gitnang dalawang quartile | 796 | 183 ms | 1,210 ms |
| Nangungunang quartile | 407 | 312 ms | 2,880 ms |
| Top 1% ng lahat ng minuto | 14 | 840 ms | 4,100 ms |
Sabay-sabay na lumalala ang bawat stage, kaya nagsi-compound. Ang aggregation at broadcast queue ng venue ay pinapakain ng matching-engine load, kaya ang minutong may 11,000 trade ay mas huling magpu-push kaysa sa minutong may 600. Ang sarili mong process ay humahawak ng mas maraming depth update at mas maraming trade print sa parehong window, kaya ang feature update na karaniwang tumatagal ng 3 ms ay tumatagal ng 28. Ang REST order path ay nakikipagkompetensya sa panic ng lahat, at magsisimula kang makakita ng paminsan-minsang 503-and-retry na nagkakahalaga sa iyo ng isang buong segundo nang mag-isa. Ang correlation coefficient sa pagitan ng signal-bar trade count at end-to-end latency sa sample namin ay 0.41. Hindi naman sobrang laki. Sapat para sirain ang isang constant.
At ang mga strategy na nakakaligtas sa first-pass screen ay, overwhelmingly, ang mga nagte-trade ng breakout, reversal, dislocation, liquidation cascade. Nagfa-fire sila sa eksaktong bucket kung saan pinakamasama ang latency. Ang momentum signal na tumitrip lang kapag gumalaw ang minuto ng 40 bps ay isang signal na nakaayos, structurally, na palaging masisilbihan ng pinakamabagal na bersyon ng stack mo.
Minsan, isang araw kaming naghabol sa isang 3.6-segundong outlier na lumilitaw sa halos parehong oras tuwing gabi. Logrotate pala, nagko-copy-truncate ng 2 GB na file sa parehong EBS volume na sinusulatan ng process, na-stall ang event loop. Inosente ang market. Sukatin muna, saka sisihin ang microstructure.
Ano ang epekto nito sa fill
Nagda-drift ang presyo habang naghihintay ka. Sa isang random na minuto, ang average na adverse move sa aming 195 ms median ay mga 1.1 bps laban sa direksyon ng signal. Sa top-quartile minutes sa 312 ms, 5.8 bps. Sa top-1% minutes sa 840 ms, humigit-kumulang 14 bps ng adverse drift bago pa man makarating ang order sa book.
Sa BTC perps, halos hindi nakikilahok ang spread dito: isang tick sa isang 84,000 quote ay 0.012 bps, kaya ang pinsala ay adverse drift sa halip na crossing cost. Ilipat ang parehong strategy sa isang mid-cap perp at magigising ang pangalawang term — ang top-of-book spread sa sample namin ay pumunta mula 1.4 bps sa kalmadong minuto hanggang 6.2 bps sa top quartile, at ang depth sa touch na iyon ay nanipis ng higit sa kalahati. Binabayaran mo ang drift at ang mas malawak na spread at ang mas masamang depth, sabay-sabay, lahat dahil iisa ang sanhi nila.
Nang i-replay namin ang parehong 31 araw gamit ang per-bar conditional latency sa halip na flat na 200 ms, ang average entry price ng backtest ay gumalaw ng 3.1 bps na mas masama, halos puro konsentrado sa 9% ng mga trade. Ang backtest-versus-paper entry-price divergence ay bumaba mula 4.2 bps hanggang 0.9 bps. Ang in-sample Sharpe sa strategy na iyon ay pumunta mula 1.7 hanggang 1.1, na siyang tapat na numero at palaging iyon.
Kaya ano talaga ang ilalagay mo sa config
Hindi isang scalar. Ang pinapatakbo namin ngayon:
- Mag-sample, huwag mag-set. Kunin ang latency para sa bawat simulated na order mula sa empirical distribution na naka-condition sa sariling activity ng bar na iyon — sapat na ang trade count at absolute return, at pareho nang nasa standard na kline. I-fit isang beses per venue per order type, i-refit buwan-buwan.
- Panatilihin ang tail. Huwag mag-fit ng lognormal at tapos na; nabubuhay ang p99 sa retry storm at GC pause na hindi kayang i-reproduce ng anumang smooth na distribution. Ginagamit namin ang empirical quantile na may resampled tail sa itaas ng p95.
- Nalalapat din ang latency sa mga cancel. Ang stop-replacement o hedge cancel ay sakop ng parehong delay, at sa mabilis na market ay nakikipagkarera ang cancel mo sa fill. Kung instant ang pag-cancel ng simulator mo, fiction ang risk model mo.
- Magdagdag ng staleness guard at i-simulate ito. Ang sa amin ay nagda-drop ng anumang signal na ang bar ay higit sa 1.5 segundo na pagdating. Iyon ay totoong behaviour na may totoong cost — tahimik itong nagtatanggal ng mga trade, at kailangan nitong tanggalin ang parehong mga iyon sa backtest.
- I-recalibrate laban sa paper. Ang paper trading ang pinanggagalingan ng ground truth. I-log ang apat na hop timestamp sa bawat order at i-diff ang mga distribution laban sa inakala ng simulator, linggu-linggo.
Ibang asset class, parehong sakit. US equities: nagdadagdag ang consolidated tape ng sarili nitong aggregation delay sa ibabaw ng sa broker mo, at lumalawak ito sa ilalim ng message-rate pressure sa parehong structural na dahilan. Prediction markets: REST-only order entry sa karamihan ng venue, at nasukat namin ang sub-100 ms na median na pumupunta sa maraming segundo kapag may resolution event at sabay-sabay dumating ang lahat. Crypto options: ang quote na pinagpe-price-an mo ay maaaring dalawang segundo nang stale sa eksaktong minutong gumalaw ang underlying.
Ang pangkalahatang anyo ng pagkakamali ay ang tratuhin ang execution parameter bilang independent constant samantalang ito ay function ng parehong state variable na nagtutulak sa signal mo. Maayos ang fees; maayos ang funding; hindi ang latency. Kung magdadala ka ng isang numero sa ulo mo mula sa lahat ng ito, dalhin ang ratio: ang p99 namin ay labinlimang beses ng median namin, at dumadating ang signal namin nang disproportionate malapit sa p99 na dulo.
I-instrument ang apat na hop. Isang hapon lang ng trabaho at mas marami itong sasabihin sa iyo tungkol sa strategy mo kaysa sa isa pang linggo ng parameter search.
← Lahat ng post


