2026 m. lapkričio 1 d. · tyrimai

Kaip sušildyti backtestą, kad lookback nesiskaičiuotų kaip rezultatai?

Kaip sušildyti backtestą, kad lookback nesiskaičiuotų kaip rezultatai?

20 dienų Donchian specifikacijoje atrodo nekenksmingas. Agentas parašo 20 barų slenkantį maksimumą, backtestas prasideda nuo pirmos parquet failo eilutės, ir pirmąsias dvi savaites „20 dienų aukštuma“ tėra einamasis maksimumas visų barų, kurie jau yra. Ketvirtą dieną tai keturių dienų aukštuma. Strategija, kurią manėte testuojantys, nėra ta, kuri pagamino pirmąjį tuziną įvykdymų.

Turiu notebooką su ETHUSDT dienos barais, kuriame visos imties Sharpe yra 1.4. Nukirpkite pirmąsias 20 sesijų ir jis krenta iki 0.6. Palikite tas 20 ir išmeskite likusią pirmųjų metų dalį, ir jis spausdina 3.1. Niekas nenutekino rytojaus. Strategija naudojo praeitį, tik nepakankamai jos, o ataskaita tuos pusiau susiformavusius sandorius traktavo kaip įrodymą.

1.4visos imties Sharpe, įskaitant nebaigtą langą
0.6tas pats kodas po 20 užbaigtų sesijų
3.1Sharpe, jei paliekate tik įšilimo sandorius

Leisti langui prekiauti, kol jis dar pildosi

Įprastos nuolaužos yra min_periods=1. Pandas apskaičiuos slenkantį vidurkį ir iš vieno baro, jei tik leisite. Agentai tai daro nuolat, nes NaN lentelės viršuje atrodo kaip bugas, o jį užpildžius unit testas pažaliuoja.

20 dienų realized-vol tikslas su dviem grąžos stebėjimais yra dydžio sprogimas. Dviejų skaičių dispersija yra monetos metimas, ją apverčiate, ir pirmoji pozicija yra kelis kartus didesnė už numatytą riziką. z-score prieš beveik nulinį standartinį nuokrypį daro tą patį triuką su ženklu: strategija tarsi turi skustuvo aštrumo įėjimą, kuris daugiau nebesirodo, kai langas sąžiningas.

Pramušimai dar blogesni, nes atrodo kaip tikroji taisyklė. 20 barų kanalas šeštame bare yra šešių barų kanalas. Pačioje pradžioje gaunate sandorių spiečių, dažnai ramioje atkarpoje, kuri nebūtų suveikusi su užbaigtu indikatoriumi. Ramios rinkos šiek tiek dreifuoja. Siauras kanalas suveikia. Kapitalo kreivė gauna pranašumą, kurio jokie vėlesni metai nepakartoja.

Zero-fill ir forward-fill išranda kitokį melą. RSI, lygus 0, skaitomas kaip perparduotas. Trūkstamas ATR, lygus 0, išsprogdina vieneto dydį, ir backtestas uoliai perka visą sandėlį. Verčiau tegul NaN nužudo pavedimą, nei 0 jį išras.

Vis dar pagaunu save braižant nuo 0 eilutės, nes tuščias mėnuo kairėje grafiko pusėje atrodo nebaigtas. Tuščias mėnuo ir yra sąžiningoji dalis.

Apkarpyti kapitalo kreivę, palikti poziciją

Šita išgyvena kodo peržiūrą. 20 dienų požymius apskaičiuojate teisingai, iš braižiamos kreivės išmetate pirmąsias 20 eilučių ir publikuojate nuo sausio 21. Pozicija sausio 21 dieną buvo atidaryta sausio 14. Trailing stop aukščiausio lygio žyma, piramidės skaičius, grynieji po tų įšilimų: visa tai įžengė į „švarią“ imtį.

Nuolaužos – popierinė strategija, kurios negalima paleisti tą dieną, kuri nurodyta aprašyme. Perkraukite iš nulinės pozicijos nuo deklaruotos pradžios ir pirmos savaitės pavedimai nesutampa. Kartais backtestas jau yra sandoryje, į kurį popierinė sistema neturi priežasties įeiti. Kartais popierinė sistema įeina, nes jos lookback šaltas, o backtestas sėdi nuošalyje, nes paslėptas mėnuo jau paėmė pramušimą. Dvi atidarymo knygos, viena publikuota pradžios data.

