MQL4 könyv   Egyszerű MQL4 programok   A technikai indikátorok használata

A technikai indikátorok használata

A MetaTrader 4 online kereskedő rendszerben az MQL4 indikátorokat két csoportba sorolhatjuk: technikai és egyéni indikátorok.

A technikai indikátorok a MetaTrader online kereskedő rendszer szerves részét képezik, beépített függvények, amelyek lehetővé teszik, hogy a képernyőn kövessünk bizonyos összefüggéseket.

A technikai indikátorok tulajdonságai

Rajzolás a szimbólum ablakba

Minden technikai indikátor kiszámít egy bizonyos előre definiált függőséget. Hogy megjelenítsük ezt a függőséget a képernyőn, a technikai indikátort hozzá kell erősíteni az ábrához. Ez végre lehet hajtani a menün keresztül Insert>> Indicators, vagy az ügyfélterminál navigátorablakán keresztül. Ha a navigátorablakból erősítünk hozzá egy technikai indikátort egy szimbólumábrához, nagyon egyszerű módszert használhatunk: ”drag-&-drop” módszerrel a technikai indikátor nevét a navigátorablakból a szimbólumablakba húzzuk. Végül több-kevesebb számítás után ez az indikátor meg fog jelenni a szimbólum ablakban.


104. ábra. Technikai indikátor csatolása egy ábrához.

A technikai indikátor elhelyezhető a fő szimbólumablakban, vagy az alatta lévő kiegészítő ablakban. A 104. ábrán az Alligator technikai indikátort a fő ablakban helyeztük el.

A kódjuk megváltoztathatatlan

Minden technikai indikátor beépített, a kódjukat nem lehet módosítani. Tehát felhasználó védett a beépített technikai indikátorok hibás módosításától. Mindazonáltal a forráskód, ami a technikai indikátort kiszámolja elérhető a szoftverfejlesztő honlapján (MetaQuotes Software Corp.) a Technical Indicators részben. Ha szükséges, a programozó arra használhatja a teljes kódot vagy ennek a részét, hogy egyéni indikátorokat hozzon létre (lásd: Egyéni indikátorok létrehozása).

A technikai indikátorok függvényhívása

A grafikus ábrázolást a felhasználó az ügyfélterminál ablakában követheti. Az egyszerűség kedvéért ’indikátor vonalnak’ fogjuk nevezni az ilyen rajzokat.

Indicators Line - indikátor vonal - bizonyos függőségnek a grafikus megjelenítése, amelynek számszerű értékeit egy indikátortömb tartalmazza.

Az indikátor vonalak típusát a felhasználó állíthatja be. Az indikátor vonalak lehetnek folytonosak vagy szaggatottak, különböző színűek és állhatnak bizonyos jelek sorozatából (pontok, négyzetek, körök, stb.). Az indikátorszámítások alatt a számszerű értékek készletének kiszámítását értjük, az indikátor vonalak ezen számításokkal összhangban fognak megrajzolódni. Ezen értékek készlete az indikátortömbben fog elraktározódni.

Indikátor Tömb - egy egydimenziós tömb, ami azokat a számszerű értékeket tartalmazza, amelyek alapján az indikátorvonalak felépülnek. Az indikátortömb-elemek számszerű értékei azon pontok koordinátái, amely pontok alapján egy indikátorvonalat megrajzol a termimál. A pontok Y koordinátája az indikátortömb-elem értéke, Az X koordinátája az indikátortömb-elem index értéke.

Azok az adatok, amit ez a technológia az indikátortömbökben elraktároz, a technikai és egyéni indikátorok megvalósításának az alapja. A technikai indikátorok indikátortömb-elemeinek az értékei elérhetőek minden alkalmazási programból, Expert Advisorból, scriptből és egyéni indikátorból. Ha egy bizonyos indexszel rendelkező indikátortömb-elem értékének a bevitele szükséges egy alkalmazási programba, akkor ez az indikátorra jellemző beépített függvény hívásával történik.

