csütörtök, május 20, 2010

Money Management általában

Beszéljünk kicsit a Money Management-ről (mostantól MM)!

Nem véletlenül írok erről a témáról, ugyanis fájó tapasztalataim vannak. Nem viccelek!
Hogyha egy kicsit alaposabban végig gondoljuk azt, hogy miből is áll egy tőzsdéző (FOREX-ező, de ez most szinte mindegy) kereskedési gyakorlata, akkor azt fogjuk tapasztalni, hogy hűen igazodik az öt legfontosabb szabályhoz :
  1. Keress több pénzt
  2. Védd meg a pénzedet
  3. Tervezd meg pénzügyeidet
  4. Érj el hatástöbbszörözést
  5. Javítsd pénzügyi tájékozottságodat
Nem egyedül találtam ki ezeket a szabályokat, sőt mi több, semmi közöm hozzá. Robert T. Kiyosaki "Fejleszd pénzügyi IQ-dat" c. könyve taglalja eme szabályokat.

(Aki esetleg nem tudná ki is ő, azoknak nagyon ajánlom, hogy nézzen utána. Kötelező olvasmány a "Gazdag papa, szegény papa", a "Cashflow négyszög" c. könyvei, az összes többi pedig ajánlott olvasmány!!! Komolyan mondom, hogy ezen könyvek nélkül SENKI ne nyisson éles számlát, különben el fog vérezni!!!)

Nézzük csak FOREX-re fordítva a dolgokat :
  1. Keress több pénzt = legyen egy remek stratégiád, ami nyereséges, kicsi a drawdown (a veszteséges pozíció zárásokból adódó "visszaesések")
  2. Védd meg a pénzedet = használj stop-loss-t (ez ugye mindenkinek a könyökén jön ki, mert minden oktató, könyv, szakember ezt szajkózza folyton), de ide tartozik az is, hogy válassz jó brókert, ahol nincs kötési jutalék, alacsonyak a kamatok, megfelelően jó méretű pozíciókat lehet felvenni és persze kevés pénzzel lehet indulni, ez volt az egyik alapkövetelmény, amiért elindult ez a blog...
  3. Tervezd meg a pénzügyeidet = ha fogalmad sincs, hogy a stratégiáddal mennyi pénzt tudsz keresni, akkor ehhez a ponthoz hozzá sem tudsz szólni. Pedig fontos! Igaz, hogy a tőzsdén bármi megtörténhet, de akkor is kell, hogy legyen egy terved! Meg kell fogalmaznod, le kell írnod és szem előtt kell tartanod! Milyen egy terv nekünk FOREX-ezőknek? Hát mondjuk olyan, hogy "havi 5% nyereség elérése, maximum 10 PIP drawdown-nal". Merészebbeknek : "napi 1,5% nyereség elérése, havi szinten maximum 1% veszteséggel". Még merészebbeknek : "Egy év alatt megduplázom a befektetett tőkémet"
  4. Érj el hatás többszörözést = akár a stratégiáddal, akár a pénzügyi tervezéseddel azt kell elérned, hogy a befektetett tőkéd egyre nagyobb és nagyobb legyen! Ezt a stratégiáddal úgy tudod elérni, hogyha a kötéseid ún. piramidális kötések. Utálom ezt a szót, de nincs jobb. Ez nagyjából annyit jelent, hogy a stratégiád nyit egy pozíciót, amelyet természetesen valamilyen jelre teszi, majd a már nyitott pozíció mellé egy ugyanolyan irányú újabb pozíciót nyit a következő jelre, és ezt egészen addig teszi, amíg mondjuk a trend egy irányba mozog. Amikor ki kell szállni, mert megfordul a trend, vagy oldalazik, akkor lesz tizenöt nyitott pozíciód, amelyek vagy mind nyereségesek, vagy legfeljebb kettő veszteséges, de a többi nyeresége bőségesen fedezi a veszteségeket. A pénzügyi tervezés maximum annyi lehet, hogy nem veszed ki havonta, vagy hetente a nyereségedet, így a stratégiád egyre többet és egyre nagyobb pozíciókat tud nyitni.
  5. Javítsd pénzügyi tájékozottságodat = ezt gondolom felesleges taglalni, fontos, hogy más "rokon" devizapárokat is figyelj (mondjuk EURJPY esetén a többi EURXXX és más XXXJPY devizapárokat), de az is lényeges lehet, hogy figyeled a híreket. Ami még ennél is fontosabb, folyamatosan tapasztalatokat gyűjtesz és képzed magad a FOREX-en történő kereskedéssel kapcsolatban!
