csütörtök, június 25, 2009

Alapfogalmak a stratégiákhoz

A NinjaTrader kezelő felületével nem szeretnék foglalkozni, mindenki maga megtapasztalhatja, hogyan is néz ki és hogyan is működik.
A teljesség kedvéért azért majd a fejlesztési lépésekhez szükséges menüpontokat és azok használatát tárgyaljuk természetesen.

Szeretném azonban felhívni a figyelmet egy nagyon fontos dologra, és ha úgy tetszik, akkor ezt felfoghatjuk az automatizált kereskedés pszichológiájának is!
A programjaikat tesztelni csak a múltbéli adatok alaján tudjuk, mivel kristálygömböt még nem lehet kapni. A múltbéli adatok alapján viszont csak statisztikai valószínűséggel fogjuk tudni megállapítani, hogy mennyire hatékony a programunk. A jövőre vonatkozólag "csak" azt mondja meg, hogy nagy valószínűséggel milyen nyereséget tud elérni a program elméletileg, de ez - a jövő ismeretének hiányában - nem garantálható és akár extrém veszteségeket is produkálhat a program, ha nem jól van megírva. (veszteség elleni védekezési technikákról is lesz szó természetesen). Tehát a programozott kereskedés nem a tuti lottó ötös, hanem egy meglehetősen hatékony segítség, ha úgy tetszik egy intelligens harmadik kéz, amely akkor is dolgozik, ha a saját két kezünk tele van éppen munkával.

Néhány alapfogalmat érdemes tisztázni, mielőtt neki kezdünk programot írni. Kezdjük is.

Stratégia. Ez a NinjaTrader-ben más értelemmel bír, bár ha jobban meggondoljuk, akkor mégsem. A NinjaTrader-ben a stratégia tulajdonképpen maga az a program, amely helyettünk kereskedik. Egy egyszerű programkód, amelyben leírjuk, hogyan is kell kereskedni. Vagyis leírjuk a stratégiát. Így hát mégsem biztos, hogy mást jelent, de amikor NinjaTrader stratégiáról beszélünk, akkor természetesen arról a programról lesz szó, amit írunk, fejlesztgetünk.

Indikátor
. Itt is kicsit skizoid az állapot, ugyanis a kézi kereskedésnél használatos indikátorokról van szó, de talán kicsit mégis többről. Kézi kereskedésnél az elemző programban ha odapakolunk egy indikátort a grafikonra, akkor tudjuk használni. Ezekből ugyebár kétféle van, az "overlay" és a "non-overlay". Vagyis amit a gyertyákra rajzol a program, és amit a gyertyák alá. Csak a tisztán látás kedvéért, overlay indikátor egy mozgó átlag, vagy a híres Bollinger-szalag, non-overlay pedig az RSI, MACD.
Nos, a NinjaTrader-ben az összes indikátort használhatjuk, akár egyidőben is, anélkül, hogy azt a grafikonon megjelenítenénk, ugyanis az indikátorokat külön "függvényekként" kezeli a program. (A függvényekről később még részletesen ejtünk szól, egyenlőre legyen elég annyi, hogy a programban az indikátorok értékét bármikor megkaphatjuk és felhasználhatjuk.)
Természetesen az indikátorokat ki lehet rajzolni a grafikonra, ha ezt külön leprogramozzuk, így amikor a stratégiát (azaz a kereskedő programot) elindítjuk, akkor az automatikusan felrajzolja a grafikonra. De akár kézzel is felrakhatjuk a grafikonra, ha nem akarunk a programban ezzel bíbelődni. Hozzátenném, hogy azért érdemes a stratégiában leprogramozni, hogy rajzolja az indikátorokat, mert így nem kell mind a 8 indikátort kézzel utólag felpakolászni, hanem a stratégia indításakor máris látjuk mi újság, és azonnal látjuk azt is, hogy jól működik-e a program.

Backtest
(ejtsd : bekteszt). Ez egy igen hasznos funkció a NinjaTrader felületén. Arra való, hogy az általunk elkészített stratégiát, vagy indikátort (igen, ilyet is programozhatunk, és fogunk is, mert kell), lefuttassuk a régmúlt történelmi adatokon. Vagyis ezzel azt tudhatjuk meg, hogyha 2006 január elsejétől ezt a stratégiát futtattuk volna napjainkig, akkor mennyire lett volna hatékony. Ez tehát egy igen fontos funkció lesz a későbbiekben. Fogjuk is használni nagyon sokat a következővel együtt. FIGYELEM! A backtest által szolgáltatott eredmények nem azonosak a jövőben realizálható eredményekkel, tehát ez nem egy jövendőmondó funkció! Ez egy tesztelő funkció, ami nagy valószínűséggel vetíthető a jövőre is. De kizárólag statisztikai alapokon.

