2026. gada 2. septembris · mikrostruktūra

Jūsu limita orderis netika izpildīts: vēstule par vietu rindā, maker atpakaļtestiem un Sharpe, ko izdomājāt

Jūsu limita orderis netika izpildīts: vēstule par vietu rindā, maker atpakaļtestiem un Sharpe, ko izdomājāt

Pagājušajā nedēļā atsūtījāt man savu piezīmju grāmatu: tas pats signāls, tas pats instrumentu kopums, tie paši 14 mēneši ar BTCUSDT perpetual datiem. Mainījās tikai izpilde. Jūs pārstājāt šķērsot spredu un sākāt izvietot bid orderus par vienu tick augstāk, un Sharpe pieauga no 0.42 līdz 2.14. Jūs jautājāt, vai tas ir pa īstam, vai arī kaut ko esat salauzis.

Jūs kaut ko salauzāt. Gribu jums precīzi parādīt, kur, jo kļūda ir vienā rindā, bet mācība ir daudz lielāka par šo rindu.

Lūk, jūsu izpildes noteikums, nokopēts no dzinēja:

if bar.low <= limit_price: fill(limit_price)

Tas nozīmē: ja šīs minūtes laikā tirgū tika reģistrēts darījums par cenu, kas ir vienāda ar manu cenu vai zemāka, mans orderis tika izpildīts par manu cenu. Patiesībā šis noteikums tikai pasaka, ka cena skāra jūsu līmeni. Sasniegt līmeni vēl nenozīmē orderi izpildīt. Starp šīm divām lietām ir rinda, un jūs modelējāt rindu tā, it kā tā būtu tukša.

Kas stāv jūsu priekšā

Kad izvietojat bid orderi par 84,120.0 BTCUSDT perpetual tirgū, jūs nostājaties visu tur jau izvietoto orderu rindas galā. Šī līguma labākās cenas līmenī atkarībā no diennakts laika parasti ir no 4 līdz 30 BTC; jūsu izlases perioda mediāna ir ap 12 BTC. Jūsu orderis ir 0.4 BTC. Lai ar jums notiktu darījums, pārdevējiem šajā līmenī jāiesniedz pietiekams kopējais orderu apjoms, lai izpildītu visus, kas ieradās pirms jums. Turklāt tam jānotiek, pirms līmeni atceļ vai tirgus aiziet augšup.

Tāpēc atpakaļtestā nevajadzētu jautāt “vai cena sasniedza 84,120.0”, bet gan “vai, kamēr mans orderis tur stāvēja, par 84,120.0 tika izpildīti vismaz 12.4 BTC apjomā tirgus pārdošanas orderi”. Tie ir radikāli atšķirīgi notikumi. Jūsu datos tie atšķiras aptuveni 3 reizes.

12.4 BTCmediānais apjoms, kas pieskaršanās brīdī ir rindā jūsu priekšā
100%izpildes rādītājs, ko pieņem jūsu atpakaļtests
31%no pieskaršanās reizēm, kad tika izpildīti orderi visā rindā jūsu priekšā
4,180darījumi, kas kļuva par aptuveni 1,300

Trīs izpildes noteikumi, trīs dažādas stratēģijas

Es vēlreiz palaidu jūsu signālu ar tiem pašiem ieejas punktiem un 3 izpildes modeļiem. Tā pati alfa, tās pašas komisijas maksas, tas pats finansējums. Mainījās tikai izpildes loģika.

Izpildes noteikumsIzpildesVidējā 60s priekšrocība pēc izpildesSharpe
Sasniegts līmenis: low <= limit4,180+2.6 bp2.14
Precīzs caursitiens: low < limit - 1 tick1,712+0.4 bp0.61
Rindas simulācija pēc apjoma līmenī1,306+0.9 bp0.77

Vidējā rinda ir aptuvenais labojums, ko visi vispirms mēģina: ieskaitīt izpildi tikai tad, ja tirgus cena tirgojās stingri zem jūsu cenas, pieņemot, ka, ja tā nokritās zemāk, tai noteikti bija jāizpilda jūsu orderis. Vispārējā iecere ir pareiza, un tā likvidē lielāko daļu fantāzijas. Taču šim risinājumam ir arī nepatīkams aizspriedums, pie kura vēl atgriezīšos.

Apakšējā rinda ir tas, kas jums jāizveido. Tam nav vajadzīga L3 plūsma vai katra ordera rekonstrukcija. Lielākā daļa vajadzīgo datu jums jau ir.

Rindas simulācija, ko varat izveidot no aggTrades

