kedd, június 30, 2009

Alapvető gyertyák, és alakzatok felismerése

A múlt héten azt ígértem, hogy néhány alapvető gyertya felismerését fogom leírni, illetve megismerjük a NinjaTrader-t a legalapvetőbb szinten.

Ne is vesztegessük az időt, csapjunk a lovak közé.

Kezdjük a NinjaTrader-rel, úgyis ebben fogunk fejleszteni. Legelső lépésként, aki még nem töltötte le, annak javaslom, töltse le a Free licences változatot, ami ingyenes, korlátlanul tesztelgethetünk benne, fejleszhetünk, az egyetlen, amit nem tehetünk, az az, hogy élesben kereskedjünk vele, még akkor sem, ha van érvényes számlánk hozzá.
Tehát irány a www.ninjatrader.com oldal, ahol legelőször be kell vallanunk, hogy mi már használtuk korábban, avagy újak vagyunk. Válasszuk azt, hogy újak vagyunk (> New Users — Register here:) és válaszoljunk a három kérdésre. Az egyetlen igazán fontos adat, az az email címünk, javaslom, hogy akinek még nincs, az készítsen egy Gmail-es fiókot, ugyanis ez igen gyors, 7GB tárolási lehetőség és számtalan hasznos funkciója van, amelyet egyébként is érdemes használnunk.
A többi adat teljesen érdektelen, bármit beírhatunk, a többit a lapon hagyjuk érintetlenül, kivéve az alsó három jelölő négyzetet, ahol mindent be kell jelölnünk. (I trade the following asset classes: ; Futures, Forex, Equities). Ezután a lap alján a Submit gomb megnyomásával a letöltő oldalra jutunk, ahol a legfelső Download linkre kattintva letölthető a program.

Ha jól adtuk meg az email címünket, akkor meg is kaptuk email-ben regisztrációs kódot, ami nélkül nem tudjuk telepíteni a programot.
Szóval akkor jöhet a telepítés, itt majd kéri a kulcsot, amit kimásolunk a kapott levélből és bemásoljuk az ablakba, ahol kéri.

Ha elindítjuk a programot, akkor a Control Center-ben találjuk magunkat, ez lesz a "főhadiszállásunk", minden fontos dolgot innen lehet elérni.

Egy tisztességes fejlesztői környezetben, kell hogy legyen egy programkód szerkesztő eszköz, egy fordító, amely az általunk szerkesztett kódot értelmezi, majd lefordítja a számítógép számára érthető nyelvre, szükség lesz egy hibakereső rendszerre, amellyel a futás közbeni hibákra deríthetünk fényt, illetve egy teszt környezetre, ahol kipróbálhatjuk a fejlesztett programunkat.

A program fejlesztés menete többnyire a következő lépésekből áll :
  1. A programkód megszerkesztése. A programkódot "szaknyelven" forráskódnak hívják, ezentúl mi is ezt a terminológiát használjuk. Azért hívják forráskódnak, mert ez a forrása annak a programnak, amit futtatunk. Nyilvánvaló, hogy az ember számára leírt szavak, kódok, csak az ember számára olvashatóak, értermezhetőek. A számítógép számára csak betűk és számok sorozata, amit nem ért. A forráskód szerkesztését szokták "program írásnak" nevezni.
  2. Fordítás. A forráskódot lefordítjuk a számítógép számára is érthető nyelvre, azaz gépi kódra. Ez a kód nekünk embereknek érthetetlen, ezért van szükség a "hídra" ember és gép között, ez a fordítóprogram. (csak halkan jegyzem meg a hardcore programozók kedvéért, hogy itt természetesen nem valódi gépi kódról van szó, hanem egy .NET kódról, ami a Windows .NET-et emuláló környezet számára értelmezhető, de a mi szempontunkból ez teljesen lényegtelen.)
  3. Tesztelés. A megírt és lefordított programot lefuttatjuk a teszt környezetben és megnézzük, hogy a kívánt eredményt hozza-e, avagy sem.