Figyelem!

Egy technikai indikátor függvény végrehajtásához a megfelelő indikátort nem szükséges hozzáerősíteni a szimbólumablakhoz. Úgyszintén, egy technikai indikátor függvényhívás egy alkalmazási programból nem vezet a megfelelő indikátor szimbólumablakhoz való csatolásához. Egy technikai indikátor csatolása egy szimbólumablakhoz nem végződik technikai indikátor hívással semelyik alkalmazási programból.


A MetaTrader 4 ügyfélterminál sok beépített technikai indikátort tartalmaz. Elemezzük néhányukat!

Moving Average, MA, Mozogó átlag:

Moving Average, MA technikai indikátor egy szimbólum bizonyos időszakon belüli átlagárát mutatja. Az indikátor visszatükrözi az általános piaci tendenciát - növekedhet, csökkenhet vagy ingadozhat valamely ár közelében.

Ha meg akarod kapni az MA indikátor vonal értékét egy bizonyos pillanatban, használd a beépített függvényt:

double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

Paraméterek:

symbol - a szimbólum neve, ami adatai alapján az indikátort kiszámoljuk. NULL jelenti az aktuális szimbólumot ahová az indikátort csatoltuk.

timeframe – időkeret. A chart időkerete, ami alapján az indikátort kiszámoljuk. 0 jelenti az aktuális ábra időkeretét.

period – az MA által átlagolt időszak.

ma_shift – az indikátor elcsúsztatása az árfolyamábrához viszonyítva.

ma_method – az átlagolás módszere. Az értéke jelöli ki az MA kiszámításának módszerét.

applied_price – jelzi, hogy a bár melyik jellemző árára számoljuk ki az értékeket.

shift – az indikátortömb indexe, ahonnan az értéket szereztünk, (a shift az aktuális bár és a számítás alapját képező  bár egymáshoz képesti viszonya).

Lent egy példa egy technikai indikátor függvény hívására:  callindicator.mq4 Expert Advisor:
//--------------------------------------------------------------------
// callindicator.mq4
// The code should be used for educational purpose only.
//--------------------------------------------------------------------
extern int Period_MA = 21; // Calculated MA period
bool Fact_Up = true; // Fact of report that price..
bool Fact_Dn = true; //..is above or below MA
//--------------------------------------------------------------------
int start() // Special function start()
 {
 double MA; // MA value on 0 bar 
//--------------------------------------------------------------------
 // Tech. ind. function call
 MA=iMA(NULL,0,Period_MA,0,MODE_SMA,PRICE_CLOSE,0); 
//--------------------------------------------------------------------
 if (Bid > MA && Fact_Up == true) // Checking if price above
 {
 Fact_Dn = true; // Report about price above MA
 Fact_Up = false; // Don't report about price below MA
 Alert("Price is above MA(",Period_MA,").");// Alert 
 }
//--------------------------------------------------------------------
 if (Bid < MA && Fact_Dn == true) // Checking if price below
 {
 Fact_Up = true; // Report about price below MA
 Fact_Dn = false; // Don't report about price above MA
 Alert("Price is below MA(",Period_MA,").");// Alert 
 }
//--------------------------------------------------------------------
 return; // Exit start()
 }
//--------------------------------------------------------------------

callindicator.mq4 EA az iMA() függvényhívást  használja (a Moving Average technikai indikátor függvénye).  Elemezzük részletesen ezt a programrészt:

 MA=iMA(NULL,0,Period_MA,0,MODE_SMMA,PRICE_CLOSE,0);

A NULL azt jelenti, hogy a mozgó átlagot abból a szimbólumból számoljuk, amihez az EA-t csatoltuk, (ebben az esetben ez EA, de bármilyen alkalmazási program lehet);

0 – azon ablak időkeretével dolgozunk, ahová az EA-t csatoltuk;

