Nobyembre 3, 2026 · pagpapatupad

Nag-paper-trade kami ng isang basis trade. Isang paa lang ang na-fill.

Nag-paper-trade kami ng isang basis trade. Isang paa lang ang na-fill.

Ang function ay tinawag na enter_pack. Dapat yun na ang babala. Isang research agent ang nagsulat ng BTC cash-and-carry: kapag nag-trade ang perpetual ng mahigit walong basis point kaysa sa spot, bumili ng spot, i-short ang perp, huwag nang galaw. Ang funding at basis ang bahala sa natitira. Ang backtest ay nag-fill ng parehong paa sa iisang millisecond, sa mid, dagdag ang isang tick ng kagandahang-loob. Ang equity curve ay isang hagdanan. Walang tatawag dito na kapana-panabik. Yun ang selling point.

Isinulong namin ito sa paper noong Lunes.

Lunes: ang pack na palaging na-fill

Dumating ang unang signal nang 11:17 UTC. Ang basis sa screen ay 9.4 bps, rich ang perp. Sa backtest, enter_pack ay nagbalik ng dalawang fill at residual na sero. Sa paper, nagbalik ito ng spot fill na 0.40 BTC sa ask, at isang resting short sa perp na hindi nag-trade.

Nagbayad ang spot ng 4 bp na taker fee at humigit-kumulang 1 bp na spread. Nandoon pa sa book ang presyo ng perp na gusto namin, tapos wala na. Dalawampung segundo ang lumipas, ang quoted basis ay 5 bps, dahil kakalift lang namin ng spot. Apatnapung segundo ang lumipas, na-fill ang perp, pagkatapos ng galaw. Naka-pack na kami. Naka-pack kami sa isang basis na hindi na sapat para sa pagpasok at paglabas.

Ia-book sana ng backtest ang "+9.4 bps carry, residual 0." May 4 bps na spot taker cost ang blotter, isang 40-segundong walang hedge na long, at isang entry gap na humigit-kumulang 5. Isa lang ang sample ko at, gayunman, sobra pa rin ang tiwala sa hagdanan.

Martes: binuksan namin ang function

enter_pack ay kumuha ng listahan ng mga paa at isang target mid. Nag-loop ito, ni-fill ang bawat paa sa mid * (1 ± slip), at nagsulat ng isang portfolio row. Walang pangalawang timestamp. Walang branch kung saan hindi umiiral ang pangalawang paa. Ang unit test ay nag-assert ng residual == 0.

Ganyan ang test na nagpaparamdam sa iyong adult ka na. Hindi iyan mabibigo kailanman.

Hiniwalay namin ang pack sa dalawang order na may kanya-kanyang state: submitted, partial, filled, canceled. Naging first-class object ang incomplete. Wala pa ring tunay na book ang historical replay, kaya nagdaya kami. Iantala ang pangalawang fill ng isang draw mula sa paghihintay noong Lunes (mean na 26 segundo, isang tail na hindi ko nagustuhan), at i-drift ang presyo nito ayon sa ginawa ng spot sa window na iyon. Magaspang, pero may mga bingaw na ang hagdanan bago magtanghalian: mga pack na pumasok sa 3 bps, mga pack na hindi kailanman naging pack.

Miyerkules: tatlong segundo, tapos itapon na

Kung hindi pa naka-on ang pangalawang paa sa loob ng tatlong segundo, i-flatten ang una. Dapat doon na kami nagsimula. Mukhang konserbatibo hanggang i-price mo ang abort. Ang pag-flatten ay nangangahulugang tumawid ka sa spot para pumasok at tatawid ka ulit para lumabas. Dalawang taker fee, dalawang spread, walang carry, walang funding. Sa muling isinulat na replay, hindi bihira ang mga abort na iyon. Nagtitipon-tipon sila sa mga bar kung saan pinaka-"totoo," ang hitsura ng basis, na kadalasan ang mga bar kung saan may dumadaloy na sa spot.

Pagsapit ng gabi ng Miyerkules, labing-pitong paper signal na ang kailangan naming pagtalunan.

