10:14 UTC paprasta pramušimo strategija pirko kriptovaliutos neterminuotąjį ateities sandorį, kai kaina pakilo virš 20 minučių maksimumo. Atgalinis testas parodė įvykdymą už $64,210. Toks skaičius buvo duomenyse, signalas turėjo teisingą laiko žymą, o simuliuotas pavedimas pasiekė rinką kitame bare. Beveik pavadinome tai nepriekaištingu rezultatu.
Tada sulyginome instrumentų ID. Signalas buvo gautas iš BTCUSDT neterminuotojo ateities sandorio, o įvykdymas – iš atvirkštinio BTCUSD kontrakto. Abiem buvo prekiaujama netoli $64,210, ir abi rinkos buvo likvidžios. Vis dėlto tai buvo skirtingos pavedimų knygos, su skirtingomis kainomis, mažiausiais kainos pokyčiais, gyliu ir komisinių struktūromis. Atgalinis testas sujungė duomenis taip, lyg tai būtų viena rinka, kurioje prekiauti negalėjo joks rinkos dalyvis.
Pati strategija buvo įprasta: pirkti užsidarius virš slankiojo maksimumo, parduoti užsidarius žemiau slankiojo minimumo, o kiekvienos pozicijos dydį nustatyti pagal fiksuotą riziką doleriais. Problema išryškėjo tik uždavus tikslesnį klausimą nei „kiek buvo vertas BTC?“ Paklausėme: „Kiek šis pavedimas tuo metu būtų galėjęs nupirkti būtent šiuo kontraktu?“
Dar prieš paleidžiant strategiją, diagrama rodė sudėtinę kainų seką
Mūsų tyrimų duomenų srautas leido lengvai palyginti prekybos vietas. Jis suvienodino simbolius ir rodė konsoliduotą kainų seką. Tai buvo patogu rinkos analizei, bet netiko kaip vykdymo atskaitos taškas. Sudėtinėje sekoje gali būti rodoma geriausia kaina iš skirtingų biržų, nors strategija gali siųsti pavedimą tik į vieną prekybos vietą.
Pramušimo metu konsoliduoto baro maksimumas buvo $64,205. Pasirinkto kontrakto paskutinis sandoris jau buvo įvykęs už $64,218. Tuo pat metu podėlyje išsaugota atvirkštinio kontrakto kotiruotė vis dar rodė $64,210 pardavimo kainą. Simuliatorius panaudojo pramušimo signalą iš vienos sekos ir patrauklią pardavimo kainą iš kitos. Kiekviena reikšmė buvo tikra. Kartu jos sudarė išgalvotą vaizdą.
| Įvestis | Ką naudojo atgalinis testas | Ko reikėjo pavedimui |
|---|---|---|
| Pramušimo maksimumas | Konsoliduota BTC kaina | Pasirinkto kontrakto kainų istorija |
| Įėjimo atskaitos kaina | Podėlyje išsaugota atvirkštinio kontrakto pardavimo kaina | Naujausia prekiauto instrumento pardavimo kaina |
| Įvykdymo kiekis | Prašytas pozicijos dydis | Kiekis kiekviename kainos lygyje |
Rinkos duomenų lentelės eilutė gali atrodyti užpildyta, nors jos laukai apibūdina skirtingas rinkas. Simbolių slapyvardžiai neįrodo, kad du instrumentai naudoja tą pačią pavedimų knygą. Kontrakto ID, prekybos vieta, kotiravimo valiuta ir laiko žyma turi būti išsaugoti per visą signalo generavimo ir pavedimo vykdymo procesą.
Atkūrėme pavedimo vykdymą pagal pavedimų knygą
Pakartotinai sumodeliavome pirkimą pagal pasirinkto neterminuotojo ateities sandorio geriausią pardavimo kainą ir pavedimų knygos atnaujinimus, kurie buvo prieinami sprendimo priėmimo metu. Kotiruotė buvo nauja, bet geriausiame lygyje buvo tik 0.18 BTC. Mūsų simuliuotas pavedimas buvo 0.50 BTC. Likę 0.32 BTC būtų buvę nupirkti aukštesnėmis pardavimo kainomis.
Pakoreguota įėjimo kaina buvo $21 už BTC blogesnė už nurodytą įvykdymo kainą, neįskaičiavus komisinių. Vienam sandoriui tai nedidelis skirtumas. Tačiau per visą testą didžiąją bendrojo pelno dalį strategija uždirbo iš kelių greitų pramušimų. Pakartotinai atkūrus įėjimus pagal teisingas pavedimų knygas, bendrasis rezultatas sumažėjo 31%; takerio komisiniai ir rinkos poveikis jį dar labiau sumažino.
Taip pat radome du atvejus, kai geriausios kainos kotiruotė gauta po signalo sprendimo laiko. Atgalinis testas, kuris sujungia duomenis pagal artimiausią laiko žymą, gali nepastebimai parinkti vėlesnį atnaujinimą. Dabar sujungiame duomenis atgaline tvarka: kotiruotė turi būti gauta iki pavedimo išsiuntimo, o jos amžių užfiksuojame. Jei naujausia tinkama kotiruotė per sena, simuliatorius pažymi, kad pavedimo įvykdyti negalima, arba taiko aiškiai apibrėžtą pasenusių duomenų taisyklę.
Ko reikia, kad kaina būtų pasiekiama prekybai
Baro uždarymo kaina naudinga signalui apskaičiuoti. Tačiau ji neįrodo, kad konkretų pavedimą būtų buvę galima įvykdyti už tokią kainą. Tam kaina turi priklausyti būtent tam instrumentui ir prekybos vietai, būti prieinama pavedimo atvykimo metu ir turėti pakankamą priešingos pusės kiekį prašomam dydžiui. Jei duomenys neleidžia į šiuos klausimus atsakyti, sąžiningas rezultatas yra kainų intervalas arba nenurodytas įvykdymas, o ne išgalvota tiksli kaina.
Konsoliduotą seką palikome rinkos kontekstui ir pašalinome ją iš pavedimų vykdymo proceso. Signalai dabar remiasi pasirinkto kontrakto kainų istorija, o pavedimų įvykdymas atkuriamas pagal to kontrakto pavedimų knygą; komisiniai ir pavedimo dydis įtraukiami apskaičiavus įvykdymą. Šiek tiek daugiau paruošiamojo darbo ir gerokai kuklesnė nuosavo kapitalo kreivė.
Tas pramušimas tikrai įvyko. Tiesiog atgalinis testas suteikė jam geresnę rinką, nei ta, kurią buvo pasirinkusi strategija.
← Visi įrašai