Period_MA – az átlagolt időszak értékét egy külső változóba helyeztük; ha az EA csatolása után a felhasználó nem változtatja meg ezt az értéket az EA külső változóinak beállításaiban, az érték egyenlő 15-tel;

0 – az indikátortömböt nem mozdítottuk el a charthoz képest, az MA indikátor vonalat azokra a bárokra rajzoljuk, amely bárok alapján az indikátortömb-elemeket kiszámoltuk;

MODE_SMA - egy egyszerű mozgó átlag módszerrel végezzük a számításokat;

PRICE_CLOSE – a bárok záró árát használtuk a számításokhoz;

0 - indikátortömb-elem index, ahonnan az értékeket szerezzük, - ebben az esetben ez a nulla elem.

Mivel az indikátortömböt nem mozdítottuk el a charthoz képest, az  MA értéket a null bárról szereztük. Az iMA() függvény által visszaküldött értéket adjuk az MA változónak. A további programsorokban, ezt az értéket összehasonlítjuk az aktuális Bid árral. Ha az aktuális ár az MA értéknél magasabb vagy alacsonyabb, egy riasztást kapunk. A Fact_Up és Fact_Dn változók használata lehetővé teszi, hogy az MA vonal  keresztezése után csak egyszer kapjunk riasztást, (megjegyzés, a kék indikátor vonal az ablakban nem azért látható az ablakban, mert a technikai indikátor függvényt hívta a program, hanem azért mert a felhasználó csatolta az indikátort az ábrához (104. ábra).


105. ábra. A callindicator.mq4 működésének az eredménye.

Tudni kell, hogy az új bárok megjelenésével történelemi bárok indexei növekedni fognak, és a jelenleg alakuló bár indexe mindig 0 lesz. A  callindicator.mq4 Expert Advisorban az iMA() technikai indikátor függvény mindig a null báron számolt értéket küldi vissza. Mivel az index értéke nem változik az EA végrehajtás alatt (a számításokat mindig az aktuális báron végezzük), az érték, amit az iMA() függvény visszaküld, mindig a legutolsó számítás eredménye, vagyis amit az aktuális nulla báron kiszámoltunk.

Ha valamilyen számításhoz a programban meg kell szereznünk egy technikai indikátor értékét egy régebbi bárra kiszámolva a szükséges indikátortömb-indexet meg kell adni a függvényhívásban. Nézzünk meg egy olyan példát, a  historybars.mq4  EA-t, amiben MA-t a negyedik báron számoljuk ki:
//--------------------------------------------------------------------
// historybars.mq4
// The code should be used for educational purpose only.
//--------------------------------------------------------------------
extern int Period_MA = 5; // Calculated MA period
//--------------------------------------------------------------------
int start() // Special function start()
 {
 double MA_c, // MA value on bar 0 
 MA_p, // MA value on bar 4 
 Delta; // Difference between MA on bars 0 and 4
//--------------------------------------------------------------------
 // Technical indicator function call
 MA_c = iMA(NULL,0,Period_MA,0,MODE_SMA,PRICE_CLOSE,0); 
 MA_p = iMA(NULL,0,Period_MA,0,MODE_SMA,PRICE_CLOSE,4); 
 Delta = (MA_c - MA_p)/Point; // Difference between MA on 0 and 4th bars
//--------------------------------------------------------------------
 if (Delta > 0 ) // Current price higher than previous
 Alert("On 4 bars MA increased by ",Delta,"pt"); // Alert
 if (Delta < 0 ) // Current price lower than previous
 Alert("On 4 bars MA decreased by ",-Delta,"pt");// Alert 
//--------------------------------------------------------------------
 return; // Exit start()
 }
//--------------------------------------------------------------------

historybars.mq4 EA-ban az MA értékét kiszámoltuk az aktuális báron (0 indexel) és a negyedik báron (4-es indexel). A 0 és 4 indexek nem változnak ez alatt a program alatt és a program végtelen sokáig működhet miközben a 0. és a 4. bárok MA értékeit számolja. Emlékezzünk, annak ellenére, hogy az MA számítását ugyanazon indexű bárokon végezzük az MA értéke változni fog a mindenkori nulladik és a mindenkori negyedik bárnak megfelelően.


106. ábra. A historybars.mq4 végrehajtásának eredménye.

A 106. ábrán világosan látszik, ahogy nőnek a bárok, az MA értéke emelkedik. A nulla báron számolt, és a negyedik báron számolt MA értéke közti különbség szintén nő, ami visszatükröződik a riasztásban.

A technikai indikátorok nemcsak egy, hanem kettőt vagy több indikátorvonalat is rajzolhatnak.

Stochasztikus oszcillátor

A Stochastic Oscillator technikai indikátor összehasonlítja az aktuális záró árat egy kiválasztott időszak ársávjával. Az indikátort általában két indikátor vonal képviseli. A fő vonalat %K-nek nevezik. A második, a %D signal vonal a %K mozgó átlaga. Általában %K-t folytonos vonallal rajzoljuk, a %D -t szaggatottal. Az egyik indikátorértelmezés szerint, vásárolnunk kellene, ha %K magasabb, mint %D és az eladni, ha %K % D-nél alacsonyabbá válik. A legkedvezőbb pillanat a kereskedésre az a pillanat, amikor a két érték egybeesik.
double iStochastic(string symbol, int timeframe, int %Kperiod, int %Dperiod, int slowing, int method, int price_field,
int
mode, int shift)

Paraméterek:

symbol - a szimbólum neve, ami adatai alapján az indikátort kiszámoljuk. NULL jelenti az aktuális szimbólumot.

timeframe – időkeret. A chart időkerete, ami alapján az indikátort kiszámoljuk. 0 jelenti az aktuális ábra időkeretét.

%Kperiod – az időszak (a bárok száma) ahol a %K értékét számoljuk.

%Dperiod - a %D által átlagolt időszak.

slowing - lassítás.

method – az átlagolás módszere. Értékei azonosak az MA módszerek értékeivel.

price_field - a számítások alapjául szolgáló árak paramétere. A következő értékei lehetnek: 0 - a Low/High vagy 1 - Close/Close.

mode - az indikátor vonalak indexe. A következő értékei lehetnek: MODE_MAIN vagy MODE_SIGNAL.

shift – az indikátortömb  indexe, ahonnan az értéket szereztünk, (a shift az aktuális bár és a számítás alapját képező bár egymáshoz képesti viszonya).

A Stochastic Oscillator használatához szükséges, hogy elemezzük a az indikátor vonalak relatív helyzetét. Miközben kiszámítjuk, hogy milyen kereskedelmi döntést kell végrehajtani, az aktuális és az előző bárokban lévő értéket is figyelembe kell venni (lásd: 107. ábrát). Amikor a vonalak kereszteződnek az A pontban (a zöld vonal felfelé keresztezi a pirosat), a Sell megbízást zárni kell és Buy megbízást kell nyitni. Az A-B időszak alatt (nincs kereszteződés, a zöld vonal magasabb, mint a piros vonal) a Buy megbízást nyitva kell tartani. A B pontban (a zöld vonal lefelé keresztezi a pirosat) a Buy-t zárni kell és Sell-t kell nyitni. A Sell-nek a következő kereszteződésig kell nyitva maradnia (nincs kereszteződés, zöld vonal a piros vonal alatt van).


107. ábra. A fő és a signal vonal kereszteződése a Stochastic Oscillator-ban.

A következő példa egy olyan egyszerű algoritmus megvalósítását tartalmazza, ahol láthatjuk az indikátor vonalak értékei megszerzésének módját, és azt, hogy ezen értékeket hogyan alkalmazzuk a kereskedés feltételeinek meghatározására.  Erre a célra az iStochastic() technikai indikátor függvény  értékeit használjuk a  callstohastic.mq4 EA-ban:
//--------------------------------------------------------------------
// callstohastic.mq4
// The code should be used for educational purpose only.
//--------------------------------------------------------------------
int start() // Special function start()
 {
 double M_0, M_1, // Value MAIN on 0 and 1st bars
 S_0, S_1; // Value SIGNAL on 0 and 1st bars
//--------------------------------------------------------------------
 // Tech. ind. function call
 M_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 0);// 0 bar
 M_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 1);// 1st bar
 S_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);// 0 bar
 S_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);// 1st bar
