kedd, április 23, 2013

Backtest - avagy a puding próbája

Egyik korábbi bejegyzésemben arról írtam, hogy a tesztelés egy igen fontos fázis, ha robotot készítünk.
A tesztelés nem túl egyszerű dolog, ugyanis ehhez teszt adatok kellenek. Korábban a NinjaTrader-rel próbálkoztam, de olyan nagyon megbízhatatlan adatokat szolgáltatott a teszteléshez, ami miatt a sokkal megbízhatóbb - és talán éppen ezért népszerűbb - MetaTrader-re nyergeltem át.

A FOREX robot tesztelésének egyik legfontosabb lépése a backtest. Nem kell megijedni ettől a szótól, csupán annyit jelent, hogy a múlt adatait alapul véve tesztelünk. A MetaTrader ebben is profibb társainál (habár biztosan lesz aki talál ettől is jobbat), ugyanis a múltbéli adatokat nem gyertyákként raktározza el, hanem tick-ekként, vagyis a múlt történései reprodukálhatók tick-ről tick-re.

Természetesen ez a rendszer sem hibátlan, de legalább korrigálhatók a hibák és egy olyan adatbázison tudunk tesztelni, ami a valósághoz a legközelebb áll.

Hozzátenném azonban, hogy a múlt béli adatokon végzett tesztek eredményei nem azt jelentik, hogy a jövőben is így fog teljesíteni a robot! Olyannyira nem, hogy előfordulhat az, hogy a backtest alkalmával fantasztikus eredményeket hoz a robot, de amikor az éles FOREX adatokon teszteljük, akkor sorra köti és zárja a vesztes pozíciókat. Természetesen a backtest statisztikailag bizonyítja FOREX robotunk működésének helyességét, de ez minden. A fontos az, hogy nem szabad nagyobb jelentőséget tulajdonítani a backtest-nek, mint ami valójában! Csak statisztikai teszt.

Viszont ez a statisztikai tesz igen sok hasznos információval szolgál arról, hogy az általunk kitalált stratégia életképes-e, egyáltalán vannak-e sikeres kötései, illetve ha veszteséges kötései vannak, akkor azok miért vannak, mennyi ilyen veszteséges kötés van egymás után, illetve milyen körülmények között történik.

Miért érdekesek ezek számunkra? Nagyon egyszerű a válasz. Azért, mert rájöhetünk a stratégiánk gyenge pontjára, amit a stratégia módosításával megszüntethetünk, de akár azt is láthatjuk belőle, hogy egy jó Money Management stratégiával hogyan lehet még több nyereségre szert tenni, esetleg a veszteséges stratégiát nyereségesbe átfordítani.

Nézzük hogyan is megy ez és mit láthatunk egy ilyen tesztből.
A tesztet a Stratégia Teszter menüpontban találjuk, a Nézet menüben (CTRL-R gyorsbillentyű). A grafikon alján meg is nyílik egy kis ablak, amiben néhány mezőt találunk.
Nézzük őket sorjában :
  • Expert Advisor - ez a mi kis programunk lesz, itt a legördülő menüből lehet kiválasztani a tesztelni kívánt robotot.
  • Szimbólum - Nos, itt pedig azt a devizapárt fogjuk tudni kiválasztani, amin a tesztet végre akarjuk hajtani.
  • Model - itt a szimuláció modelljét tudjuk kiválasztani, erről mindjárt kicsit bővebben beszélünk
  • Használat dátuma - itt mondhatjuk meg, hogy mely dátumtól mely dátumig történjen a teszt, illetve azt, hogy egyáltalán foglalkozzon-e a dátumokkal a teszter.
  • Visual mode - ha kipipáljuk, akkor látni fogjuk a szimulációt tick-ről tick-re és követhetjük mit művel a programunk. Itt van pár érdekesség, erről is beszélünk mindjárt.
  • Időszak - itt tulajdonképpen az időtávot választhatjuk meg, hogy 15 percesen, vagy 1 óráson, vagy valamelyik másik időtávon szeretnénk a tesztet végrehajtani.
  • Optimalizáció - ha optimalizálni szeretnénk, akkor ezt kell bepipálni. Ezt ne tegyük, ugyanis most backtest-telni fogunk.
  • Van egy-két nyomógomb is a jobb szélen, ezek közül a legfontosabb az Expert tulajdonságok, ahol a robotunk paramétereit adhatjuk meg úgy, mintha éppen most indítanánk éles rendszerben, de a rendelkezésre álló tőkét is beállíthatjuk, az optimalizálás paramétereit is, stb. (Az optimalizálás egy külön témakör, ezért erről most nem ejtünk szót)
  • Szimbólumok tulajdonságai - itt az adott devizapár chart-jára vonatkozó információkat láthatjuk - sajnos nem módosíthatjuk. Ez a bróker által meghatározott spread, swap, margin, stb. információk, tájékoztatásul.
  • Nyitott chart - ezzel a gombbal megnyithatjuk a chart-ot, ha nem visuális módban futattuk a tesztünket és megnézhetjük mi történt a teszt ideje alatt. 
  • Expert módosítás - egyértelmű, ez az átjáró a MetaEditor-ba.