Most ugye a 2. pontról beszélgetnénk, az 1. pontot szándékosan nem tárgyaltam eddig. Azt fogom legutoljára.
De mind fontos és mind része a jó FOREX robotnak.

Az MT4-ben (vagy nem sokára za MT5-ben) az MM nagyon jól leprogramozható. A számlád információit csodás függvényekkel lehet lekérdezni, a korábban már említett paraméterekkel együtt.
Nézzük csak!
AccountBalance() --> Ez a függvény az éppen aktuális egyenlegről tájékoztat. Arról a pénzről, ami már a Tiéd, amit befektethetsz, vagy visszautalhatsz magadnak, vagyis a számládon lévő tényleges pénz.
AccountEquity() --> a számlán lévő pénz, + a nyitott pozíciók értéke. Mindenképpen pozitív érték kell legyen a kettő együtt. Ha a nyitott pozíciók értéke negatív, akkor a balance-nál mindenképpen kevesebb lesz, ha pozitív a nyitott pozíciók értéke, akkor több lesz a balance-nál. Ha viszont a nyitott pozíciók nagyon negatív értéket kezdenek felvenni, akkor a bizonyos equity értéknél a bróker cég bármikor dönthet a margin call végrehajtásáról, vagyis bezárja a pozícióidat és marad a számlán annyi, amennyi. Ezért fontos, hogy a balance jó nagy legyen, a kötés mérete pedig minél kisebb, hogy minél később jöjjön a margin call...
AccountFreeMargin() --> a még szabadon beköthető tőke mennyisége
AccountLeverage() --> A számlán lévő tőkeáttét nagysága. Ha azt adja vissza, hogy 100, akkor az azt jelenti, hogy az áttét 1:100.
AccountMargin() --> A bekötött tőke nagysága. Ez csupán annyit jelent, hogy mennyit költöttünk az aktuális pozíció megnyitására.
MarketInfo() --> Ennek a függvénynek igen sokféle funciója van, elsősorban a jelenleg is nyitva lévő chart-ról ad információkat. Két paramétere van, az első az aktuális instrumentum neve, a második pedig a megtudakolni kívánt információra vonatkozó azonosító.
A legfontosabbak :
  • MODE_DIGITS --> Az intrumentum árának tizedes pont utáni számjagyeinek száma. Ez igen fontos, amikor PIP-eket szeretnénk számolni!
  • MODE_SPREAD --> a jelenlegi spread mérete PIP-ekben. Ez ugye változhat (bár vannak brókerek, akik azt hirdetik magukról, hogy fix spread-ekkel dolgoznak), de két különféle instrumentumnak általában azért különbözik a spread-je.
  • MODE_STOPLEVEL --> sok brókernél korlátozzák a stop szinteket, vagyis megmondják, hogy mi az a minimális PIP, ahová a stop-odat teheted. Tehát nem teheted a kötési ár alá 5 PIP-el, ha ez az érték 20-at ad vissza. Ebben az esetben a minimális stop húzás az aktuális ár alatt 20 PIP-el van.
  • MODE_LOTSIZE --> ez azt mondja meg, hogy az aktuális instrumentum esetében mi a lot mérete. Ez a bázis valuta egységeiben értendő. Ez természetesen függ a tőkeáttéttől is! A tőkeáttéttel, valamint ezzel az értékkel lehet kiszámítani a bekötött tőke mennyiségét, ami ha minden igaz, akkor megegyezik a korábban már említett AccountMargin() függvény által kiszámított értékkel. (természetesen csak akkor, ha a kötés árával számolunk és nem a pillanatnyi árral!!!)
  • MODE_MINLOT --> A pozíció nyitásához szükséges minimális lot mérete! Ez az egyik legfontosabb és az egyik legmeghatározóbb érték, ami az adott instrumentum kereskedéséhez kell. Brókere válogatja, hogy ez mennyi! Általában a demó számlán egészen kicsi, de az éles számlán már nagyobb (beetetés). Szóval ne csodálkozzunk, ha a demón jól működő programunk az élesen "túlkereskedi" a számlánkat. (persze ilyen egy jó MM-mel nem fordulhat elő...)
  • MODE_LOTSTEP --> A már meglévő pozíció módosításához használható lot méret. Vagyis, ah rákötünk, esetleg a pozíciót részlegesen zárjuk, akkor mi az a lot méret, amivel ezt megtehetjük. Ez sokszor kisebb, jó esetben egyenlő az előző értékkel (MINLOT).
  • MODE_MAXLOT --> a kereskedés folyamán nyitható lot-ok együttes száma ezt nem lépheti túl. Többnyire mikró számlákon van ilyen, amikor a minimális lot méret mondjuk 0.05, akkor ez az érték 2 lot szokott lenni. Vagyik addig nyitogathatunk pozíciókat, amíg a nyitott pozíciók lot számának összege el nem éri ezt az értéket. Tehát a példával élve, ha minden pozíciónkat 0.05 lot-tal nyitjuk meg - és nem változtatjuk később -, akkor összesen 40 ilyen pozíciót lehet nyitni.