//--------------------------------------------------------------------
 // Analysis of the situation
 if( M_1 < S_1 && M_0 >= S_0 ) // Green line crosses red upwards
 Alert("Crossing upwards. BUY."); // Alert 
 if( M_1 > S_1 && M_0 <= S_0 ) // Green line crosses red downwards
 Alert("Crossing downwards. SELL."); // Alert 
 
 if( M_1 > S_1 && M_0 > S_0 ) // Green line higher than red
 Alert("Continue holding Buy position."); // Alert 
 if( M_1 < S_1 && M_0 < S_0 ) // Green line lower than red
 Alert("Continue holding Buy position."); // Alert 
//--------------------------------------------------------------------
 return; // Exit start()
 }
//--------------------------------------------------------------------

A %K vonal (folyamatos zöld) null báron számított értékét a következő sor alapján kapjuk:

 M_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 0);// 0 bar

A MODE_MAIN paraméter jelzi azt a vonalat, aminek az értékét lekérdezzük, az utolsó paraméter, a 0 a bár index, ami a számítások alapja. A három következő programsorban ennek analógiájára kiszámítjuk a változók további értékeit: a %D indikátor vonal értékét (piros szaggatott vonal, paraméter a MODE_SIGNAL) a nulla és az első báron.

A következő blokkban a visszatérési értékek viszonyát elemezzük és az EA jelentést ad mindegyik tick esetén. Például, a következő sorban:

 if( M_1 < S_1 && M_0 >= S_0 ) // Green line crosses red upwards
 Alert("Crossing upwards. BUY."); // Alert