A tesztet azután tudjuk elindítani, ha már mindent beállítottunk. Vizuális tesztelés során, látni fogjuk, hogyan mozog az árfolyam, illetve mikor milyen pozíciókat nyit az Expert-ünk. 

A tesztelés sebességét a kis csúszkával állíthatjuk, illetve dönthetünk úgy is, hogy kihagyjuk a vizuális megjelenítést, fusson végig a meghatározott időszakon a program és mutassa a tesztelés eredményeit.

A tesztelések eredménye azonban már más kérdés. 
Nyilvánvalóan érdekes látni azt, hogy az általunk fabrikált Expert követi az utasításainkat - és miért is ne tenné - tehát a pozíció nyitások akkor lép-e pozícióba, amikor a megfelelő jelet kapja, akkor zárja-e a pozíciót, amikor kell, stb.
A backtest természetesen erre is választ ad.

Feltételezzük azonban, hogy az Expert írója képes úgy megírni a programot, ahogy a robot kívánja, és a stratégia szerint nyit és zár pozíciót. Az igazi kérdés ilyenkor az, hogy maga a stratégia életképes-e!
Ez nyilván nem csak attól függ, hogy a pozícióba lépés és a pozíció zárás sikeres volt-e, de sokat nyom a latba.
Nézzük csak miről is van szó...

Robotunk stratégiáját ugye úgy találtuk ki, hogy bizonyos piaci körülményekre számítva nyitunk és zárunk pozíciót. A valódi kérdés az, hogy ezeket a piaci körülményeket sikerült-e úgy meghatározni, hogy nyertes pozíciót zárjunk a lehető legtöbb alkalommal. Mondok egy példát.

Tegyük fel, hogy olyan forex robotot készítünk, amely semmi mást nem figyel, csak azt, hogy az aktuális gyertyatrend végén (mondjuk 5 gyertyából álló lokális gyertyatrendeket figyelünk) van-e kulcsforduló gyertya. Ha van, akkor a lokális gyertyatrend megfordulására számítunk és a feltételezett fordulás irányba nyitunk pozíciót. Tehát trend irányba.
(valljuk be őszintén, hogy ez nem is egy rossz stratégia, sokan kereskednek ilyen egyszerű szabályok alapján, ráadásul minden tőzsdeiskolában tanítják ennek az egyedülálló gyertya alakzatnak az erősségét, jelentőségét)

Azt, hogy mennyire sikeres a robotunk sok tényező befolyásolja, a legbeszédesebb mérőszáma a számlaegyenleg változása. De ne csak ezt figyeljük. 
Egy forex robot esetében igen fontos információ a találati arány. Nézzük meg, mit is olvashatunk ki egy teszt eredményeiből!

Amikor a backtest lefutott, a Stratégia teszter alsó ablakában öt fület látunk.
Az első fülön a robot beállításait látjuk (Beállítások fül), a második fülön ar Eredmények-et, azaz a kötéslistát részletesen, a harmadig fül a Grafikon nevet kapta és tulajdonképpen a számla egyenlegünk változásait jeleníti meg a rendszer, negyedik fül a Jelentés-é, az ötödik pedig a Napló, ahol az Expert Advisor hibaüzeneteit találhatjuk meg.

Számunkra a Jelentés fülön található információk a lényegesek most! 
A legfontosabb információk közé tartozik a Modelling quality a jobb felső sarokban. Ez azt mondja meg, hogy a tesztelés során használt adatok milyen pontossággal felelnek meg a historikus adatoknak. Ez a mérőszám igen fontos, hiszen, ha ez nem elég magas szám, akkor a teszt komolysága kerül veszélybe. 
Alap esetben ez 25%, ami sajnos elégtelen! 50%-nál jobb értékre van szükség egy hihető teszthez, minél közelebb esik a 100%-hoz, annál megbízhatóbbak a jelentés eredményei. Azt, hogy hogyan lehet ezt a %-os arányt javítani, igen sok útmutatót találunk az interneten, erre most nem térnék ki, de meg kell említenem, hogy viszonylag egyszerű és ingyenes megoldásokkal fel lehet tornászni ezt a számot 90%-ra. 70% körüli értékkel már nyugodtan tesztelhetünk és hihetünk is a teszteknek.