Izmantojiet apkopoto darījumu plūsmu, nevis klines. Katrā darījumā ir cena, daudzums, laika zīmogs un maker puses karodziņš, kas norāda, vai agresors bija pircējs vai pārdevējs. Ar to pietiek, lai pietiekami labi simulētu jūsu pasīvo orderi:

  1. Kad jūsu orderis tiek izvietots, fiksējiet tajā brīdī pie jūsu cenas stāvošo orderu apjomu. Ja jums ir tikai 100ms orderu grāmatas plūsma, izmantojiet pēdējo momentuzņēmumu; kļūda būs maza salīdzinājumā ar to, ko pašlaik labojat.
  2. Iestatiet queue_ahead = resting_size. Esiet piesardzīgi un pieņemiet, ka esat pēdējais rindā. Tā arī ir, ja vien jūs pats neveidojat attiecīgo līmeni.
  3. Ejiet cauri darījumu plūsmai. Katrs pārdevēja agresora darījums par cenu, kas ir vienāda ar jūsu cenu vai zemāka, samazina queue_ahead par savu daudzumu. Kad atlikums kļūst negatīvs, jūsu orderis ir izpildīts par jūsu cenu attiecīgajā laika zīmogā.
  4. Ja cena aizvirzās par vienu tick, neatiestatiet rindas lielumu uz nulli. Samaziniet to pakāpeniski. Daži orderi jūsu priekšā tiek atcelti, kad līmenis noveco, citi paliek. Samazinājums par 30-40% par katru pilnu sekundi, ko cena pavada ārpus jūsu līmeņa, manās rekonstrukcijās atbilda datiem labāk nekā abi galējie varianti.
  5. Ja jūsu stratēģija atceltu orderi un izvietotu to no jauna, modelējiet jauno orderi rindas galā jaunajā līmenī. Šo soli cilvēki izlaiž, un tieši tur slēpjas atlikusī fantāzija.

Par 2. soli jums, visticamāk, gribēsies ar mani strīdēties. Jā, dažreiz esat tuvu rindas sākumam, jo orderi izvietojāt brīdī, kad līmenis tikko izveidojās. Labi — nomēriet to datos, nepieņemiet to par pašsaprotamu. Reģistrējiet rindā esošo apjomu ordera izvietošanas brīdī un ļaujiet datiem parādīt, kāda daļa jūsu orderu patiešām ir starp pirmajiem. Jūsu stratēģijā tie bija 11%, jo signāls nostrādā pēc kustības, tātad līmenis, kuram pievienojaties, jau pastāv un tajā jau ir pūlis.

Jūsu izpildītie orderi ir tie, kurus labāk būtu gribējis nesaņemt

Tagad pie svarīgākās daļas un iemesla, kāpēc precīza caursitiena noteikums ir neobjektīvs.

Padomājiet, kad jūsu bid orderis tiek izpildīts pilnībā. Tas notiek, kad pārdošanas spiediens ir pietiekami liels, lai iztukšotu visu līmeni. Tātad pēc pašas konstrukcijas tas notiek brīdī, kad tirgus virzās lejup cauri jūsu cenai. Visdrošāk zināmie izpildes gadījumi ir tie, kuros uzreiz esat palicis neizdevīgā pozīcijā.

Sadaliet izpildes pēc to norises veida un izmēriet 60 sekunžu mark-out:

Izpildes veidsDaļa no izpildēmMark-out pēc 60s
Tirgojās līdz līmenim, cena atlēca augšup38%+3.1 bp
Tirgojās līdz līmenim, cena nemainījās21%+0.2 bp
Cena iztirgojās cauri vismaz par 2 tick41%−2.4 bp

Jūsu vienkāršotais atpakaļtests parādīja visus trīs grozus un novērtēja visus kā bezmaksas. Precīza caursitiena noteikums dod gandrīz tikai trešo grozu, tāpēc tā priekšrocība saruka vairāk nekā rindas simulācijā. Neviens no abiem nav pareizs. Rindas simulācija dod reālistisku kombināciju, un tieši šī kombinācija ir visa spēles būtība: pasīva izpilde nopelna jums spreda starpību, bet liek maksāt par nelabvēlīgu atlasi. Jūsu faktiskā stratēģija ir šo abu attiecība.

Vecais akciju tirgus galdu formulējums joprojām ir spēkā: maker orderis ir bezmaksas opcija, ko esat uzrakstījis tirgum. Kāds to izmanto, kad tas ir izdevīgi. Jūsu atpakaļtests iekasēja prēmiju un aizmirsa, ka opcijai ir arī izmaksu daļa.

Orderi, kurus nesaņēmāt, maina stratēģiju, ne tikai izmaksas