Nos, nagyjából ennyit érdemes tudni ezekről a függvényekről, később, amikor használjuk őket, úgyis kivesézzük tövéről-hegyére.

Jó olvasgatást mindenkinek!

kedd, május 18, 2010

Hosszú idő után...

Nagyon régen írtam már a blogba, kaptam is néhány aggódó levelet, hogy mi lett a bloggal, hogy nem folytatom.

Nos, egy pici "off-topic" következik, akit nem érdekel, bátran hagyja ki.
Néhány magánéleti esemény változtatott rajtam igen sokat. Először is, rájöttem arra, hogy bár az ember társas lény, néha azért jó egyedül. De ennek is meg vannak a hátrányai. Néha baromi unalmas.
Másodszor egy igen keserű tapasztalattal lettem gazdagabb. Nem az számít, hogy mi mindent érünk el az életben, vagy az, hogy mennyi a magántulajdonunkban lévő ingóság, vagy ingatlan. Az számít, hány embert teszünk boldoggá, illetve hány ember élete lesz jobb általunk. Mennyien szeretnek... Na, de elég a filozófiából!
Off-topic vége.

Sokan kérdezték, mire jutottam a metával.
Sokra. Magam sem gondoltam volna milyen sokra. Attól tartok, nehéz lenne egyetlen bejegyzésbe sűríteni, úgyhogy majd szép apránként próbálom meg adagolni.

Nos, az egyik legjobb tapasztalatom a metával kapcsolatban, hogy nagyon fontos a jó bróker kiválasztása. Bármilyen hihetetlen, ez fontosabb lehet, mint maga a robot, amit leprogramozunk.
Hiába van egy nagyon jó robotunk, ha a számlánkat nem tudtuk megnyitni úgy, hogy megfelelően kis lot-okkal kereskedjünk, akkor elúszhat a számlánk. Sajnos számolnunk kell azzal, hogy az aktuális pozíciónk veszteséget is termelhet, bár a piac mindig megfordulhat, de negatív előjelű pozíciónkat ki kell bírja a számla.

