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!

Nincsenek megjegyzések:

Megjegyzés küldése