Sisääntulosignaalisi on luultavasti backtestisi vähiten merkityksellinen osa. Voin ottaa yhden keskinkertaisen momenttisäännön, pitää jokaisen sisään- ja ulostulohetken ennallaan, muuttaa vain funktiota, joka päättää pidettävien sopimusten määrän, ja siirtää nettona Sharpen luvun 0.41:stä 0.71:een ja suurimman drawdownin 31%:sta 13%:iin. Samat kaupat. Samat toteutukset. Eri strategia.
Tuo väite ärsyttää ihmisiä, ja syystäkin, koska se tarkoittaa, että suurin osa lookbackien ja suodinkynnysten virittämiseen käytetystä ajasta kuluu pienen termin parissa. Näytän siis todelliset ajot ja annan sitten kriitikoille heidän ansaitsemansa huomion, sillä tästä väitteestä on olemassa väärä versio, ja kannattaa tietää, mitä versiota itse esitän.
Yksi signaali, kuusi tapaa pitää positiota
Signaali: ETHUSDT-perpetuaali Binance USDⓈ-M:ssä, 1 tunnin kynttilät, pitkä positio kun 12 tunnin EMA on 96 tunnin EMA:n yläpuolella, muutoin ei positiota, ei shortteja. Heinäkuusta 2022 kesäkuuhun 2026. 431 edestakaista kauppaa. Taker-palkkiot molemmilta puolilta 5.0 bps, rahoitusmaksu maksetaan tai saadaan kahdeksan tunnin välein todellisen position mukaan, slippage mallinnettu parhaan osto- ja myyntihinnan syvyyden perusteella. Signaali on tarkoituksella tylsä — valitsin sen, koska kukaan ei puolustaisi sitä, mikä tekee siitä hyvän puhtaan testialustan.
Jokaisella alla olevalla rivillä sisään- ja ulostulokynttilöiden aikaleimat ovat samat. Ainoa ero on position koon määrityksessä.
| Kokosääntö | Netto Sharpen luku | Suurin DD | Vuotuinen vaihdettu nimellisarvo (× keskimääräinen positio) | Kulut % bruttotuloksesta | Huippuvipu |
|---|---|---|---|---|---|
| Kiinteä $10k nimellisarvo | 0.41 | 18.2% | 246× | 14% | 1.0× |
| Kiinteä osuus, 100% omasta pääomasta | 0.44 | 30.8% | 251× | 15% | 1.0× |
| Käänteinen 20 päivän toteutunut volatiliteetti | 0.68 | 14.1% | 690× | 29% | 4.4× |
| 20% vuosivolatiliteettitavoite, tuntikohtainen tasapainotus, ilman vipurajaa | 0.71 | 12.9% | 1,180× | 41% | 6.3× |
| 20% volatiliteettitavoite, 20% kaupankäynnin taukoalue, 3× vipuraja | 0.66 | 15.3% | 402× | 19% | 3.0× |
| Puolikas Kelly 60 päivän liukuvalla keskiarvolla/varianssilla | 0.52 | 24.6% | 830× | 33% | 8.1× |
Katso eroa. Heikoimman ja parhaan rivin välillä Sharpen luvussa on 73%:n suhteellinen ero ja drawdownissa 2.4-kertainen ero. Etsi nyt tästä aineistosta sisääntulosignaalin parametri, joka siirtää Sharpen lukua 0.30 ilman, että samalla syntyy ilmeistä ylisovittamista. Olen etsinyt. EMA-parin pituus siirtää lukua noin 0.12 koko uskottavalla hakualueella, ja suurin osa tästä liikkeestä on kohinaa, jota ei voi säilyttää otoksen ulkopuolella.
Miksi käänteinen volatiliteettipainotus näyttää niin hyvältä, ja kuinka suuri osa siitä on todellista
Mekanismi ei ole mystinen. Kiinteällä nimellisarvolla position koko ei korreloi toteutuneen volatiliteetin kanssa, mikä tarkoittaa, että dollarimääräinen riski kauppaa kohden riippuu siitä, millainen volatiliteetti kyseisellä viikolla sattuu olemaan. ETH:n 20 päivän toteutunut volatiliteetti vaihteli tällä ajanjaksolla 31%:sta 118%:iin vuositasolle muunnettuna. Kiinteän nimellisarvon ajo otti maaliskuussa 2024 3.8× enemmän dollarimääräistä riskiä kuin heinäkuussa 2023 — ei siksi, että signaali olisi ollut luotettavampi, vaan koska markkina liikkui rajummin. Lähes koko sen drawdown keskittyy volatiliteetin ylimpään kvintiiliin. Käänteinen volatiliteettipainotus poistaa tämän kytköksen, ja sen poistaminen parantaa aidosti tuottovirran muotoa.
Osa Sharpen luvun parannuksesta on kuitenkin mittausartefakti, ja jos et erottele näitä kahta, teet myöhemmin huonoja päätöksiä. Sharpen luku jaetaan tuottojen keskihajonnalla. Volatiliteetin tavoittelu vakauttaa määritelmällisesti tuottojen keskihajontaa. Optimoit suoraan nimittäjää. Sääntö, joka skaalaa positioita vakaan ennakoidun volatiliteetin saavuttamiseksi, parantaa Sharpen lukua lähes millä tahansa tuottovirralla, jossa volatiliteetti ryvästyy, myös virroilla, joilla ei ole lainkaan etua. Olen varmistanut tämän sekoitetuilla signaaleilla: satunnaista sisääntulohetket, pidä volatiliteettitavoite päällä, niin Sharpen luku paranee silti noin 0.06 kiinteään nimellisarvoon verrattuna nollakeskiarvoisella pohjalla. Pieni mutta nollasta poikkeava parannus, ja se johtuu puhtaasti mekaniikasta.
Siksi en koskaan vertaile sisäisesti kokosääntöjä vain Sharpen luvun perusteella. Haluan Calmar-luvun, nettotuloksen suhteessa keskimääräiseen käytössä olevaan nimellisarvoon ja brutosta nettoon johtavan kuluerittelyn, koska näitä kolmea on yhdessä paljon vaikeampi kaunistella nimittäjää muuttamalla.
Volatiliteettiarvio on malli, ja se vuotaa kuten mallit
Yleisin syy siihen, että hyvä kokosääntötulos osoittautuu valheelliseksi: volatiliteettiarvio käyttää sen kynttilän tietoja, jonka position kokoa se määrittää. Jos volatiliteettisarjasi lasketaan keskitetystä ikkunasta tai pandas-kirjaston oletusarvoisella `rolling().std()`-kutsulla resamplauksen jälkeen, kun mukana on nykyinen keskeneräinen kynttilä, tai koko aineiston standardoinnista, sinulla on tietovuoto. Se on hienovaraista, koska volatiliteetti on sitkeää: vuoto on kullakin rivillä pieni ja pääomakäyrä näyttää silti uskottavalta. Se näyttää vain hieman liian tasaiselta juuri niillä viikoilla, joilla on merkitystä.
Agenttimme tarkistavat jokaisen kokosäännön kohdalla neljä asiaa, ennen kuin tulos pääsee paperikaupankäyntijonoon:
- Tietojen saatavuus päätöshetkellä. Klo 14:00 avautuvan kynttilän position koon täytyy olla laskettavissa tiedoista, joiden sulkeutumisajan aikaleima on ≤ 13:59:59.999. Varmistamme tämän laskemalla kokojonon uudelleen satunnaisesti valituissa 200 päätöspisteessä katkaistusta datakehyksestä ja vertaamalla eroja.
- Arviointi-ikkuna on oikea parametri. 20 päivän volatiliteetti-ikkuna ja 60 päivän volatiliteetti-ikkuna ovat kaksi eri strategiaa. Ikkunan pituus otetaan mukaan walk-forward-hakuun muiden parametrien kanssa. Jos tulos toimii vain yhdellä ikkunan pituudella, se kertoo strategian hauraudesta.
- Vipupolku, ei vain vivun huippuarvo. Tulosta bruttovivun koko jakauma. Yllä mainittu vipurajaton volatiliteettitavoiteajo käytti 4% tunneistaan yli 5× vivulla. Yhteenvetotaulukkoon päätymätön tieto voi ratkaista kokonaan sen, voiko strategiaa toteuttaa käytännössä.
- Koon herkkyys robustisuustestinä. Jos Sharpen luku romahtaa, kun muutat volatiliteettitavoitteen 20%:sta 25%:iin, strategiassa ei ole kyse volatiliteetin tavoittelusta vaan vipuparametrin virittämisestä. Olet löytänyt etusi valitsemalla yhden luvun.
Vipuraja ei ole riskienhallintaan lisätty koriste, vaan osa strategian määritelmää. Binancen ETHUSDT-tasot laskevat sallittua maksimivipua position nimellisarvon kasvaessa, ja ylläpitomarginaali nousee samalla. Backtest, joka antaa volatiliteettitavoitesäännön nousta 6.3×:een 400k dollarin nimellisarvolla, kuvaa positiota, jota kaupankäyntipaikka ei salli kyseisellä marginaalilla. Taulukon vipurajallinen rivi maksaa 0.05 Sharpen luvussa ja on näistä kahdesta ainoa, joka kuvaa todellisuudessa mahdollista strategiaa.
Tasapainotuksessa rahat hupenevat
Huomaa kulusarake. Tuntitasolla tehty tasapainotus volatiliteettitavoitteeseen antoi parhaan otsikkotason Sharpen luvun ja jätti samalla 41% bruttotuloksesta pörssille. Vuotuinen vaihdettu nimellisarvo on 1,180× keskimääräinen position nimellisarvo, minkä lisäksi kuluja tulee 5 bps suuntaansa sekä osto- ja myyntihinnan erosta ja markkinavaikutuksesta. Ilmeinen korjaus on tasapainottaa harvemmin aikataulun mukaan. Parempi ratkaisu on kaupankäynnin taukoalue: kokoa muutetaan vasta, kun nykyinen positio poikkeaa tavoitteesta enemmän kuin tietyn rajan verran.
20%:n taukoalue pudotti vuotuisen vaihdetun nimellisarvon 1,180×:stä 402×:ään — vähennys oli 66% — ja maksoi 0.05 Sharpen luvussa. Olen testannut tämän jo kahdeksalla signaalilla, ja sama kuvio toistuu: 15–25%:n taukoalueilla saavutetaan suurin osa riskinhallinnan hyödystä kolmasosalla kaupankäyntivolyymista, ja alle 10%:n rajalla maksetaan vain kosmeettisesta tarkkuudesta määrässä, jota joka tapauksessa arvioidaan 20 päivän ikkunalla. Kolmea desimaalia ei voi tasapainottaa lukuun, jonka keskivirhe on 15%.
Helmikuussa meillä oli ajo, jossa agentin kirjoittama raportti luki Sharpen luvun 0.22 parannuksen ”paremman sisääntulosuodattimen” ansioksi. Erotus oli yksi rivi kokosäännön moduulissa. Suodatin ei ollut muuttunut. Nyt vaadin, että raportissa tulostetaan kokosäännön asetusten tiiviste ylälaitaan, koska syiden kohdistaminen on kurinalaisuutta ja mallit kertovat mielellään siistin tarinan siinä missä muutkin.
Mitä paperikaupankäynti paljastaa kokosäännöstäsi
Backtestin ja paperikaupankäynnin välinen kuilu on tässä suurimmillaan, ja kyse on lähinnä aritmetiikasta. Volatiliteettiin mukautuva position koko vaihtelee aineiston sisällä 4–8-kertaisesti. Vaihteluvälin molemmat päät törmäävät kaupankäyntipaikan rajoitteisiin, joita backtestissä ei mallinnettu.
Pienessä päässä vastaan tulevat askelkoko ja vähimmäisnimellisarvo. ETHUSDT-perpetuaalin määrän askel on 0.001 ja vähimmäisnimellisarvo $5. Jos matalan volatiliteetin ajanjakson positiokokosi on 0.0004 ETH, backtest pitää sen, mutta paperikaupankäynnissä ei pidetä mitään. Tämä kuulostaa poikkeustapaukselta, kunnes huomaat, että volatiliteettitavoitesääntö asettaa pienimmät positiokoot rauhallisimpiin markkinoihin, joissa trendisignaalin hyvät sisääntulot ovat usein. Suuressa päässä tulevat vastaan position kokorajat, marginaalitasot ja se, että 6× positio vaatii eristetyn marginaalin hallintaa, jonka likvidaatiomallia et backtestannut.
Löysimme tapauksen, jossa paperikaupankäynnin pääomakäyrä seurasi backtestiä alle 3%:n erolla kuuden viikon ajan ja erkani sitten rajusti. Syynä oli pyöristys: `int()` typisti määrän sen sijaan, että se olisi pyöristetty askelkoon mukaan, ja tätä käytettiin positioihin, joiden keskiarvo oli 1.4 askelta. Backtest määritti koot jatkuvassa avaruudessa, ja reaaliaikainen kokolaskuri menetti 20-30% tarkoitetusta positiosta jokaisessa pienessä kaupassa. Ei mitään erikoista toteutusmallissa eikä viivettä koskevaa tarinaa. Pelkkä typistys.
Missä kriitikot ovat oikeassa
Kolme vastaväitettä osuu maaliin, enkä halua sivuuttaa niitä.
Ensimmäinen ja tärkein: position koon määritys jakaa etua, mutta ei voi luoda sitä. Jos signaalisi bruttotuotto-odotus on realististen palkkioiden ja rahoitusmaksujen jälkeen nolla tai sitä pienempi, jokainen taulukon säännöistä menettää rahaa — hienot säännöt vain tekevät sen kauniimmalla varianssiprofiililla. Valitsin signaalin, jonka nettoetu on tällä ajanjaksolla pieni mutta positiivinen. Kun käytät samoja kuutta sääntöä signaaliin, jonka nettotuotto on −1.2 bps kauppaa kohden, järjestys säilyy, mutta jokaisen lopullinen pääoma jää alkupääoman alle. Koon määritys on jonkin kertoimen soveltamista. Sen jonkin pitää silti olla olemassa.
Toiseksi volatiliteetin tavoittelulla on todellinen ja hyvin dokumentoitu heikkous: se vähentää vipua nopean romahduksen pohjalla ja lisää sitä takaisin pompun jälkeen. Jyrkässä V-liikkeessä kiinteä nimellisarvo voittaa, joskus selvästi. Maaliskuu 2020 osakemarkkinoilla ja elokuun 2024 kryptomarkkinoiden romahdus rankaisivat molemmat volatiliteettiin mukautuvaa kokoa palautumisvaiheessa. Neljän vuoden ETH-ajanjaksollani on sattumalta enemmän volatiliteetin ryvästymistä ja sahaavaa liikettä kuin V-muotoisia käänteitä, mikä suosii käänteisen volatiliteetin rivejä. Toisella ajanjaksolla osa järjestyksestä kääntyy, ja jos olisin aloittanut vuoden 2020 taulukolla, tämä väite olisi heikompi.
Kolmanneksi kokosääntöön voi ylisovittaa siinä missä kaikkeen muuhunkin. Taulukon puolikas Kelly liukuvilla estimaateilla kertoo kaiken: se näyttää hienostuneelta, sillä on teoreettinen perusta, ja silti sen drawdown oli toiseksi suurin, koska kohinaisen tuottosarjan liukuvan keskiarvon arvio on roskaa ja Kelly on sille äärimmäisen herkkä. Jokainen sääntö, joka käyttää syötteenä tuotto-odotusta, perii tuon estimaatin virheen vahvistettuna. Pelkkää varianssiarviota käyttävät säännöt käyttäytyvät paljon paremmin, sillä varianssi on ainoa momentti, jonka neljän vuoden tuntidatasta voi oikeasti arvioida.
Tästä kaikesta kannattaa muistaa tämä: kun backtestin tulos yllättää, tarkista kokosäännön moduuli ennen kuin alat etsiä signaalista nokkeluutta. Ja kun raportoit Sharpen luvun, kerro sen rinnalla vipupolku ja kuluerittely, koska näin vahvasti koon määrityspäätöksestä riippuva luku ei ole lainkaan signaalin ominaisuus.
← Kaikki kirjoitukset