Tudom, kicsit bonyolult, megpróbálom egy példával illusztrálni.
Adott egy számla, mondjuk 500 USD tőkével. A legkisebb pozíció, melyet nyithatunk, 0.1 lot. Ha elindul az ár a pozíciónkkal szemben (értsd: short-olsz, de az árak hirtelen nőni kezdenek). 500 dolláros számla és 1:100-as tőkeáttétel esetén 1 lot 100 000 egységet jelent. 1,5 dolláros EURUSD árfolyamnál ez azt jelenti, hogy a bekötött tőkénk minden egyes centnyi elmozdulásakor 10 dollárt mozog a nyitott pozíció értéke. 5 cent elmozdulás 50 dollárt jelent. Nem nehéz kitalálni, hogy 50 cent ellenirányú mozgás esetén el is fogy az 500 dolláros tőkénk és már jön is a margin call, a számlánk pedig nullán áll.

Ezzel szemben, ha a minimális pozíció nyitási lehetőség 0.01 lot, akkor a pénzbeli elmozdulások néhány dollárra rúgnak csak. Kisebbek a nyereségek, az igaz, de a számlánk lenullázásnak az esélye is kisebb.

Néhány FOREX bróker ezen a linken található : EarnForex.com
Aki tud angolul, annak könnyű lesz választani, bár sokat meg kell nézni ahhoz, hogy megtaláljuk a megfelelőt.
Amire nagyon figyeljünk, azok a következő kulcsszavak : commission, swap, minimum lot size, minimum deposit.

Az az ideális, ha commission nincs, tehát nem kérnek a pozíció nyitásokért külön pénzt. A másik nem nagyon figyelmen kívül hagyható tényező a swap, tehát a nyitott pozíciók után fizetett (vagy jó esetben kapott) kamat. Ha egyáltalán nincs, az a legjobb, de általában nem tudjuk elkerülni.

A következő két paraméter a minimum lot size, amiről már írtam, hogy jobb, ha minél kisebb, különösen, ha kicsi a kezdőtőkénk. az arányok nagyjából 500 dollár esetén 0.01 lot. Ettől csak jobbat keressünk, tehát ha 1000 dollárra jut 0.01 lot, az a legjobb.

Mára ennyi. Legközelebb a money management-ről fogok írni, legalábbis remélem. Lehet változik a koncepció, de majd meglátjuk. Az egyik legfontosabb dolog lesz az MM is!

szerda, október 07, 2009

Ninják helyett Szakértő Tanácsadók

Sajnos nagyon régóta nem sikerült a blogba írnom egyetlen sort sem.
Most azonban igyekszem tovább folytatni a blog írását, mert úgy gondolom, hogy minden kisbefektetőnek joga van ahhoz, hogy sikeres nagybefektetővé váljon.

Ami a NinjaTrader-t illeti, sajnos nagyon komoly nehézségekbe ütköztem. Rögtön mindjárt a historikus adatok kinyerése a szerverekből. Ez ugye azért problematikus, mert ha nincsenek folyamatos adatok, akkor a backtest teljesen félrevezető lehet és nem jó értelembe véve.

A másik nagyon komoly hátrányossága, hogy nem kezeli a számlán lévő tőkét, de még csak eljárások sincsenek definiálva arra, hogy kezelni, lekérdezni lehessen.

További hátránya, hogy a stratégia leállításakor az összes nyitott pozíciót azonnal lezárja, függetlenül attól, hogy pozitív, avagy negatív a profitja.

Leginkább azonban a fejlesztéshez nélkülözhetetlen historikus adatok adták meg a kegyelem döfést. Ha ugyanis néhány napig el sem indítjuk a programot, akkor a hiányzó adatokat nem pótolja a program, hanem a grafikont ott folytatja, ahol abbahagyta. így az a néhány napi adat hiányzik, jó nagy rést hagyva a gyertyák között. Ez olyan szinten hamisítja meg a backtest eredményeit, hogy képtelenség két egyforma backtest-et generálni két különféle gépen.

