20 päivän Donchian näyttää speksissä harmittomalta. Agentti kirjoittaa 20 barin liukuvan maksimin, backtest alkaa parquet-tiedoston ensimmäiseltä riviltä, ja kahden ensimmäisen viikon ajan "20 päivän huippu" on vain juokseva maksimi niistä bareista, joita on olemassa. Neljäntenä päivänä se on neljän päivän huippu. Strategia, jota luulit testaavasi, ei ole se, joka tuotti ensimmäisen tusinan täytöt.
Minulla on notebook ETHUSDT:n päiväbareista, jossa koko otoksen Sharpe on 1.4. Leikkaa 20 ensimmäistä sessiota pois, ja se putoaa 0.6:een. Pidä nuo 20 ja pudota ensimmäisen vuoden loput, niin se tulostaa 3.1. Kukaan ei vuotanut huomista. Strategia käytti menneisyyttä, vain ei tarpeeksi sitä, ja raportti käsitteli nuo puolivalmiit kaupat todisteena.
Anna ikkunan käydä kauppaa sen vielä täyttyessä
Tavallinen tuho on min_periods=1. Pandas laskee liukuvan keskiarvon yhdestäkin barista, jos annat sen tehdä niin. Agentit tekevät tätä jatkuvasti, koska NaN framen yläreunassa tuntuu bugilta, ja sen täyttäminen saa yksikkötestin vihreäksi.
20 päivän realized-vol-tavoite kahdella tuottohavainnolla on positiokoon räjähdys. Kahden luvun varianssi on kolikonheitto, otat sen käänteisluvun, ja ensimmäinen positio on useita kertoja aiottua riskiä. Z-score lähes nollaa olevaa keskihajontaa vastaan tekee saman tempun etumerkillä: strategialla näyttää olevan viiltävän tarkka sisäänmeno, joka ei enää koskaan toistu, kun ikkuna on rehellinen.
Läpimurrot ovat pahempia, koska ne näyttävät oikealta säännöltä. 20 barin kanava kuudennella barilla on kuuden barin kanava. Saat ryppään kauppoja heti alussa, usein hiljaisessa jaksossa, joka ei olisi laukaissut valmista indikaattoria. Hiljaiset markkinat ajelehtivat hieman. Tiukka kanava laukeaa. Tuottokäyrä saa etumatkan, jota mikään myöhempi vuosi ei toista.
Zero-fill ja forward-fill keksivät toisenlaisen valheen. RSI arvossa 0 luetaan ylimyydyksi. Puuttuva ATR arvossa 0 räjäyttää yksikkökoon, ja backtest ostaa kuuliaisesti kokonaisen varaston. Mieluummin NaN tappaa toimeksiannon kuin 0 keksii sellaisen.
Sorrun yhä piirtämään rivistä 0 alkaen, koska tyhjä kuukausi kaavion vasemmassa reunassa näyttää keskeneräiseltä. Tyhjä kuukausi on rehellinen osa.
Rajaa tuottokäyrä, pidä positio
Tämä selviää koodikatselmoinnista. Lasket 20 päivän ominaisuudet kunnolla, pudotat 20 ensimmäistä riviä piirretystä käyrästä ja julkaiset 21. tammikuuta alkaen. Positio 21. tammikuuta avattiin 14. tammikuuta. Trailing stopin high-water, pyramidilaskuri, käteinen noiden burn-inien jälkeen: kaikki käveli "puhtaaseen" otokseen.
Tuho on paperistrategia, jota ei voi käynnistää kirjoituksessa mainitulla päivämäärällä. Käynnistä uudelleen ilman positioita raportoidusta alusta, ja ensimmäisen viikon toimeksiannot eivät täsmää. Joskus backtest on jo kaupassa, johon paperijärjestelmällä ei ole syytä mennä. Joskus paperijärjestelmä menee sisään, koska sen lookback on kylmä, ja backtest jää sivuun, koska sen piilotettu kuukausi otti jo läpimurron. Kaksi avauskirjaa, yksi julkaistu aloituspäivä.
Walk-forward-foldit tekevät tämän hiljaa. Jokaisella testi-ikkunalla on lookback-häntä, jota et piirrä. Jätä häntä simuloimatta, ja ensimmäiset testikaupat ovat taas keskeneräisen ikkunan kauppoja. Simuloi se ja raportoi vain testipäivät, ja testipäivän positio on ehdollinen täytöille, joita et näytä. Jälkimmäinen versio voi olla perusteltu tutkimuksellinen valinta. Se, että foldin ensimmäistä aamua kutsutaan kylmäksi käynnistykseksi, vaikka trailing stop on jo elossa hännästä, on tapa, jolla kaksi tutkijaa saa kaksi Sharpea yhdestä konfiguraatiosta.
Lämmitä kalenteripäivinä, kun ominaisuus ei ole päivä
"Anna sille 30 päivää" jättää ominaisuuden alimääritellyksi. Kolmekymmentä kalenteripäivää 5 minuutin Donchianilla on tuhansia bareja yli 20 jakson lookbackin. Kolmekymmentä päivää päivittäisellä ominaisuudella, joka tarvitsee 20 sessiota, on joko lihava tai laiha, viikonlopuista ja aukoista riippuen.
Funding-rate z-score yhdellä perp-paikoistamme sai 30 päivän lämmittelyn, koska speksi sanoi 30 jaksoa ja joku käänsi jaksot kalenteriksi. Funding printtaa siellä kahdeksan tunnin välein. Kolmekymmentä päivää on noin 90 selvitystä. Kolmekymmentä jaksoa on kymmenen päivää. Kaksi ylimääräistä burn-in-kuukautta sattui sisältämään depeg-viikon. Sen pudottaminen sai live-ikkunan näyttämään rauhallisemmalta kuin strategian todellinen historia. Ihmiset syyttivät aloituspäiväherkkyyttä. Lämmittely oli syönyt regiimin.
Ja krypto versus osakkeet saa saman luvun merkityksen muuttumaan ilman, että kukaan muokkaa parametria. Kaksikymmentä ETH:n "päivää" sisältää lauantait. Kaksikymmentä osakesessiota on lähes kalenterikuukausi. Kopioi 20 päivän lookback osakenotebookista tunnittaisille perpetual-kynttilöille, niin saat 20 tunnin kanavan 20 päivän nimellä. Ensimmäinen validi bari on sitten joko 20 tunnin päässä tai 20 päivän päässä, jos jokin myöhempi funktio resamplee, ja olen nähnyt molemmat samassa agentin diffissä.
Lukitse ensimmäinen kaupankäyntikelpoinen aikaleima
Lämmittely on datavaatimus, ei bonusotos. Jokainen ominaisuus nimeää valmiiden havaintojen määrän, jonka se tarvitsee, niissä yksiköissä, joissa se lasketaan. Ensimmäinen kaupankäyntikelpoinen aikaleima on ensimmäinen bari, jossa kaikki nämä pitävät paikkansa ja tili ilman positioita olisi saanut lähettää toimeksiannon.
| Ominaisuus | Mitä speksi yleensä sanoo | Mitä oikeasti on oltava olemassa | Hiljainen korvike |
|---|---|---|---|
| 20 päivän Donchian | 20 päivittäistä huippua | 20 valmista sessiota | Juokseva max, min_periods=1 |
| 30 päivän realized vol | 30 päivän ikkuna | 30 close-to-close-tuottoa | Kahden päivän varianssi, käännetty kokoon |
| 20 printin funding z-score | 20 päivää | 20 funding-selvitystä | 20 kalenteripäivää (~90 printtiä) tai 20 baria väärältä aikaväliltä |
| 14 jakson RSI 5m:llä | 14 jaksoa | 14 suljettua viiden minuutin baria | 14 päivää tai 14 baria, aukot forward-fillattuina |
P&L ennen sitä aikaleimaa pysyy poissa tuottohistoriasta. Tila ennen sitä aikaleimaa voi silti vaatia simulointia, jotta trailing stop tai cooldown on todellinen, kun kello osuu ensimmäiseen kaupankäyntikelpoiseen bariin, mutta nuo täytöt eivät mene Sharpeen, kauppamäärään tai kapasiteettilaskentaan. Sitten aja ruma tarkistus: käynnistä ilman positioita tuolla aikaleimalla, lookback saatavilla vain datana. Jos toimeksiannot muuttuvat, toimitit piilokauppoja.
Paperikauppa alkaa samalla sopimuksella. Samoin jokainen walk-forward-testi-ikkuna. Jos kaavio näyttää siltä, että kuukausi puuttuu, jätä se puuttumaan.
← Kaikki kirjoitukset


