Backtesting Trading Bota: 5 Stvari koje Menjaju Sve
Zašto bot koji je savršen na istoriji umire uživo. Look-ahead bias, survivorship, overfit, monte carlo drawdown i out-of-sample provera, iz mog iskustva sa Hermesom.
Sadržaj članka
Jednom mi je jedan trejder poslao pitanje koje mi je ostalo u glavi: "Da li se pridržavaš svih pravila kad si u live trejdu? Jer na backtestingu nemaš emocija." Pitao je za ručno trgovanje, ali pogodio je tačno mesto gde i botovi padaju. Backtest je čist svet bez straha i bez žurbe. Uživo je prljavo. Kad ručno trguješ, backtest te laže jer u njemu nemaš emocije. Kad bot trguje, emocija nema, a backtest te i dalje laže, samo iz drugog razloga: podaci.
Ovaj tekst je pet stvari koje sam naučio dok sam gradio i testirao sopstvenog bota. Svaka od njih objašnjava zašto brojka na istoriji ume da bude lepa laž, i kako da je proveriš pre nego što na nju staviš pravi novac.
Zašto bot koji je savršen na istoriji umire uživo#
Skoro svaki bot koji vidiš u prodaji dolazi sa krivom rasta koja ide glatko naviše. To je i logično, jer niko ne prodaje bota sa ružnim grafikom. Problem je što se ta kriva crta unazad, nad podacima koji su se već desili, uz parametre koje je autor doterao baš da ti podaci lepo izgledaju. Tržište koje dolazi sutra nije videlo te parametre i ne duguje ti ništa.
Kad bot pređe iz backtesta u stvarno trgovanje, menja se sve što se u testu nije videlo: spred se širi u lošim trenucima, nalog se izvrši par pipsa dalje nego što si mislio, vest izbaci cenu preko noći, broker odbije nalog. Bot koji je na papiru radio zato što je uhvatio baš prave trenutke istorije sada trguje po pravilima koja nikad nisu bila stvarna. Tih pet zamki koje slede su najčešći razlozi zašto se to dešava.
Backtest pokazuje kako bi se bot poneo u prošlosti pod idealnim uslovima. Stvarno trgovanje ga suočava sa spredom, klizanjem naloga i vestima kojih u testu nije bilo, i tek tu vidiš da li zaista radi.
Prva stvar: look-ahead bias#
Look-ahead bias znači da bot u testu koristi podatak koji u tom trenutku stvarno ne bi imao. Najprostiji primer je da bot donese odluku na osnovu cene zatvaranja sveće, a onda tobože uđe u trejd na sredini te iste sveće. U stvarnosti u tom trenutku još ne znaš gde će se sveća zatvoriti, pa bot uživo nema tu informaciju koju je u testu koristio.
Ta greška je podmukla jer ne ruši backtest, nego ga ulepšava. Bot koji viri u budućnost izgleda skoro savršeno, sa malim padovima i visokim procentom dobitnih trejdova. Kad ga pustiš uživo, ta magija nestane, jer sada mora da odluči pre nego što zna ishod. Look-ahead se najčešće krije u sitnicama: u tome koju cenu koristiš za ulaz, kada se indikator računa, i da li se signal sa zatvorene sveće izvršava na sledećoj, a ne na toj istoj.
Da to izbegneš, drži na umu: look-ahead bias je kad bot u testu koristi podatak koji u realnom vremenu još ne postoji, najčešće cenu ili indikator sa sveće koja se još nije zatvorila. Ta greška lažno podiže rezultat i nestane uživo. Zato proveri da svaki signal ulazi tek na sledećoj sveći posle one na kojoj je nastao.
Druga stvar: survivorship bias#
Survivorship bias je kad testiraš samo na onome što je preživelo do danas. Ako bota za akcije testiraš na listi firmi koje danas postoje, ceo test je pristrasan, jer firme koje su u međuvremenu propale ili ispale sa berze nisu ni ušle u podatke. Bot izgleda pametno zato što nikad nije morao da drži nešto što je otišlo na nulu.
Isto važi i za kripto, gde je groblje tokena ogromno. Testiraš strategiju na parama koje su danas žive i zaključiš da radi, a stotine tokena koji su nestali nisu bili u uzorku. Realnost je da bi bot u tom periodu uhvatio i one koji su umrli, pa je pravi rezultat gori nego što test pokazuje. Zato je važno da testni skup sadrži i ono što je u međuvremenu ispalo, ne samo pobednike koji su ostali do danas.
Survivorship bias se, dakle, svodi na testiranje samo na instrumentima koji su preživeli do danas, dok su propali izostavljeni iz uzorka. Bot deluje bolje jer nikad nije držao nešto što je otišlo na nulu. Traži podatke koji uključuju i firme skinute sa berze i mrtve tokene, inače meriš samo pobednike.
Treća stvar: overfit i kako ga prepoznaš#
Overfit je najčešća bolest kućnih botova. Dešava se kad toliko doteruješ parametre da bot nauči baš tu istoriju napamet, umesto da uhvati pravilo koje se ponavlja. Rezultat na testu bude neverovatan, a uživo se raspadne, jer novo tržište nema iste sitne slučajnosti koje je bot naučio.
Nekoliko znakova ti kaže da si u overfitu. Kriva rasta je previše glatka, skoro bez padova, što se u stvarnom trgovanju ne dešava. Bot ima mnogo parametara, a svaki od njih je podešen na neobičnu, precizno naštelovanu vrednost. Rezultat naglo pada čim malo pomeriš bilo koji parametar, umesto da ostane stabilan. I procenat dobitnih trejdova deluje previše lepo da bi bio istinit. Zdrava strategija podnosi male promene parametara i ostaje profitabilna u širokom opsegu, dok overfit strategija živi samo na jednoj tački.
| Znak | Overfit bot | Zdrav bot |
|---|---|---|
| Kriva rasta | glatka, skoro bez padova | ima realne padove i oporavke |
| Broj parametara | mnogo, svaki fino naštelovan | malo, svaki jasan |
| Pomeriš parametar malo | rezultat se sruši | rezultat ostane sličan |
| Procenat dobitnih | sumnjivo visok | realan za tip strategije |
| Radi na novom periodu | pada | drži se |
Prepoznaješ overfit ovako: bot je naučio istoriju napamet umesto pravila koje se ponavlja, pa blista na testu i pada uživo. Oda ga previše glatka kriva, gomila fino naštelovanih parametara i rezultat koji se sruši čim pomeriš jedan parametar. Zdrava strategija podnosi male promene i ostaje u plusu na širem opsegu.
Nemaš napisan plan? Za 7 dana imaš.
Pravila, žurnal, dnevna rutina. Upiši ime i email. Besplatno.
CENA ČEKANJA
Koliko te košta svaki mesec bez sistema?
Procenjena mesečna cena improvizacije
~€328
8 od 20 trejdova bez pravila × razlika u stopi pobede (pretpostavka: 41pp)
Kalfa je €599 jednokratno. Otplati se za 2 meseca.
Procena na osnovu pretpostavke da disciplinovan ulazak pobeđuje oko 40pp češće od improvizacije. Tvoju stvarnu razliku izmeri žurnal.
Četvrta stvar: monte carlo i pravi drawdown#
Jedan backtest ti da jedan redosled trejdova, onaj koji se stvarno desio u istoriji. Problem je što je taj redosled samo jedna od mnogo mogućih putanja. Da su dobici i gubici došli drugim redom, tvoja kriva rasta i najveći pad bi izgledali sasvim drugačije, iako je skup trejdova isti.
Monte carlo je jednostavan trik koji to pokaže. Uzmeš iste trejdove koje je bot napravio i izmešaš im redosled više hiljada puta, pa gledaš raspon ishoda. Tako vidiš ne samo onaj drawdown koji se desio, nego i mnogo gori pad koji se lako mogao desiti da su gubici došli u nizu. Ta brojka je važnija od proseka, jer određuje koliko ti računa treba da izdržiš najgori niz a da bot ne obriše nalog. Ako te uplaši najgori scenario iz monte carla, strategija je prevelika za tvoj kapital, bez obzira što je prosek lep.
Monte carlo, dakle, meša redosled istih trejdova hiljadama puta da pokaže raspon mogućih putanja, a ne samo onu jednu iz istorije. Otkriva koliko gori drawdown se lako mogao desiti da su gubici došli u nizu. Ta najgora brojka određuje koliki kapital ti treba, i da li je bot prevelik za tvoj nalog.
Peta stvar: out-of-sample validacija#
Ovo je jedina prava provera da bot nije samo napamet naučio istoriju. Podeliš podatke na dva dela. Na prvom delu razvijaš i doteruješ strategiju koliko god hoćeš. Drugi deo ne diraš, ne gledaš ga dok gradiš, i njega čuvaš za kraj. Kad si gotov, pustiš bota na taj netaknuti deo koji nikad nije video, i tek taj rezultat ti nešto znači.
Logika je prosta. Na podacima koje si koristio za doterivanje svaki bot izgleda dobro, jer si ga baš tu i štelovao. Pitanje je da li radi na periodu koji nije učestvovao u štelovanju. Ako rezultat na netaknutom delu ostane blizu onog na delu za razvoj, bot je verovatno uhvatio pravo pravilo. Ako se na netaknutom delu raspadne, uhvatio si šum, i to je znak da staneš. Isto pravilo važi i za doterivanje: čim počneš da menjaš parametre da bi popravio rezultat na drugom delu, taj deo prestaje da bude nezavisan i moraš novi.
Out-of-sample znači da podatke deliš na deo za razvoj i deo koji ne diraš dok gradiš. Bota testiraš na netaknutom delu tek na kraju, i samo taj rezultat je pošten. Ako drži blizu razvoja, verovatno je uhvatio pravo pravilo, a ako se raspadne, uhvatio je šum i vreme je da staneš.
Kako ja to radim sa Hermesom: 90 dana pre pravog novca#
Sve gore je teorija dok je ne staviš u pravilo koje te obavezuje. Kod mene je to pravilo jednostavno: nijedan bot ne dobija pravi novac dok ne odradi period trgovanja na demo i paper nalogu koji traje mesecima, a ne svega nekoliko dana. Hermes, bot na kome radim, prolazi kroz produženo testiranje na živom tržištu bez rizika, gde gleda iste sveće u isto vreme kao i pravi nalog, samo bez pravog kapitala iza sebe.
Taj period radi ono što nijedan backtest ne može. Suočava bota sa uslovima koji se ne vide u istoriji: sa spredom koji se širi, sa nalozima koji se izvrše par pipsa dalje, sa vikendom i vestima. Ravnam sve pozicije u 21 sat po beogradskom vremenu i ne držim preko noći, baš zato da izbegnem rizik koji se u backtestu ne oseti. Ako bot na tom živom demo periodu radi u skladu sa onim što je test obećao, tek onda ima smisla razgovor o pravom novcu. Ako se razlikuje, znam da me je neka od pet zamki iznad prevarila, i vraćam se na sto.
Ovo nije brzo i nije uzbudljivo. Ali jedini način da veruješ botu je da ga pustiš da ti pokaže istinu na živom tržištu, bez tvog novca u igri. Ako te zanima kako je Hermes napravljen i po kojim pravilima trguje, sve stoji na stranici o Hermesu. A pre nego što bilo kom botu daš kapital, prođi kroz veličinu pozicije, jer i najbolji bot te obriše ako mu daš preveliki deo naloga.
Ako želiš dublje da uđeš u samu logiku testiranja strategije, a ne samo bota, napisao sam poseban vodič o backtestingu strategije koji ide korak po korak kroz ceo proces.
Često Postavljana Pitanja#
Koliko istorije treba za pošten backtest bota?#
Dovoljno da uhvati različite uslove tržišta, ne samo jedan. Ako testiraš na periodu u kome je sve raslo, dobiješ bota koji zna samo taj uslov. Traži da uzorak sadrži i rast i pad i bočno tržište, jer bot mora da preživi sva tri. Kraći period sa svim uslovima vredi više od dužeg u kome se dešavala samo jedna stvar.
Da li dobar backtest garantuje profit uživo?#
Ne. Dobar backtest je samo početni uslov. On ti kaže da strategija nije očigledno loša i tu se priča završava. Pravi test je period trgovanja na živom tržištu bez rizika, gde bot vidi spred, klizanje naloga i vesti kojih u istoriji nije bilo. Bez tog koraka svaka backtest brojka je samo obećanje.
Šta je najbrži znak da je bot overfit?#
Pomeriš jedan parametar za malo i rezultat se sruši. Zdrava strategija podnosi male promene i ostaje u plusu u širokom opsegu, dok overfit strategija živi samo na jednoj tački. Ako bot radi samo sa tačno tim vrednostima i nijednim drugim, naučio je istoriju napamet.
Mogu li da verujem backtestu koji prodavac bota pokaže?#
Prema takvom rezultatu budi oprezan. Kriva rasta u prodaji je skoro uvek doterana da lepo izgleda i skoro nikad ne prikazuje najgori drawdown iz monte carla ni test na netaknutom periodu. Traži da vidiš rezultat na podacima koje autor nije koristio za štelovanje, i pitaj za period trgovanja na živom tržištu. Ako toga nema, brojka ništa ne dokazuje.
Da li je paper trading isto što i backtest?#
Nije. Backtest se odvija nad prošlim podacima i traje sekunde. Paper trading se odvija na živom tržištu u realnom vremenu, samo bez pravog novca, i traje onoliko koliko treba da bot vidi razne uslove. Paper trading hvata spred, klizanje naloga i vesti koje backtest ne oseti, i zato je bliži istini o tome kako će se bot poneti.
Koliko dugo da testiram bota pre pravog novca?#
Meseci, ne dani. Botu treba dovoljno vremena na živom tržištu da naiđe na različite uslove, na miran period i na onaj kad tržište divlja, na vesti i na vikend. Kod mene je granica period trgovanja bez rizika koji traje mesecima, i tek kad bot na njemu radi u skladu sa testom, razgovaramo o pravom kapitalu. Sve kraće od toga je nagađanje.
Upozorenje o riziku: Trgovanje na finansijskim tržištima nosi visok rizik. Ovaj sadržaj je edukativan, nije investicioni savet. Pun disclaimer.
Iskustva pojedinaca, ne garancija budućih rezultata. Trejding nosi rizik gubitka kapitala.
Znaš pravila. Ali ih nećeš poštovati pod pritiskom. Zašto?
Probaj Posejdon indikator 14 dana, besplatno. Nivoi institucija na tvom chartu, NJ Limit Entry rubrika u glavi.