Walk-forward foldai tai daro tyliai. Kiekvienas testinis langas turi lookback uodegą, kurios nebraižote. Praleiskite tos uodegos simuliaciją ir pirmieji testiniai sandoriai vėl yra nebaigto lango sandoriai. Simuliuokite ją ir pateikite tik testines dienas, ir testinės dienos pozicija priklauso nuo įvykdymų, kurių nerodote. Ta antroji versija gali būti teisėtas tyrimų pasirinkimas. Pirmąjį foldo rytą vadinti šaltu startu, kai trailing stop jau gyvas nuo uodegos, yra tai, kaip du tyrėjai iš vienos konfigūracijos gauna du Sharpe.

Jei perkrovimas iš nulinės pozicijos publikuotą pradžios dieną pakeičia P&L, sušildymas yra rezultatų istorijoje. Lookback duomenys gali būti. Lookback sandorių – ne.

Sušildyti kalendorinėmis dienomis, kai požymis nėra diena

„Duokite jam 30 dienų“ palieka požymį nepakankamai apibrėžtą. Trisdešimt kalendorinių dienų 5 minučių Donchian yra tūkstančiai barų daugiau nei 20 periodų lookback. Trisdešimt dienų dienos požymiui, kuriam reikia 20 sesijų, yra arba stora, arba plona, priklausomai nuo savaitgalių ir skylių.

Finansavimo normos z-score vienoje mūsų perp biržų gavo 30 dienų sušildymą, nes specifikacija sakė 30 periodų, o kažkas periodus išvertė į kalendorines dienas. Finansavimas ten spausdinamas kas aštuonias valandas. Trisdešimt dienų yra apie 90 atsiskaitymų. Trisdešimt periodų yra dešimt dienų. Papildomi du mėnesiai įšilimo atsitiktinai apėmė depeg savaitę. Jį išmetus, gyvasis langas atrodė ramesnis nei tikroji strategijos istorija. Žmonės kaltino jautrumą pradžios datai. Sušildymas buvo suvalgęs režimą.

O kriptovaliutos palyginti su akcijomis priverčia tą patį skaičių keisti prasmę niekam neredaguojant parametro. Dvidešimt ETH „dienų“ apima šeštadienius. Dvidešimt akcijų sesijų yra beveik kalendorinis mėnuo. Nukopijuokite 20 dienų lookback iš akcijų notebooko ant valandinių perpetual žvakių ir turite 20 valandų kanalą su 20 dienų pavadinimu. Pirmasis galiojantis baras tada yra arba po 20 valandų, arba po 20 dienų, jei kokia nors vėlesnė funkcija persamplina, ir abu variantus mačiau tame pačiame agento diff.

Įtvirtinti pirmąją prekiaujamą laiko žymą

Sušildymas yra duomenų reikalavimas, o ne premijinė imtis. Kiekvienas požymis nurodo, kiek užbaigtų stebėjimų jam reikia, tais vienetais, kuriais jis skaičiuojamas. Pirmoji prekiaujama laiko žyma yra pirmasis baras, kuriame visa tai teisinga ir nulinė sąskaita būtų galėjusi siųsti pavedimą.

PožymisKą specifikacija paprastai sakoKas iš tikrųjų turi egzistuotiTylusis pakaitalas
20 dienų Donchian20 dieninių aukštumų20 užbaigtų sesijųEinamasis maksimumas su min_periods=1
30 dienų realized vol30 dienų langas30 close-to-close grąžųDviejų dienų dispersija, apversta į dydį
20 spaudinių finansavimo z-score20 dienų20 finansavimo atsiskaitymų20 kalendorinių dienų (~90 spaudinių) arba 20 barų neteisingo timeframe
14 periodų RSI 5m14 periodų14 uždarytų penkių minučių barų14 dienų arba 14 barų su tarpais, užpildytais forward-fill

P&L prieš tą laiko žymą lieka už rezultatų istorijos. Būseną prieš tą laiko žymą vis tiek gali reikėti simuliuoti, kad trailing stop ar cooldown būtų tikri, kai laikrodis pasiekia pirmąjį prekiaujamą barą, bet tie įvykdymai neina į Sharpe, sandorių skaičių ar pajėgumo skaičiavimus. Tada paleiskite bjauriąją patikrą: perkraukite iš nulinės pozicijos nuo tos laiko žymos, lookback turėdami tik kaip duomenis. Jei pavedimai pasikeičia, siuntėte paslėptus sandorius.

Popierinė prekyba prasideda pagal tą pačią sutartį. Taip pat ir kiekvienas walk-forward testinis langas. Jei grafikas atrodo tarsi trūktų mėnesio, palikite jį trūkstamą.

atgalinis testavimasduomenų inžinerijawalk-forwardAI agentaipopierinė prekyba
← Visi įrašai