Optimalizálás. Ez talán a a backtest-nél is fontosabb funkció, ugyanis elképesztően sok időt képes megtakarítani nekünk, ráadásul képes megmondani, hogy a stratégiánkban leprogramozott "elméleti" tevékenységek mennyire hatékonyak, egyáltalán jól gondolkodtunk-e és érdemes-e tovább bíbelődni a stratégiánk további fejlesztgetésével.
Ez a funkció ugyanis azt csinálja, hogy a régmúlt történelmi adatokon lefuttatja a stratégiánkat, de az általunk meghatározott paraméterek különféle szélsőértékei között próbálgatva. Röviden és egyszerűen arról van szó, hogyha például az RSI indikátor alapjain működik a stratégiánk, akkor megadhatjuk, hogyha az RSI periódus ideje milyen szélső értékek között változhatnak (például 5 és 50 között), és így melyik az a periódus idő, amivel a legnagyobb nyereséget tudjuk elérni. Aki ezt nem találja hasznos dolognak, ne is indítsa el a NinjaTrader-t!!!

Profit faktor. A profit faktor nem más, mint a stratégiánk teljesítmény mutatója. Azt mutatja meg, hogy a kereskedés során mennyivel több pénzt keres a stratégia, mint amennyit elveszít. Tehát a 10-es profit faktor azt jelenti számunkra, hogy 10-szer annyi pénzt keres, mint amennyit elveszít. Számokban : 10 dollárt nyer, de 1-et elveszít. Mivel ez egy nagyon fontos mutató, így ennek a meghatározása kulcsfontosságú! A stratégiánk értékét, teljesítményét fogja mutatni.
Amikor majd az adózásról beszélünk, akkor fogjuk látni - és megtapasztalni -, hogy melyik az a profit faktor érték, amely még éppen optimális. (mert ugye nem szabad elfelejteni, hogy adózni azt azért kell, ráadásul vannak számlavezetési és bróker díjak is!)
Nagyjából azt lehet mondani, hogy 4-5 körül már jól teljesít a stratégiánk, 8-nál már nagyon jól teljesít, efölött pedig csak a csillagos ég van, tehát egy 10-es stratégiával már bátran nekivághatunk az éles kereskedésnek.
Sajnos arról is kell beszélnünk, hogy az 1-es profit faktor a null szaldós stratégia, 1 alatt pedig veszteséges. A nulla az pedig nulla. Az nem kereskedik. Negatív profit faktor pedig nem létezik.

A profit faktorról és a backtest, optimalizálás összefüggéseiről azért még egy igen fontos dolgot kell megtanulnunk.
A profit faktor értékét a backtest, illetve az optimalizálás során kapjuk meg. A két funkció használata a meghatározásához nélkülözhetetlen. Az optimalizálás során meghatározott paraméterekkel tudjuk a backtest-et lefuttatni, ezzel igazolva a stratégiánk és persze az optimalizálás sikerességét.

Viszont nem mindegy milyen időtávon és nem mindegy milyen idő intervallumon futtajuk ezeket.
Az optimalizálás - természetéből adódóan, azaz a próbálgatások száma miatt - igen sokáig eltarthat. Ezért hajlamosak vagyunk rövid időintervallumon futtatni, mondjuk az elmúlt két hét adataira támaszkodva.
Ezzel szemben a backtest viszonylag gyorsan fut le, ezért hajlamosak vagyunk hosszabb időintervallumon futtatni, mondjuk az elmúlt egy év adatain.

Így azután nem szabad azon csodálkozni, hogy az optimalizálás során kapott és kiszámított profit faktor nem lesz azonos a backtest eredményeivel.
Például, ha az optimalizálás az elmúlt két hét adatai alapján történik, és kijön, hogy a várható profit faktor 10 lesz, ha ilyen és ilyen paraméterekkel futtatjuk, de amikor a backtest-ben megadjuk az optimalizálás által "kiköpött" paramétereket és az elmúlt egy év adataival tesztelünk, akkor csodák-csodájára csak 4-es profit faktor jön ki.

Az optimalizálással és a backtest-tel ugyanúgy kell gondolkodnunk és bánnunk, mint a mozgóátlagokkal. Rövid távon nagyobb értékeket ér el, de bizonytalanabb, hosszabb távon nem ér el olyan nagy értékeket, de azt sokkal nagyobb bizonyossággal. Minél hosszabb időtávra futtatjuk az optimalizálást, annál reálisabb értéket fogunk kapni. De mindenképpen érdemes egy hosszabb és egy rövidebb időintervallumra futtani az optimaizálást és a kettő közötti "arany közép utat" választani.
Mindenesetre érdemes csak azokat a stratégiákat optimalizálni, amelyeket jól átgondolva írtunk meg, és a lehető legkevesebb paramétert használjuk benne.
Még így is lesznek olyan esetek, amikor az optimalizálás egy egész napig, vagy esetleg napokig fog futni. De megéri majd!
A stratégiák tesztelésekor erre még úgyis részletesen kitérünk.

Nos, erről ennyit egyenlőre, a következő post-ban kicsit beszélünk a stratégiák elméleti és gyakorlati felépítéséről, ezzel el is kezdjük a programozást.

Nincsenek megjegyzések:

Megjegyzés küldése