Így hát felhagytam a NinjaTrader programozásával és másik platformot voltam kénytelen keresni.

Sokáig nem is kellett keresgélnem, mert megtaláltam azt a platformot, amit a legtöbb automata trader fejlesztő cég használ, ez pedig a MetaTrader.

A program nyelvezete jóval bonyolultabb - amolyan igazi programozós, kódolós -, viszont sokkal megbízhatóbb működésű platform, amit még kézi kereskedésre is lehet használni.

Fontos megemlíteni, hogy van magyarnyelvű felülete, ami viszont nem terjed ki a programozási felületre (MetaEditor), az sajnos angol maradt, bár a programozók ennek inkább örülni szoktak. A programozás nyelve az angol...

Hátránya még - a bonyolultabb nyelvezet miatt -, hogy a köthető devizapárok, részvények és CFD-k száma a brókercégek kínálatától függenek, ami általában nem sok, néhány főbb papírokra, devizapárokra szűkülnek. Itt azonban igen fontos megemlíteni, hogy nagyon sok - és ezt tényleg így kell érteni - nagyon sok brókercéggel van kapcsolatban a MetaQuotes, így gyakorlatilag amivel kereskedni szeretnénk, azzal tudunk kereskedni (van ahol nemesfémekkel, olajjal is!!!)

Ami viszont óriási előnye, hogy helyesen kezeli a historikus adatokat, a hiányzó adatokat automatikusan letölti a szerverről, remekül lehet benne kezelni a számlát, egyszerre egy irányba bármennyi kötést enged - természetesen a tőke erejéig -, a program leállítása után a nyitott pozíciókat ott hagyja, így azután az ember azt csinál velük, amit csak akar.

További óriási előnye még, hogy nem csak a program indításakor lehet paraméterezni, hanem a már futó programnak is meg lehet változtatni a paramétereit, menet közben. Így nem kell leállítani és újra elindítani a programot, illetve be lehet építeni a programba olyan funkciókat, melyeket ki- és be lehet kapcsolni menet közben.
Ez például arra is jó lehet, hogyha le akarjuk állítani a programot, akkor "kikapcsoljuk" a pozíció nyitásokat és csak a meglévő pozíciók ellenőrzött bezárásaival foglalkozik a program.

A programba épített súgó nagyszerű, valódi helyzetérzékeny súgó, tehát azonnal segítséget kapunk a program írása közben, ami egy ilyen bonyolult nyelvezet esetén nagyon fontos.

Másik érdekesség, amit eleinte hátránynak, később inkább előnynek tituláltam, az az, hogy a program minden tick-re lefut, így egy gyertyán belül több kötés is létrejöhet, több különböző áron - függően a pillanatnyi ártól.
Természetesen 4 sor beiktatásával megoldható, hogy minden gyertya befejezésekor fusson csak le a program, de nem ez az alapértelmezett.

Érdekes módon nem csak a számláról lehet információkat kinyerni, hanem a brókercégről is, a nevén kívül például azt, hogy mi az a minimális távolság, ahová engedi a stop-ok és a take profit-ok behúzását, de akár a spread-et is.

Sajnos a chart-ra rajzolni jóval zűrösebb, sok utasítással és igen bonyolultan lehet csak. Viszont ki lehet íratni a bal felső sarokba néhány fontos - általunk megválasztott - információt, ami mindig látszik - például mondjuk az egyenleget.