Érzékeltük, hogy a piros vonal felfelé keresztezi a zöldet. Ha az előző báron a zöld vonal alatt volt a piros (az M_1 <S_1 kifejezés igaz), és az aktuális báron a piros vonal a zöld fölé emelkedett, vagy az értékeik egyenlők lettek (az M_0 >= S_0 kifejezés igaz), ez azt jelenti, hogy az aktuális bár képződése alatt történt meg a két vonal kereszteződése. Így 'if' operátor feltétele igazzá válik, ezért a vezérlés az 'if' operátor törzsébe kerül, végül az Alert() függvény végrehajtása megjeleníti a megfelelő üzenetet.

Egy kereskedő Expert Advisor esetében az 'if' operátor törzse tartalmazza a Buy megbízást megnyitó kereskedelmi függvényt. Ebben az esetben az indikátor vonalak kereszteződése egy kereskedelmi kérés képződéséhez fog vezetni és végül a kereskedelmi művelet végre lesz hajtva. Abba az esetben mikor a zöld vonal lefelé keresztezi a pirosat, az 'if' operátor törzsében a kereskedelmi függvénynek egy Sell megbízást kell nyitnia.

A 108. ábrán láthatjuk  a callstohastic.mq4 futtatásának az eredményét.


108. ábra. A  callstohastic.mq4 futtatásának eredménye.

Nagyon egyszerű a technikai indikátor függvényeket arra használni, hogy velük kereskedő scripteket és Expert Advisorokat alkossunk. A technikai indikátorok száma, amelyeket egy Expert Advisorban használhatunk korlátlan. Egy kereskedési stratégiai fejlesztője úgy dönthet, hogy a technikai indikátor értékek kombinációja alapján különböző kereskedési ismertetőjeleket határoz meg. Példa egy olyan egyszerű kereskedő Expert Advisorra, amely a technikai indikátorok kereskedési ismertetőjelein alapul, látható az  Egyszerű Expert Advisor részben.