Nem említettem a hibajavítást, mert ezt folyamatosan kell végeznünk a fejlesztés során. Többféle hibával fogunk találkozni, melyek fajtái elég jól körülhatárolhatók :
  • Szintaktikai hiba. Ezek a hibák - mint a neve is mutatja - egyszerű "nyelvtani" hibák az adott programnyelvben. Például a zárójelek hiánya, a kapcsos zárójelek hiánya, a sor végi pontos vesszők hiánya, esetleg hiányzó paraméterek, stb. Minden programnyelvnek adott a "nyelvtana", azaz a szintatktikája. Ezt nagy vonalakban meg kell tanulni, de nem a végletekig, hiszen ott a Súgó, a kézikönyv, amit bármikor megnézhetünk.
  • Fordítási hibák. No, ezek már keményebb problémák. Ezek a hibák összefüggésben lehetnek az adott programnyelv "nyelvtanával", de többnyire olyan hibákról van szó, ami elméletileg a szintaxisnak megfelel, de fordítás közben mégsem lehet értelmezni. Ilyen hibák lehetnek például azok, amikor egy egész típusú paraméter helyett mondjuk egy szöveges paramétert adunk meg. A szintaxis előírja, hogy kell az a paraméter, de az már csak fordítás közben derül ki, hogy nem jót adtunk meg.
  • Futási hibák. Ezek azok a hibák, amelyek a legtöbb bosszúságot okozzák. Ezeket igen nehéz felderíteni, aki használt már Windows-t, az már találkozott is ilyennel (Application error, vagy Vista-soknál Critical error feliratú ablak). A futási hibák általában a számítógép operációs rendszere és a lefordított program közötti "nézet eltérésekből" adódnak. Nem is mindig a programozó hibája, és legtöbbször javítani sem lehet, csak elkerülni. Legtöbbször a hibaüzenet még csak nem is utal a hiba valódi okára, ezért nehéz dió. Szerencsére viszonylag ritkán fordul elő, NinjaTrader-ben még eddig nem is találkoztam ilyesmivel, talán nálam tapasztaltabb programozók már igen.
  • Logikai hibák. Na, ezek a hibák valójában nem hibák. Kakukktojások. A program lefordul, működik jól, de mégsem azt csinálja, amit kellene, pedig elvileg jól megírtuk a forráskódot. Hát igen. Ez igazából a programozó észjárásának a hibája, ami leginkább az adott programozási nyelv megismerésével küszöbölhető ki. Ha valaki nem ismeri elég jól az adott nyelvet, akkor ilyen logikai hibákat igen szépen el lehet követni, aztán meg a programozó csak csodálkozik, hogy nem úgy működik a program, ahogy kellene. Ilyenkor szoktak születni az olyan kijelentések, hogy ez a programnyelv nem jó, nem jól működik, használhatatlan, stb. Megoldás : programnyelv ismeret, próbálgatás, tesztelés.
Bármilyen hihetetlen, a NinjaTrader-ben minden megtalálható, ami a sikeres fejlesztéshez szükséges. Mindjárt el is kezdjük a fejlesztést. De leges legelőször beállítjuk magunknak a környezetet, amiben dolgozni fogunk.

Mivel szinte minden a rendelkezésünkre áll, ezért csak a teszteléshez szükséges környezetet kell beállítanunk, amely a mi esetünkben azt jelenti, hogy kellenek hisztórikus adatok, amelyekkel tesztelhetjük a programjainkat.
Ehhez szükséges adatforrásra van szükségünk, amely az adatokat szolgáltatja, ezt fogjuk beállítani.

Válasszuk ki a Tools menüben az Account Connections... menüpontot.
Ekkor valami ilyesmit kapunk :

Itt az Add... gombra kattintva adhatunk újabb adatforrást a fejlesztői környezetünkhöz. A megjelenő tájékoztató ablak közli, hogy most egy varázsló végig vezet bennünket a szükséges lépéseken, itt nincs is már dolgunk, mint a Next > gombra kattintani.

Ebben az ablakban a Connection name mezőba olyan nevet adunk, amilyet csak szeretnénk, célszerű a kapcsolatunk nevéhez kapcsolódót adni. Legyen mondjuk Gain Capital . A középső legördülő sávban a Gain-t válasszuk ki, és legvégül a Historical Data részben a középsőt, azaz a Use NinjaTrader servers opciót válasszuk ki.

A Next > gombbal tudunk tovább menni, ahol egyetlen teendőnk maradt, a Mode legördülő mezőben a Demo lehetőséget válasszuk ki, így nincs szükségünk jelszóra és azonosítóra.
Ismét a Next > gombbal mehetünk tovább, ahol a beállításaink összegzését olvashatjuk, majd a Finish gombra kattintva készen is vagyunk.

Ezzel készen is állunk a fejlesztési munkánk kezdésére.
Csatlakozzunk is az adatforráshoz a File menüben a Connect almenüben a korábban elkészített adatforrás nevét kell kiválasztani. (a mi példánkban Gain Capital)
Kis dallamocska jelzi, hogy sikerült...