Az árak vizsgálatához és úgy egyébként bármilyen gyertyával foglalkozó eljárásnak meg lehet mondani, hogy milyen időtávon működjön, és akár azt is, hogy melyik instrumentumon, függetlenül attól, hogy a chart-on mit látunk. Hogy ez mire jó?
Például arra, hogyha az egyik devizapár hamarabb reagál a délutáni hírekre, mint a másik, akkor a másik chart-ján már lehet sejteni, hogy mi következik és már lehet is nyitni a pozíciót, mielőtt még jel alakulna ki.

Érdemes megemlíteni azt is, hogy a nyitott pozíciókkal egyenként kell foglalkozni a programban, tehát erre ki kell alakítani a megfelelő technikát a programozás során, de ez inkább előny, mint hátrány, ugyanis a tömeges pozíció kezelés legtöbbször veszteségeket szül.

Fantasztikus lehetőség az is, hogy ugyanazt a programot több chart-on is lehet futtatni, mégsem kell aggodalmaskodni amiatt, hogy elfogy a tőke és szétforgácsolja a program, hiszen ugyanazt a számlát használja mindegyik chart, tehát ha több instrumentumon futtatjuk, akkor szépen megosztoznak a tőkén testvériesen.

Egész egyszerűen azt kell, hogy mondjam, hogy eddig a legjobban használható platform, mind fejlesztésre, mind futtatásra. Maga a program is sokkal kisebb (4MB szemben a NinjaTrader 20MB-jával szemben) a működésközbeni memória felhasználásáról nem is beszélve! Ez utóbbi azért fontos, mert távoli szerveren nem mindegy, hogy mekkkora memória felhasználása van egy ilyen rendszernek. Sok-sok költséget lehet megtakarítani azzal, ha kisebb távoli gépet kell bérelnünk.

A végkövetkezetés tehát az, hogy a MetaTrader az eddigi legjobb fejlesztői platform, amit természetesen ingyenesen és korlátlanul használhatunk automatikus programok fejlesztésére, élő, valóságos adatokkal, demó számlán, játékpénzzel. Ha pedig beérett a programunk, irány az éles számla.

A címért pedig magyarázattal tartozom, a MetaTrader-ben a kereskedésre alkalmas programokat Expert Advisor-nak, azaz szakértő tanácsadónak nevezik, innen a furfangos cím.

A következő bejegyzésben a MetaTrader (ezentúl MT-nek rövidítem) lehetőségeiről fogok kicsit bővebben írni, illetve elkezdünk programozni is.

Addig is, aki szeretné, töltse le a programot és ismerkedjen vele.

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.

szerda, május 27, 2009

Japán gyertyákhoz Ninja-kat!

Ahogyan már a korábbiakban is ecseteltem, a legkifizetődőbb módszer a kispénzű befektetőknek a tőzsdei kereskedésre a FOREX hullámainak meglovaglása, illetve az automatizált kereskedési módszerek.

Az automatizált tőzsdei kereskedések sok szempontból előnyösek. A legfontosabb előnyei :
  • érzelmek nélkül (így a tőzsde pszichológiai problémákat kiküszöbölve) kereskedik, a meghatározott szabályok szerint.
  • További hatalmas előnye, hogy sosem fárad el, éjjel is kereskedik, és akkor is, amikor a munkahelyünkön dolgozunk.
  • Bármikor ellenőrizhető, és módosítható, leállítható, újraindítható, stb.
  • Pontosan azt csinálja, amit kell, illetve amit a program meghatároz

Hátránya is van azért, íme :
  • Nem képes bonyolult áralakzatok felismerésére (vagy csak aránytalanul sok időráfordítással készült program segítségével, tehát nem költséghatékony)
  • Leginkább a rövidtávú gyertyatrendeket lehet vele meglovagolni, azokat is inkább indikátorok segítségével.
  • A rosszul megírt program több kárt tehet, mint amennyi hasznot hajt.
  • A legtöbb automatizált kereskedési platform drága.
A hátrányokkal együtt lehet élni, igazán a program megírása a kihívás, illetve nem utolsó sorban a kereskedési platform és konfiguráció ára az, amin tudunk változtatni.

