Garā pozīcija no 84,120. Stops pie 84,036, mērķis pie 84,271. Nākamās minūtes svece: atvēršanas cena 84,118, maksimums 84,290, minimums 84,010, slēgšanas cena 84,240.
Abi līmeņi atrodas šajā svecē. Stops tika skarts, un mērķis tika skarts, bet četri OHLC skaitļi nesatur pilnīgi nekādu informāciju par to, kurš notika pirmais. Jūsu atpakaļtests tik un tā atgrieza skaitli. Kaut kur ciklā kāda rinda pieņēma lēmumu — visticamāk, rinda, par kuru, to rakstot, nedomājāt kā par modelēšanas pieņēmumu.
Īstermiņa stratēģijās tas ir lielākais viltus rezultātu avots, ko esmu redzējis — lielāks par komisijām un slīdi, jo tas neizskatās pēc pieņēmuma. Tas izskatās pēc tehniskas detaļas.
Pirmais kļūdainais paņēmiens: ļaut if nosacījumu secībai izlemt
Parasti tas izskatās šādi:
if bar.high >= target:
exit(target, "tp")
elif bar.low <= stop:
exit(stop, "sl")
Neviens neizvēlējās „vispirms izpildīt mērķi, tikai tad stopu”. Mērķa pārbaudi vienkārši ierakstīja pirmo, jo tā ir ierastā veiksmīgā situācija, par kuru tobrīd domājāt. Apmainiet vietām abus zarus, un kapitāla līkne mainīsies; ar to vien pietiek, lai saprastu, ka stratēģijas P&L daļēji ir atkarīgs no tā, kā uzrakstījāt kodu.
Es izmēģināju apzināti parastu vidējās vērtības atgriešanās skalpēšanas stratēģiju BTCUSDT mūžīgajos fjūčeros: trīs mēneši ar 1 minūtes svecēm, 4,812 darījumu, stops 0.10% un mērķis 0.18% no ieejas cenas. Tie paši signāli, tās pašas komisijas, mainījās tikai vienādu gadījumu atrisināšanas noteikums.
Astotā daļa darījumu nosaka visu rezultātu. Tā rēķinās, ja stopa un mērķa diapazons ir šaurs: neskaidrie darījumi ir tie, kuros cena kustējās abos virzienos, un tie ir lielākā daļa interesanto gadījumu. Atkarībā no monētas uzmetiena katrs šāds darījums var būt stopa un mērķa attāluma vērtībā. 12.6% darījumu × 0.28% diapazons ir 3.5% no bruto nominālā apgrozījuma uz katru izlases vienību — daudz vairāk par stratēģijas faktisko priekšrocību.
Šis īpatsvars ir atkarīgs no sveču intervāla salīdzinājumā ar līmeņu attālumu, un, palielinot sveču intervālu, tas strauji pieaug. Tie paši stopi un mērķi, tie paši signāli, pārrēķināti dažādos intervālos:
| Sveces intervāls | Darījumi, kuros vienā svecē ir abi līmeņi | Sharpe (vispirms mērķis) |
|---|---|---|
| 1s | 0.3% | 0.91 |
| 1m | 12.6% | 2.31 |
| 5m | 34% | 3.60 |
| 15m | 49% | 4.42 |
| 1h | 71% | 5.88 |
Padomājiet, ko šī tabula patiesībā rāda. Rupjākas sveces uzlaboja atpakaļtesta rezultātu. Pētnieki intuitīvi uzskata, ka stundu sveces ir piesardzīgāka izvēle: mazāk trokšņa, mazāka pielāgošana mikrostruktūrai. Taču, ja sveces ietvaros notikumu secību nosaka jums par labu, rupjāka svece ir tikai lielāka kaste, kurā varat pieņemt, ka jums paveicās. 1h svecēs septiņi no desmit darījumiem ir atkarīgi tikai no izvēlētā noteikuma. Šis atpakaļtests nepārbauda stratēģiju, bet gan to, kurš no diviem `if` nosacījumiem izpildīts pirmais, 3,400 reižu.
Otrais kļūdainais paņēmiens: pieņemt, ka stops izpildīts par stopa cenu
Pieņemsim, ka esat sakārtojuši izpildes secību. Stops tiek izpildīts pirmais, jūs iegrāmatojat tieši 0.10% zaudējumu plus taker komisiju un jūtaties stingri metodiski. Tomēr vēl divas lietas nav pareizas.
Pirmkārt, stops ir aktivizētājs, nevis izpildes cena. Binance USDⓈ-M STOP_MARKET orderis brīdī, kad tiek sasniegts aktivizēšanas nosacījums, kļūst par tirgus orderi un patērē orderu grāmatā pieejamo likviditāti. Mierīgā minūtē tas nozīmē vienu vai divus cenas soļus slīdes. Minūtē, kurā stopu patiešām aktivizēja — tajā, kuras sveces ķermenis bija 40 punktu plats un zem kuras sekoja likvidāciju kaskāde — orderu grāmata ir sekla tieši tajā pusē, kurā jūs veicat darījumu. Savā izlasē salīdzināju stopu aktivizācijas brīžus ar darījumu plūsmu: mediānā izpildes cena bija 1.4 bps sliktāka par aktivizācijas cenu, bet 95. percentile — 11 bps. Ja stopa attālums ir 10 bps, šī galējā novirze rada vēl desmito daļu no riska, ko domājāt kontrolējam.
Otrkārt, kas ir smalkāk un raksturīgi mūžīgajiem fjūčeriem: kura cena to aktivizē. Binance stop orderiem pēc noklusējuma izmanto mark cenu, ko veido indekss un izlīdzināta bāze, nevis pēdējā darījuma cena šajā biržā. Jūsu OHLC sērijā ir pēdējā cena. Tās ir atšķirīgas sērijas, un visvairāk tās atšķiras tieši notikumos, kas aktivizē stopus.
| Pēdējā cena (jūsu sveču dati) | Mark cena (noklusējuma aktivizētājs) | |
|---|---|---|
| Avots | darījumi šajā biržā | vairāku biržu indekss + bāze |
| Ēnas uzvedība | pilna novirze | ievērojami izlīdzināta |
| Tipiskā atšķirība | 1–3 bps mierīgā tirgū, 20–35 bps kaskādes minūtē | |
| Ietekme uz atpakaļtestu | stopi, kas aktivizējās, lai gan nevajadzēja, un otrādi | |
Tātad pēdējās cenas grafikā 25 bps gara ēna aktivizē stopu atpakaļtestā, lai gan reālā mark cena ne reizi nenonāca tuvāk par 10 bps jūsu aktivizācijas cenai. Vai arī notiek pretējais dienā, kad mainās indekss, bet jūsu birža atpaliek. Ja iestatāt workingType uz CONTRACT_PRICE, vismaz panāksiet, ka reālā darbība atbilst jūsu datiem; pētniekam tā parasti ir pareizā izvēle, jo mark cenas aktivizācijas godprātīgai simulācijai visa izpildes dzinēja darbībā jāiekļauj otra cenu sērija.
Vislabāk atceros šādu gadījumu: kāds no mūsu komandas „uzlaboja” stratēģiju, pārvietojot peļņas mērķi no 0.18% uz 0.21%. Sharpe pieauga no 2.3 līdz 3.1. Nekāda jauna priekšrocība neradās. Mērķis vienkārši bija pārvietots ārpus 1 minūtes ēnu sadalījuma platākās daļas, tāpēc mazāk darījumu nonāca neskaidrajā grupā, kur kods klusi piešķīra uzvaru. Viņi bija optimizējuši vienādu gadījumu atrisināšanu.
Trešais kļūdainais paņēmiens: vienmēr pieņemt sliktāko un saukt to par piesardzīgu pieeju
Pirmais risinājums, kas nāk prātā, ir pesimisms. Ja tiek skarti abi līmeņi, fiksējam stopu. Gatavs, vairs nekādas pārliekas optimistiskas pieejas — varam publicēt.
Agrāk arī tā darīju. Tas ir labāk par pretējo, bet joprojām nepareizi divu iemeslu dēļ.
Tas iznīcina stratēģijas, kas darbojas. Pesimistiska izpilde 12.6% darījumu šai stratēģijai maksāja 2.1 Sharpe punktu salīdzinājumā ar 0.94, ko uzrādīja izšķiršana pēc darījumu plūsmas. Ja patiesais rādītājs ir 0.94, bet jūsu noteikums uzrāda 0.18, jūs atmetat ideju un sākat strādāt pie kaut kā sliktāka. Piesardzība, kas kļūdās par diviem Sharpe punktiem, nav piesardzība — tie ir trokšņi ar morālu stāju.
Vēl sliktāk — tas sagroza optimizāciju. Ja parametru pārbaudei izmanto pesimistisku noteikumu, optimizētājs iemācās izvairīties no neskaidrības, jo tā tagad nozīmē tikai sodu. Tas virzīsies uz platiem stopiem un tuviem mērķiem vai lēnākām svecēm, kurās abi līmeņi reti sastopami reizē, un piedāvās parametrus, kas atlasīti pēc jūsu izpildes noteikuma, nevis tirgus. Tā pati kļūda kā dāsnākajā variantā, tikai ar pretēju zīmi, un pārskata lapā tā ir tikpat nemanāma.
Īkšķa likums, ko izmantojam pirms visa pārējā: ja stop_distance + target_distance ir mazāks par jūsu sveču intervāla diapazona 75. percentili, pieņēmums par kustību sveces ietvaros P&L ietekmē vairāk nekā signāls. Aprēķiniet abus skaitļus. Tas aizņem četras koda rindas un ir pārtraucis vairāk stratēģiju pārskatu nekā jebkura cita atsevišķa pārbaude.
Kas patiešām palīdz
Kustības ceļš sveces ietvaros ir dati. Iegūstiet tos vai nosakiet robežas tam, ko nevarat iegūt.
- Izšķiriet notikumu secību pēc smalkākās pieejamās datu sērijas. Binance aggTrades attiecīgajām minūtēm ir daži simti rindu, un tie sniedz galīgo atbildi: kurš līmenis tika sasniegts pirmais un par kādu cenu izpildījās caursitiens. Atpakaļtestam nav vajadzīgi dati par katru cenu soli — tikai neskaidrajām svecēm. Manā izlasē tādu bija 606 minūtes no 129,600. Tā ir neliela lejupielāde, nevis infrastruktūras projekts.
- Ja darījumu plūsmas dati nav pieejami, izšķiršanai izmantojiet vienu vai divus laika periodus zemāku intervālu. Signāliem izmantojiet 15m sveces, bet izejām — 1s vai 1m sveces. Neskaidrību īpatsvars sarūk no 49% līdz procenta daļai, un atlikums ir pietiekami mazs, lai to godīgi ignorētu.
- Vienmēr uzrādiet diapazonu. Veiciet katru atpakaļtestu divreiz — ar optimistisku un pesimistisku izšķiršanu — un blakus atrisinātajam rādītājam norādiet abus Sharpe. Šī starpība parāda nenoteiktību, ko rada sveces ietvaros notiekošais, un tai jābūt pārskata lapā blakus Sharpe ticamības intervālam. Ja diapazons ir 0.2–2.3, neviens secinājums tā robežās nav patiess.
- Uzskaitiet neskaidro darījumu īpatsvaru kā galveno rādītāju. Mums tas ir katras stratēģijas kartītes augšdaļā blakus darījumu skaitam un apgrozījumam. Ja šis rādītājs pārsniedz aptuveni 5%, pārbaudām izejas, nevis ieejas loģiku.
- Modelējiet aktivizēšanu atsevišķi no izpildes. Aktivizējiet orderi pēc cenas sērijas, ko birža faktiski izmanto; izpildes cenu nosakiet kā aktivizācijas cenu plus no darījumu plūsmas aprēķinātu slīdi, nevis kā pašu aktivizācijas cenu.
Akcijām ir tā pati problēma citā izskatā. Ja vērtspapīra cena pa nakti nokrītas līdz 58.40, stopu pie 62.00 neizpilda par 62.00 — to izpilda par cenu zem atvēršanas cenas. Dienas sveču atpakaļtests, kas cenu lēcienu gadījumā uzrāda −$0.00 slīdi, labprāt apgalvos, ka stopu stratēģija samazinājusi kritumu. Tā nav. Tai vienkārši nebija jāpārbauda sevi dienās, kurām ir nozīme. To pašu rada arī tirdzniecības apturēšana: jūsu stops faktiski izpildās atklāšanas izsolē par cenu, ko sveces minimums nekad neatspoguļo.
Nekas no tā nav neparasts. Tā ir atziņa, ka svece ir kopsavilkums, bet stratēģija ar stopu un mērķi ir likme uz notikumu secību, ko šis kopsavilkums ir izmetis. Kad papīra tirdzniecības dzinējs beidzot darbina stratēģiju pret reālu cenu plūsmu, šī plūsma nosaka notikumu secību, un tai nekad nav bijis svarīgi, kuru if nosacījuma zaru ierakstījāt pirmo.
← Visi raksti