A NinjaTrader-ben - ahogyan már említettem is - lehet indikátort és stratégiát is fejleszteni. Aki tőzsdézik, annak nem kell ezt elmagyarázni. Az indikátorok a mi jó barátaink, a stratégiánk pedig keresi a pénzt (jó esetben).

A NinjaTrader-ben ráadásul kétféle módon lehet ezek fejlesztését elkezdeni. Az egyik, hogy egy varázsló segítségével egyszerűen "behuzalozzuk" a logikát és már készen is vagyunk, nem kell a forráskód szerkesztésével, fordítással, meg egyéb pepecs munkával töltenünk az időt. Sok időt és bosszúságot takarítunk meg így.

Ennek azonban az az ára, hogy nem minden funkcionalitást tudunk megvalósítani.

Kezdjük.
A NinjaTrader-ben a Tools menüben válasszuk ki a New NinjaScript ... azon belül pedig a Strategy... menüpontot.
Rögtön megnyílik a varázsló.
Alul a szokásos gombok mellett van még két másik is, amelyeket bármikor megnyomhatjuk a varázsló futtatásakor. Az egyik a View Code... a másik pedig az Unlock Code. Az előbbi megmutatja azt a forráskódot, amelyet a varázsló generál a háttérben, miközben mi a logikát "huzalozzuk" éppen. A másik nemcsak megmutatja a kódot, de szerkeszthetővé is teszi, de ekkor már nem térhetünk vissza a varázslóhoz többé, ezért is "unlock", tehát a lezárt kódot nyitja fel.

Egyenlőre ne nyomogassuk ezeket a gombokat!
Később el sem tudjuk majd képzelni a programírást az Unlock Code gomb nélkül, nem is kell majd a varázsló.

Az első Next > gomb után a bemenő adatokat meghatározó képernyőre kerülünk, itt a MyInput0-t rögtön töröljük is ki, mert nincs rá szükség. Itt adhatjuk meg azokat a bemenő paramétereket, melyeket a stratégia futtatásakor kezdő adatként megadunk. Erre majd még később kitérünk.
Tehát itt is Next > gomb és máris a varázsló leglényegesebb képernyőjére jutottunk. Az ablak felső részében a feltételeket kell meghatároznunk, az alsó részében pedig azt a tevékenységet, amit a feltétel teljesülésekor végre akarunk hajtatni a stratégiánkkal.

A felső ablak melletti Add... gomb segítségével meg is fogalmazhatjuk az első feltételünket.
Jelen esetben ez az lesz, ha a gyertya záróára magasabb, mint a nyitóára, akkor a gyertya zöld.
Válasszuk ki a jobb oldali ablakban Price data könyvtárat, abból pedig a Close tételt. Ekkor az ablak alatt mindenféle beállítási lehetőség jelenik meg. Ezekkel most nem foglalkozunk, később esetleg. Itt nem fontos.

A bal oldali ablakban hasonlóképpen kell eljárnunk, de ott az Open tételt kell választanunk.
A két ablak között pedig keressük meg a megfelelő relációs jelet, ami itt ugyebár a ">" jel lesz.
Ezzel a feltételünket meg is fogalmaztuk.

Következhet a tevékenység, melyet a feltétel teljesülése esetén kell végrehajtanunk.
A lenti ablak melletti Add... gomb megnyomása után nyissuk ki a Drawing könyvtárat, melyben a Diamond tételt kell kiválasztanunk. Itt két dolgot kell még tennünk.
Az egyik a rombusz színe, amit vagy átírunk Green-re kézzel, vagy kiválasztjuk a listából a nekünk tetsző zöldet.
A másik pedig az Y mező lesz. Itt ugyanis a rombusz helyzetét fogjuk meghatározni a grafikonon a gyertyához képest. Ha hagyjuk a 0 értéket, akkor sajnos nem fog látszani. Tehát 0-tól eltérő értéket érdemes választani. Ha a mező végén található apró gombocskát megnyomjuk amin "..." szerepel, akkor egy újabb ablakot kapunk, ahol az Y értékét meghatározhatjuk. Válasszuk a Price Data könyvtárból a Close értéket, majd az alul megjelenő Parameters részben az Offset részbe írjunk 2-t. (mindjárt rátérünk mit is jelent ez)
Az OK megnyomása után egy másik OK a tevékenységre és készen is vagyunk.
Ahhoz az ablakhoz érkezünk vissza, ahol a feltételeket és a tevékenységeket határoztuk meg.
Ezt kell, hogy kapjuk. A Next > hatására a következő ablakban a Stop-loss értékeket határozhatnánk meg, de most erre nincs szükségünk, így ismét Next > majd az utolsó összegző ablakon egy Finish.

