20-dnevni Donchian v specifikaciji izgleda nedolžno. Agent zapiše 20-barski rolling max, backtest se začne v prvi vrstici parquet datoteke in prva dva tedna je »20-dnevni vrh« zgolj tekoči maksimum tistih barov, ki obstajajo. Četrti dan je to štiridnevni vrh. Strategija, za katero ste mislili, da jo testirate, ni tista, ki je proizvedla prvih ducat fillov.
Imam notebook na dnevnih barih ETHUSDT, kjer je Sharpe na celotnem vzorcu 1.4. Odrežite prvih 20 sej in pade na 0.6. Obdržite tistih 20 in zavrzite preostanek prvega leta, pa izpiše 3.1. Nihče ni puščal jutrišnjega dne. Strategija je uporabljala preteklost, samo je ni bilo dovolj, poročilo pa je tiste napol oblikovane posle obravnavalo kot dokaz.
Naj okno trguje, dokler se še polni
Običajna poguba je min_periods=1. Pandas bo izračunal rolling mean že na enem samem baru, če mu to dovolite. Agenti to počnejo nenehno, ker NaN na vrhu framea deluje kot hrošč, in če ga zapolnite, unit test pozeleni.
20-dnevni cilj realized-vol z dvema opazovanjema donosa je eksplozija velikosti. Varianca dveh številk je metanje kovanca, jo invertirate in prva pozicija je nekajkratnik predvidenega tveganja. Z-score proti skoraj ničelnemu standardnemu odklonu naredi isti trik s predznakom: strategija izgleda, kot da ima britveno oster vstop, ki se nikoli več ne pokaže, ko je okno pošteno.
Breakouti so hujši, ker izgledajo kot pravo pravilo. 20-barski kanal na šestem baru je šestbarski kanal. Dobite gručo poslov takoj na začetku, pogosto v tihem obdobju, ki ne bi sprožilo dokončanega indikatorja. Tihi trgi malo drsijo. Tesen kanal se sproži. Krivulja kapitala dobi zalet, ki ga nobeno poznejše leto ne ponovi.
Zero-fill in forward-fill si izmislita drugačno laž. RSI pri 0 se bere kot preprodan. Manjkajoči ATR 0 raznese velikost enote in backtest vestno kupi skladišče. Raje vidim, da NaN ubije nalog, kot da 0 izumi enega.
Še vedno se zalotim, da rišem od vrstice 0, ker prazen mesec na levi strani grafa izgleda nedokončan. Prazen mesec je pošteni del.
Obreži krivuljo kapitala, obdrži pozicijo
Ta preživi code review. 20-dnevne značilnosti izračunate pravilno, iz narisane krivulje zavržete prvih 20 vrstic in objavite od 21. januarja. Pozicija 21. januarja je bila odprta 14. januarja. High-water trailing stopa, števec piramide, denar po tistih burn-in poslih: vse to je zakorakalo v »čisti« vzorec.
Poguba je paper strategija, ki je ni mogoče zagnati na datum iz zapisa. Če znova zaženete iz ničelne pozicije na navedenem začetku, se nalogi prvega tedna ne ujemajo. Včasih je backtest že v poslu, v katerega paper sistem nima razloga vstopiti. Včasih paper sistem vstopi, ker je njegov lookback hladen, backtest pa sedi zunaj, ker je njegov skriti mesec že vzel breakout. Dve otvoritveni knjigi, en objavljeni začetni datum.
Walk-forward foldi to naredijo tiho. Vsako testno okno ima lookback rep, ki ga ne narišete. Če ta rep preskočite pri simulaciji, so prvi testni posli spet posli nedokončanega okna. Če ga simulirate in poročate samo testne dni, je pozicija testnega dne pogojena s filli, ki jih ne prikazujete. Ta druga različica je lahko legitimna raziskovalna izbira. Če prvo jutro folda imenujete cold start, medtem ko je trailing stop že živ iz repa, je to način, kako dva raziskovalca iz ene konfiguracije dobita dva Sharpeja.
Ogrevaj v koledarskih dneh, ko značilnost ni dan
»Dajte mu 30 dni« pusti značilnost premalo specificirano. Trideset koledarskih dni na 5-minutnem Donchianu je tisoče barov mimo 20-periodnega lookbacka. Trideset dni na dnevni značilnosti, ki potrebuje 20 sej, je bodisi debelo bodisi tanko, odvisno od vikendov in lukenj.
Z-score funding rate na enem od naših perp venuejev je dobil 30-dnevni warmup, ker je specifikacija rekla 30 period in je nekdo periode prevedel v koledar. Funding se tam izpiše vsakih osem ur. Trideset dni je približno 90 poravnav. Trideset period je deset dni. Dodatna dva meseca burn-ina sta slučajno vključevala teden depega. Če smo to izpustili, je live okno izgledalo mirneje od prave zgodovine strategije. Ljudje so krivili občutljivost na začetni datum. Warmup je požrl režim.
In kripto proti delnicam isti številki spremeni pomen, ne da bi kdo uredil parameter. Dvajset »dni« ETH vključuje sobote. Dvajset delniških sej je skoraj koledarski mesec. Če 20-dnevni lookback iz notebooka za delnice skopirate na urne perpetual sveče, imate 20-urni kanal z 20-dnevnim imenom. Prvi veljavni bar je potem bodisi 20 ur noter bodisi 20 dni noter, če kakšna kasnejša funkcija resampla, in oboje sem videl v istem agentovem diffu.
Pripni prvi trgovalni časovni žig
Warmup je podatkovna zahteva, ne bonus vzorec. Vsaka značilnost navede število dokončanih opazovanj, ki jih potrebuje, v enotah, v katerih se računa. Prvi trgovalni časovni žig je prvi bar, kjer vse to drži in bi bilo ničelnemu računu dovoljeno poslati nalog.
| Značilnost | Kaj specifikacija običajno pravi | Kaj mora dejansko obstajati | Tihi nadomestek |
|---|---|---|---|
| 20-dnevni Donchian | 20 dnevnih vrhov | 20 zaključenih sej | Running max z min_periods=1 |
| 30-dnevni realized vol | 30-dnevno okno | 30 donosov close-to-close | Dvodnevna varianca, invertirana v velikost |
| 20-print funding z-score | 20 dni | 20 funding poravnav | 20 koledarskih dni (~90 printov) ali 20 barov napačnega časovnega okvira |
| 14-periodni RSI na 5m | 14 period | 14 zaprtih petminutnih barov | 14 dni ali 14 barov z luknjami, ki so forward-filled |
P&L pred tem časovnim žigom ostane zunaj track recorda. Stanje pred tem časovnim žigom bo morda še vedno treba simulirati, tako da je trailing stop ali cooldown resničen, ko ura zadene prvi trgovalni bar, vendar ti filli ne gredo v Sharpe, število poslov ali račun kapacitete. Nato zaženite grdo preverjanje: znova zaženite iz ničelne pozicije na tem časovnem žigu, z lookbackom, ki je na voljo samo kot podatki. Če se nalogi spremenijo, ste pošiljali skrite posle.
Paper trading se začne na isti pogodbi. Enako velja za vsako walk-forward testno okno. Če graf izgleda, kot da manjka mesec, naj manjka.
← Vse objave