A következő fontos információ a középen lévő Short pozíciók (won %) nevű adat, amely mellett rögtön ott van jobbra a Long pozíciók (won %) adat is és ne feledkezzünk meg a középső oszlopban lévő Nyereséges kereskedések (összes %-a) adatról sem! Ezek fogják megmondani, hogy valójában mennyire sikeres a stratégiánk, mekkora a találati arány! A short és long pozíciók találati arányát láthatjuk itt, illetve az összes (short és long) kötés találati arányát, ami a két előbbi átlaga. 
Ha ez az érték 50%, vagy e körüli, akkor egy átlagos stratégiát sikerült összeraknunk.
(és szeretném megjegyezni itt gyorsan, hogy például a gyárilag készített MACD Sample nevű Expert Advisor találati aránya az összes kötésre 90%!!! Érdekes, hogy maga a robot nem hoz komoly eredményeket ennek ellenére)

Ez a szám igazából azért fontos, hogy tudjuk, hogy a kitalált stratégiánk - azaz milyen jelre kötünk és zárunk pozíciót - hányszor "jön be" az aktuális piaci helyzetben. Minél magasabb ez a szám, annál inkább alkalmas a stratégia automatikus kereskedésre, forex robot készítésére. Ha ezek a számok 50%-nál alacsonyabbak, akkor inkább fél automatikus (semi-automatic) stratégiát építhetünk belőle! 
Tehát ha ez a szám alacsony, az még nem jelenti azt, hogy használhatatlan kereskedésre, csupán azt, hogy olyan feltételeket állítottunk fel, amely az esetek kevesebb, mint 50%-ban jön csak be, mint nyerő stratégia. Tehát tanuljuk meg helyén kezelni ezt az adatot.

Az előbbi információk beszédességét nagyban befolyásolja, hogy a teszt milyen időszakot ölel át. Minél nagyobbat, annál jobb. Ha tudunk egyben tesztelni mondjuk egy évet, akkor az a legjobb, hiszen egy év alatt igen sokféle gazdasági esemény fordul elő, amelyekre reagálnia kell a robotunknak! 
Fontos és meghatározó információ az is, hogy összesen hány kötés szerepelt a tesztben, hiszen nem mindegy, hogy 3 kötésből lett a robot 60%-os találati arányú, vagy 300 kötésből. Minél nagyobb az össz kötések száma, annál jobb és megbízhatóbb a teszt.
Ezt egyébként a jelentés bal oldalán az Összes kereskedés mellett látjuk majd!

Érdekes adat még az egymást követő sikeres ügyletek (a profit pénzben) és az egymást követő veszteséges ügyletek (a veszteség pénzben) adatok is. Ezek tulajdonképpen a sorozatban nyert és vesztett ügyletek számát mutatja, ahol igen fontos lehet adott stratégia esetében, hogy milyen arányban van e két szám. Természetesen minél nagyobb a sorozatban megnyert kötések száma a sorozatban elvesztett kötésekhez képest, annál jobb.

A fenti adatok sokat mondhatnak egy Expert Advisor teljesítményéről, ha nem csak a számla egyenleg értékét nézzük. Ugyanis ezek abban segítenek, hogy mit tegyünk még a robotunkhoz annak érdekében, hogy nyerhessünk vele. Esetleg mit változtassunk a stratégiánkon.

A stratégia megváltoztatásához annyit fűznék hozzá, hogy ez nem feltétlenül okos ötlet. Ugyanis, ha a legnagyobb veszteségeket kielemzi az ember a chart-on, akkor azt fogjuk a stratégiában kiküszöbölni és ezzel még több bonyodalmat okozunk robotunknak, az egyébként nyereséges szituációkra.
Tehát a stratégiához csak a legvégső esetben nyúljuk.

Sokkal okosabb ötlet a Money Management-hez nyúlni. Létezik olyan stratégia, amely 30%-os találati aránnyal rendelkezik, ennek ellenére nyereséges, nem is kicsit. Ezt természetesen a Money Management-nek köszönheti. Igen, egy alapvetően veszteséges stratégiát is nyereségessé lehet tenni egy jó Money Management-tel, a kérdés mindössze annyi, hogy érdemes-e azért a nyereségért bonyolult MM-et hozzá fejleszteni.

Fogok írni a MM különféle elgondolásairól,mert nagyon érdekes, ha az ember végig gondolja, mihez mit érdemes párosítani. Nem mindegy, hogy trend irányába kereskedünk, vagy trend ellen, és az sem mindegy, hogy mekkora a találati aránya a robotnak! Egy jó forex robot jó MM-el kell rendelkezzen!

Nincsenek megjegyzések:

Megjegyzés küldése