Ezzel el is készült a stratégiánk, ezt egy apró üzenet ablak közli is velünk.

A tesztelésére egy nagyon egyszerű módszer fogunk választani.

Válasszuk a File menü New..., majd a Chart... menüpontját. Állítsuk be a következőképpen :
Tehát EURUSD 1 percesen 15 napnyi hisztórikus adattal.
A megjelenő grafikonon a felső ikonsorból az utolsó előttit, egy sárga kerek gombra hasonlító $ jelű gombot nyomjunk meg.


Ezzel fogjuk a stratégiánkat hozzárendelni a grafikonhoz. FIGYELEM! Ha nem kapcsolódtunk adatforráshoz, akkor ez a gomb szürke lesz, nem tudunk majd stratégiát kiválasztani! Tehát csatlakozni kell előtte!

A megjelenő ablak bal felső részében keressük meg a stratégiánkat, azon a néven, amilyen néven a varázsló futtatásakor elneveztük. Duplán kattintsunk rá, majd OK gomb.


A grafikonon valami hasonlót kell látnunk :

Látható, hogy csak a zöld gyertyák fölé rajzolt zöld rombuszt a stratégiánk, tehát működik, méghozzá jól.

A következő post-ban a piros gyertyákat fogjuk megjelölni hasonló módon, de már nem a varázslóval készítjük el a stratégiát, hanem a forráskódot mi magunk írjuk meg, a varázslóra csak a macerásabb részeket bízzuk rá.

Aki esetleg kedvet érez hozzá, az elkészítheti magának a varázslóval a piros gyertyákat megjelölő stratégiát.

Aki pedig az egésznek az értelmét keresi, annak elmondom - a teljesség igénye nélkül -, hogy ezeknek komoly hasznát fogjuk venni, amikor majd a gyertyatrendeket fogjuk vizsgálgatni.
Hamarosan a doji és a marobozu gyertyák felismerésével folytatjuk, majd ezen alapkövekből felépítjük az első gyertyaalakzat felismerést.

Ezután pedig már automatikusan pozíciót is nyitunk.
Jó olvasást, gyakorlást addig is!

péntek, június 26, 2009

A stratégiákról

Ahogyan az alapfogalmak megbeszélésekor is szó volt róla, stratégiának nevezzük azt a logikát, amellyel magát a kereskedést lebonyolítjuk, tehát magát a NinjaTrader-ben megírt programot.

Ahhoz, hogy jó stratégiát tudjunk írni, ahhoz tisztában kell lennünk a technikai elemzés fortélyaival, illetve a kézi kötésekben kell, hogy legyen gyakorlatunk, különben sosem fogjuk tudni leellenőrizni, hogy a programunk jól működik-e, de még azzal is problémánk lesz, hogy egyáltalán a stratégiát kitaláljuk.

Ezen az oldalon néhány olyan stratégiát fogunk megtárgyalni és leprogramozni, amelyek profit faktora még nem a legjobb, de azért nem veszteséges, és akár éles kereskedelemre is alkalmas.
Aki megfelelően kreatív, jó tőzsdéző, esetleg még programozni is tud, az biztosan össze tud majd rakni egy saját fejlesztésű stratégiát az itt leírt és fejlesztett építő kockákból.

Ahhoz azonban, hogy tényleg munkához tudjunk látni, a stratégiákról a legalapvetőbb dolgokat kell tisztáznunk, elsősorban "tőzsdeszakmai" szempontból.

Aki tanult tőzsdézni, az tudja, hogy a pozíciókat JEL-ekre kell nyitni és bezárni. Természetesen a veszteségekre is fel kell készülnünk, stop-loss használatával, vagy money management-tel.
A jeleket az árfolyamok, ezen belül a gyertyák, ezek ár alakzatai, valamint a hozzájuk kapcsolódó trendkövető és momentum indikátorok adják együttesen.
Tehát elsősorban az árak változásaira figyelünk, majd pedig az indikátorok jelzéseire. Az indikátorokból többet is használnunk kell (akár 8-10-et is), és ezek 80%-a kell, hogy adja a kötési jelet, az áralakzatok mellett.