17paper signal sa apat na araw
7pack na na-fill ang parehong paa
18 bpsgalaw pagkatapos laban sa natirang long
Backtest, umaga ng LunesPaper, pagsapit ng Miyerkules
PagpasokParehong paa sa mid, iisang timestampSpot sa ask; perp 5–40s mamaya, o hindi kailanman
ResidualPalaging 0Walang hedge sa 10 sa 17 signal
Mga fee sa isang gumaganang tradeDalawang takerDalawang taker, o apat kung mag-abort kami
Driver ng PnLBasis + fundingAnuman ang ginawa ng spot habang naghihintay kami
Kumpleto ang isang pack kapag na-fill na ang parehong order, o kaya'y isang directional na posisyon na hindi mo sinesize. I-mark ang residual laban sa live book sa buong panahon na umiiral ito. Kung hindi mo ito ma-mark, hindi mo pwedeng patakbuhin ang strategy.

May notebook pa rin ang isang kasamahan na tinatrato ang pack bilang listed product, BTC_CARRY, na may flat na 2 bp na "buwis sa pagpapatupad." Nagustuhan ko ang notebook na iyon. Gumawa ito ng parehong hagdanan na ginawa ng agent. Ang buwis ay isang mean. Ang mga orphan ay isang distribution. Hindi nasasagasaan ang mga mean sa isang manipis na oras; ang 0.40 BTC na natirang spot, pwede.

Huwebes: natira, tapos kape

Halos lahat ay na-abort ng tatlong segundo nang naghihintay na rin kami sa isang queue. Pinaluwag namin ang paper sa labinlima. Nang 02:11 UTC ng Huwebes, na-fill ang spot at hindi ang perp. Nasa yugto pa ako ng pagluluksa na "magre-rest ito, magli-lift ito" nang pumunta akong magkape.

02:11:08 na-fill BTCUSDT 0.40 buy
02:11:08 na-submit BTCUSDT-PERP 0.40 sell, post-only
02:11:41 working pa rin
02:26:00 marka ng residual −18.1 bps

Bumaba ang BTC ng 18 bps sa isang tahimik na window. Ang residual ang buong trade. Ang funding, nang mag-print, ay nag-credit sa isang perp na wala sa amin. Nakaupo lang ang spot na long. Ang overnight path ng orihinal na backtest ay hindi kailanman naglaman ng posisyon na iisang paa, kaya hindi nito kailanman naitanong ang tanong na tinatanong namin sa bawat ibang book: ano ang pinakamasamang bar na pwedeng i-print ng natirang ito, at nasaan ang stop para sa posisyon na hindi namin balak hawakan?

Hindi rin bayani ang pitong buong pack. Nang mag-print na ang pangalawang paa, naisandal na ng sarili naming spot lift ang index, at ang entry basis ay 3–5 bps na mas masama kaysa sa snapshot na nagpaputok ng signal. Ang walong-bps na threshold ay isang numero tungkol sa isang screen.

Ang lalaktawan namin sa susunod

Hindi kami magshi-ship ng multi-leg bilang iisang fill function. Parehong patakaran para sa perp-spot carry, sa calendar, o sa call vertical na isinusumite ng isang agent bilang dalawang limit at saka magdiriwang kapag parehong "fill" sa mid.

  1. State ng order sa bawat paa, kasama ang mga partial. Tratuhin ang pack bilang magulang ng dalawang ticket.
  2. Isang max-orphan timer na talagang magfa-fire, at isang flatten path na magbabayad ng dalawang spread sa paglabas.
  3. Mark-to-book sa residual, na may stop na naka-size para sa natira. Ang packed net ang maling notional.
  4. Walang credited na carry, walang naipong funding, hangga't hindi pa naka-on ang parehong paa. Incomplete ay incomplete.
  5. Tanggihan ang mid-on-mid bilang default para sa anumang may dalawang ticket. Kung kailangan mong maghula, maghula ng mas masama sa manipis na paa at mas huli sa pangalawang fill.

At hindi namin papapasukin ang test_pack_is_atomic sa repo. Ang atomic ay katangian ng matching engine, hindi ng helper function. Ang BTC spot at BTC perpetual ay dalawang book na minsan ay nagtutugma. Ang paper ang lugar kung saan tumitigil sila sa pagtutugma, na siyang tanging dahilan kung bakit naging interesante kailanman ang hagdanan.

backtestingcash-and-carrypagpapatupadpaper tradingcrypto futures
← Lahat ng post