Kezdjük az egyszerűbbel, a kereskedési platformokkal.

A platformok népszerűségét két dolog határozza meg. Az egyik a devizapárok száma, a másik pedig a spread-ek nagysága.
Ebben listavezető - utcahosszal - az OANDA. Ez egy kanadai brókercég, amely egyedülállóan alacsony spread-ekkel forgalmaz devizapárokat. Ráadásul igen sok devizapár található, a kereskedési grafikus felülete az egyik legjobb, amit kézi kereskedésre használni lehet.

Aki szeretne FOREX-en kereskedni, annak melegen ajánlom.

Sajnos azonban az automatizált kereskedéshez szükséges programozói felületet nagyon drágán árulja, 600 USD havonta. Persze, ha az ember ennek töbszörösét is meg tudja keresni, akkor ez nem olyan nagy baj, de ez az összeg akkor is nagyon sok.

Ezt még nem tanulmányoztam, de azt tudom, hogy Java alapú API-t licenszelnek ennyi pénzért. Elképzelhető, hogy később kicsit komolyabban szemügyre veszem, mert azért az OANDA eléggé a szivemhez nőtt a gyakorlások során. Azt viszont már most tudom, hogy kell egy komplett Java-s fejlesztő környezet, amit a fejlesztő maga állít össze, kell, hogy legyen 600 USD a számlán mindig, valamint kell tesztelési lehetőség is, amit az FXGame-en lehet is. De ezt a környezetet fel kell állítani, szöszölni kell vele és nem utolsó sorban drága is.

A másik ilyen kereskedési platform a NinjaTrader. Ő egy igazi svájci bicska, ugyanis FOREX-en is lehet kereskedni vele, de akár az amerikai tőzsdén részvényekkel is.
Minden egy kupacban rendelkezésre áll, ugyanis a kapcsolatok beállítása után tesztelni lehet demo adatokkal, illetve úgynevezett backtest-et lehet csinálni a múltbeli adatokkal.
A nyelvezete leginkább a C#-hoz hasonlít, ráadásul a varázslóival olyanok is tudnak kódot generálni, akik egyébként nem tudnak programozni.

Ára is barátságos, az ingyenes verzióval lehet fejleszteni, backtest-elni, élesben kereskedni viszont kétféle megoldással lehet. Az egyik, hogy 50 USD / hónap díjat fizetünk érte (azaz lízingeljük), illetve megvásároljuk véglegesen (ekkor persze megszabadulunk a havi költségektől), ekkor 995 USD-t kell kifizetnünk érte.

Habár nem olcsó, sőt sokkal drágább, mint az OANDA, de ezt csak egyszer kell kifizetni, a lízingeléssel pedig az olcsóbb indulást tudjuk megoldani.
Sajnos az OANDA-hoz nem tudunk vele csatlakozni, viszont a GainCapital rendszeréhez igen, ahol a további lehetőségek a következők :
  • Mini számla, 250 USD minimális tőkével lehet számlát nyitni és 200:1 tőkeáttétel van.
  • Standard számla, 2500 USD minimális tőkével lehet számlát nyitni, itt viszont már csak 100:1 tőkeáttét van.
Nyilvánvalóan a mini számlával érdemes kezdeni. Ez ugye durván 60 000 HUF kezdőtőkét igényel, ha élesben is kereskedni akarunk, egyébként viszont semennyibe sem, ha csak fejlesztgetni és tesztelni szeretnénk.

Mivel addig számlát nyitni nem érdemes, ameddig nincs megfelelő stratégiánk (programunk a NinjaTrader-ben), így most egyenlőre a stratégia kifejlesztésével fogunk foglalkozni első körben.

Az ehhez szükséges információkat a következő post-ban fogom leírni. Addig is mindenkinek jó töprengést, és akinek esetleg van jobb ötlete, azt szivesen látom!