Kulcsfontosságú természetesen a trendek felismerése is, ez ugyanis a fő csapásirányt fogja adni. Nyilván senki sem fog long-ot kötni egy csökkenő trendben, kivéve természetesen a trendellenes stratégiák esetén, de az már a legprofibbak kiváltsága. Tehát a trendkövető stratégiákkal foglalkozunk egyenlőre, talán később (ha majd lesz pénzem a haladó tanfolyamra), belekóstolunk a trendellenes stratégiákba is, de egyenlőre maradjunk a trendkövetőknél.

Mit jelent ez programozás szempontjából?
Nos, igen sokmindent.
Először is, meg kell tanítanunk a programunkat felismerni a trendeket, ezek változásait, még mélyebre hatolva pedig a gyertyatrendek felismerését kell leprogramoznunk. Ha a gyertyatrendeket jól és elég nagy megbízhatósággal felismeri a programunk, akkor már a teljes trendekkel is elboldogulhatunk, majd ezek törését is fel tudjuk ismertetni a programmal.

Mivel a NinjaTrader kezünkbe adja az indikátorokat, így az indikátorok által szolgáltatott jelek felismerése a gyertyatrendek alapján már gyerekjáték lesz.

A kettő együtt pedig a nyerő stratégia kidolgozása lesz!
Röviden tehát a kidolgozás menetrendje a következő sémát kell, hogy kövesse :

Árfolyam trendek felismerése
  • Gyertyaalakzatok felismerése (doji, marobozu, kulcsforduló, előrefele terhes, visszafelé terhes, stb.)
  • Gyertyatrendek felismerése
  • Völgyek, csúcsok felismerése
  • Trendek felismerése
Indikátorok
  • Indikátorok jelzéseinek felismerése
  • Indikátorok összevetése
  • Megfelelő indikátorok kiválasztása
Veszteségek kivédése, csökkentése
  • Stop-loss használata (első húzás és utána folyamatos után húzás)
  • Money management használata
  • Tőke kezelése, nyereségek visszaforgatása
  • Veszteségkeretek használata
A legkomolyabb feladat természetesen a gyertya alakzatok felismerése, bár mivel megszámlálható gyertyákról van szó, így ez nem olyan kihívás, mint mondjuk egy fülescsésze felismerése, ami kialakulhat 50, de akár 200 gyertyából is.

Sajnos programozás szempontjából nehezen fogható meg - de azért persze megfogható, csak nehezen - a nagyobb áralakzatok kialakulása, mint például a kettős csúcsok, kettős völgyek, fej és vállak, fülescsésze, árbóc, zászló, stb.
Később elképzelhető, hogy ezekre is fordítunk figyelmet, de mivel a stratégia logikája nem egy folyamatosan futó program, hanem minden egyes tick-re, vagy gyertyára fut le, így nekünk első körben - és utána még jó sokáig - elégséges lesz a rövidtávú gyertyatrendek, valamint az árfolyamtrendek felismerésére.

Az áralakzatok felismeréséből fakadó hiányokat pedig majd az indikátorok "előrejelzései", pótolják.
Egyenlőre tehát elég a gyertyákkal kapcsolatos trendek, alakzatok leprogramozása, mely mindössze néhány (de legalábbis megszámlálható számú) gyertyákból állnak.

Egy kicsit előre szaladva nézzünk bele a gyertyaalakzatokba.
Miből is állnak a gyertyaalakzatok javarészt.
Háromféle építőköve van a gyertya alakzatoknak, ezek a következők :
  1. Fehér és fekete közönséges gyertyák
  2. Doji gyertyák
  3. Marobozu gyertyák
A fentiek kombinációjából állnak össze (maximum 5-8 gyertyából) a trenderősítő, trendváltó gyertyaalakzatok.
Tehát a legelső feladat ezen gyertyák pontos felismertetése a programmal.

A következő post-ban már ezek leprogramozásával fogunk foglalkozni, így megismerkedünk a NinjaTrader ehhez kapcsolódó funckióival is, a teljesség igénye nélkül.
Leprogramozzuk a doji, marobozu, valamint a fekete és fehér gyertyák felismerését, először az elmélet, majd pedig a gyakorlat oldaláról szemügyre véve.

Ezekből később indikátorokat faragunk, hogy majd a későbbiekben ezekre építkezve könnyedén írhassuk meg a stratégiánkat.

Addig is érdemes kicsit elmélkedni ezen gyertyák felismeréséről, hogy miféle matematikai szabályokkal lehetséges.

Mindenkinek jó elmélkedést! Jövő héten folytatjuk!

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.