Šī ir daļa, pie kuras visvairāk gribu, lai jūs padomātu. Ja taker izpildi modelējat kļūdaini, darījumus izvēlaties pareizos, bet cenas ir nepareizas, un lielāko daļu kļūdas izlabo komisijas maksu korekcija. Ja maker izpildi modelējat kļūdaini, jūs iegūstat pavisam nepareizu darījumu kopu. Aptuveni 2,900 no jūsu 4,180 ieejas orderiem nekad netiktu izpildīti. Daži no tiem bija jūsu labākie signāli — sveces strauji uzšāvās augšup un tad apgriezās, proti, tieši situācijās, kad tirgus aizgāja bez jums.

Tāpēc neizpildīto orderu atzaram vajadzīga īsta loģika. Ko stratēģija dara, ja ieejas orderis nav izpildīts līdz brīdim, kad signāls novecojis? Dzīties pakaļ ar taker orderi un maksāt spreda starpību plus ietekmi uz tirgu? Izvietot orderi no jauna zemāk un pieņemt citu ieejas bāzi? Izlaist darījumu un palikt ārpus pozīcijas? Katra izvēle rada būtiski atšķirīgu kapitāla līkni, un “pieņemt, ka orderis tika izpildīts” nav neviena no tām. Mūsu izmēģinājumos godīgs pakaļdzīšanās noteikums (šķērsot spreda starpību, ja pēc 20 sekundēm orderis nav izpildīts, slippage ierobežojot līdz 3 bp) atguva aptuveni trešdaļu neesošo darījumu un apmēram pusi no Sharpe starpības starp vienkāršoto atpakaļtestu un rindas simulāciju. Tas ir patiesi interesants rezultāts, kas parādās tikai tad, kad izpildes modelis ir pietiekami reālistisks, lai jautājums vispār būtu jēgpilns.

Ātra pārbaude, kas aizņems 10 minūtes: paņemiet sava reāllaika simulētās tirdzniecības žurnālu un atpakaļtestu par vienu un to pašu periodu. Salīdziniet izpildes rādītāju, nevis PnL. Ja atpakaļtests izpilda 100% izvietoto orderu, bet simulētajā tirdzniecībā — 34%, jums nav stratēģiju salīdzinājuma, bet gan kļūdains izpildes modelis. Izlabojiet to, pirms skatāties kaut vienu ienesīguma skaitli.

Vēl 2 sīkumi, kamēr esat pie rokas

Post-only noraidījumi. Ja izmantojat post-only, lai garantētu maker komisijas līmeni, un orderu grāmata mainās laikā starp jūsu lēmumu un biržas apstiprinājumu, orderis tiek noraidīts, nevis atstāts orderu grāmatā. Mūsu simulētās tirdzniecības žurnālos tas notiek 3-6% mēģinājumu ar BTCUSDT parastā laikā un vairāk nekā 15% gadījumu minūtē pēc ASV PCI datu publiskošanas. Noraidīts orderis nav izpildīts orderis, un tas nav arī neizpildīts orderis, kas joprojām gaida rindā; tas ir darījums, kura nekad nav bijis. Ja atpakaļtestā šāda stāvokļa nav, darījumu skaits ir uzpūsts tieši tajos tirgus režīmos, kas jums rūp visvairāk.

Pašdarījumu novēršana un jūsu pašu ietekme. Ar 0.4 BTC jūs neizkustināt BTCUSDT cenu, tāpēc šo var izlaist. Taču jūs minējāt, ka gribat palaist šo stratēģiju altkoinu perpetual tirgū ar vidēju kapitalizāciju, kur labākās cenas nominālvērtība bieži ir zem 15k USD. Tur jūsu orderis ir nozīmīga daļa no rindas, un rindas apjoma aprēķinā, ko fiksējat, ir iekļauta jūsu iepriekšējā ordera ietekme. Kad jūsu apjoms pārsniedz aptuveni 10% no līmenī stāvošā apjoma, simulācijā jāņem vērā, ka citi dalībnieki uz jums reaģē. Un, godīgi sakot, šajā brīdī es vairāk uzticētos simulētai tirdzniecībai nekā jebkurai simulācijai, ko varam uzrakstīt mēs ar jums.

Palaidiet atpakaļtestu ar rindas simulāciju un atsūtiet man mark-out tabulu, sadalītu pēc izpildes veida. Ja atlēciena grozā joprojām ir lielākā daļa priekšrocības un caursitiena grozs to visu neapēd, iespējams, jums ir kas tāds, ko vērts pārbaudīt simulētā tirdzniecībā. Ja visu radīja 2,900 izpildes, kuras jūs nekad nebūtu saņēmis, labāk to uzzināt tagad, nevis pēc 4 nedēļām, vērojot, kā simulētais konts nedara to, ko solīja piezīmju grāmata.

limita orderivieta rindānelabvēlīga atlaseatpakaļtestēšanakripto fjūčeri
← Visi raksti