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()
}
//--------------------------------------------------------------------
A 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()
}
//--------------------------------------------------------------------
A 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.
//--------------------------------------------------------------------
// 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.