MQL4 könyv   Meta Editor  Programok létrehozása és használata

 Programok létrehozása és használata

A MetaEditor segítségével MQL4-ben írt alkalmazási programokat, Expert Advisort, scripteket és indikátorokat hozunk létre.

A Meta Editor (MetaEditor.exe végrehajtható állomány) az ügyfélterminál része és a terminál gyökérkönyvtárában helyezkedik el. A Meta Editor Userguide-ját az F1 gomb hozza elő. Ez általános felvilágosítást tartalmaz, ami nélkülözhetetlen az új programok létrehozásához. A szerkesztőt meg tudod nyitni, ha a MetaEditor.exe állománynévre kattintasz, vagy az asztalon előzetesen elhelyezett parancsikon segítségével is.

Az ügyfélterminál szerkezete

A munka megkönnyítésére Meta Editornak beépített eszköztárai vannak: (Ctrl+D) navigátor és (Ctrl+T) szerszámosláda.


25. ábra .A Meta Editorban levő ablakok elhelyezkedése.

A program szövege a szerkesztőablakban helyezkedik el, az eszköztár ablakok csak kiegészítők. A navigátornak és a szerszámosládának mozgatható határaik vannak a szerkesztőben, és az és  gombokkal lehet előhozni/elrejteni őket.

Egy új program létrehozása

Általában egy új program létrehozás alatt a szerszámosládát és navigátorablakokat elrejtik. Így a felhasználó a figyelmét programra koncentrálhatja. Létrehozhatunk egy új programot, ha használjuk a szerkesztőmenü File>> Create opcióját vagy az új fájl létrehozása gombot .

Ezek után az Expert Advisor Wizard  fel fogj ajánlania a programtípusok listáját , hogy ki tudd választani a létrehozandó fájl típusát:

26. ábra. A létrehozandó program típusának kiválasztása.

Ha létre akarsz hozni egy Expert Advisort, válaszd az Expert Advisor opciót és kattints a Nextre. A következő ablakba írd be a létrehozandó Expert Advisor nevét. Legyen ez a név a create.mq4

Figyelem!

A létrehozandó fájl nevét a kiterjesztése nélkül írjuk.


Az Expert Advisor Wizard egy többmezős ablakot fog nyitni, töltsük azt ki:


27. ábra. Egy Expert Advisor általános paramétereinek az ablaka.


Az Ok-ra kattintva a főablakban egy szöveg fog megjelenni és a létrehozott Expert Advisor create.mq4 teljes neve meg fog jelenni a fájlrendszerben és a navigátorablakban.


28. ábra. A fájlrendszerben és a navigátorablakban is láthatjuk a létrehozott Expert Advisor fájlt.

Lássuk a programszöveget, amit a Meta Editorlétrehozott :

//+------------------------------------------------------------------+
//| create.mq4 |
//| John Smith |
//| www.company.com |
//+------------------------------------------------------------------+
#property copyright "John Smith"
#property link "www.company.com"
 
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
 {
//----
 
//----
 return(0);
 }
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
 {
//----
 
//----
 return(0);
 }
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
 {
//----
 
//----
 return(0);
 }
//+------------------------------------------------------------------+

Láthatjuk, hogy ez a kód főleg megjegyzéseket tartalmaz. Már tudjuk, hogy a megjegyzések egy program nem kötelező részét alkotják és a megjegyzések szövegét nem hajtja végre a program.

Van három különleges függvény a programban: init(), start() és deinit(). Mindegyik függvény csak egy operátort tartalmaz - return(0) – ez az operátor kilépés a függvényből. Ez a programkód, amit az Expert Advisor Wizard létrehozott, csak egy minta, amely alapján a programozó létre tud hozni egy új programot. A végső programkód kötelezően nem kell, hogy tartalmazza mindegyik különleges függvényt. Ezek a mintában jelen vannak, mert egy szokásos, közepes szintű program tartalmazza ezek közül a függvények közül mindegyiket. Ha a függvények közül bármelyiket nem fogjuk használni, akkor azt törölni lehet.

A programkódból a következő sorokat szintén kihagyhatjuk:

#property copyright "John Smith"
#property link "www.company.com"

Bár ez a program gyakorlatilag nem használható, azt a szintaxis szempontjából helyesen írták. Ezt a programot lefordíthatnánk és elindíthatnánk. Az végrehajtódna, mint bármilyen másik program (bár számításokat nem végezne, mert ilyenek nincsenek a forráskódban).

A program megjelenése

A programokban erősen ajánlott a megjegyzéseket használni és néhány esetben ez nagyon fontos. Azt hangsúlyozni kell, hogy egy programozó nem csak programokat ír de olvassa is őket. Néha jelentős nehézséget okoz egy program olvasása. A tapasztalat azt mutatja, hogy sok programozó az érvelő logikák, ami alapján a programot fejlesztette, el szokta felejteni (vagy egy másik programozó írta a terméket) és megjegyzések nélkül nehéz, néha lehetetlen, megérteni a kódrészeket.

Figyelem!

Egy helyesen kódolt program minden esetben tartalmaz megjegyzéseket.

A megjegyzések fő előnyei hogy:

  • Először, a megjegyzések elválasztják a logikailag összefüggő programrészeket egymástól. Sokkal könnyebb olvasni egy helyesen formázott szöveget egy folyamatos szövegnél.
  • Másodjára a megjegyzések lehetővé teszik, hogy a programozó egyszerű szavakban megmagyarázza, mit gondolt a kódsorok írásakor.
  • Harmadszor egy program felső részében a programmal kapcsolatos általános információt részletezhetünk: a szerző nevét és kapcsolatatát (weboldal, e-mail, stb.), a program célját (egy teljes kereskedő program vagy egy könyvtári függvény), a fő jellemzőit és korlátozásait és egyéb hasznos információkat.
Minden programozó kiválaszthatja magának a megjegyzések kényelmes stílusát. Azt a stílust, amit az MQL4 fejlesztők ajánlottak a create.mql4. Expert Advisor fájlon mutatjuk be. Nézzük meg a megfelelő megjelenési stílusok fő jellemzőit!

1. Egy megjegyzéssor-hossznak nem szabad túlnyúlni a főablakon. Ez a korlátozás nem a nyelvi szintaxis követelménye, de egy olyan programot olvasni, ami túlnyúlik a szegélyen, nem kényelmes. Bármilyen hosszú sort több sorba választhatunk, míg teljesen láthatók nem lesznek a képernyőn. Egy 1024 x 768 pixel felbontású monitoron a legnagyobb sorhossz 118 karakter.

2. Változók deklarációját célszerű a programkezdetnél elhelyezni. Ajánlott mindegyik változóhoz megjegyzést írni : röviden megmagyarázzni a jelentésüket és, ha szükséges, a használat sajátosságait.

3. Mindegyik operátort célszerű külön sorban elhelyezni.

4. Ha megjegyzés van a sorban, azt a 76 pozícióból kell elindítani ( 17” monitor 1024 x 768 felbontással). Ez a követelmény nem kötelező. Például, ha egy kódsor 80 karakter, ez nem szükséges megosztani két sorba, a megjegyzést indíthatjuk a 81. karaktertől. Általában a program kódrésze 50 karakter hosszú sorokat tartalmaz és a megjegyzések, mint egy szövegoszlop a képernyő jobb szélén helyezkednek el.

5. A logikailag különálló részek elválasztására teljes szélességben kötőjelekből álló folytonos karakter-sort használnak (118 karakter).

6. Amikor kapcsos zárójeleket használnak, egy tabulálás méretű behúzást kell használni (általában 3 karakter).

Lássuk, hogyan néz ki egy Expert Advisor programkód. Ebben az esetben a programalgoritmus logikáját nem tárgyaljuk. Csak a program megjelenésével foglalkozunk. Egy program (Expert Advisor create.mq4) kinézete a következő lehet:
//--------------------------------------------------------------------
// create.mq4
// Az MQL 4 könyben használtpélda.
//--------------------------------------------------------------------
int Count=0; // Globális változó
//--------------------------------------------------------------------
int init() // Az init() különleges függvény
 {
 Alert ("Az init() függvény elindult"); // Riasztás
 return; // Kilépés az init()-ből
 } 
//--------------------------------------------------------------------
int start() // A start() függvény
 {
 double Price = Bid; // Helyi változó
 Count++; // Tick számláló
 Alert("New tick ",Count," Price = ",Price);// Riasztás
 return; // Kilépés a start() függvényből
 }
//--------------------------------------------------------------------
int deinit() // A deinit() függvény
 {
 Alert ("Funct. deinit() triggered at exit"); // Riasztás
 return; // kilépés a deinit()-ből
 }
//--------------------------------------------------------------------

Látható, hogy a programot több blokkra osztották és megjegyzésekkel (folyamatos sorokkal) tagolták. Ez egy módszer arra, hogy elválasszuk a különleges függvényeket és a  program fejrészét:

//--------------------------------------------------------------------

A változókat egy olyan különálló blokkban deklarálták, ahol mindegyik változót leírtak. Néha a programok olyan változókat tartalmaznak, melyek magyarázatához többen sort kell használni. Ez ritka eset, de ha ez történik, ezt a megjegyzést mindenféleképpen el kell helyezni, különben nem csak egy másik programozó, de maga a szerző sem lesz képes arra, hogy egy idő után megértse ezt a részt.

Mindegyik kódsor jobb oldala tartalmaz egy magyarázó megjegyzést. A megjegyzések fontosságát érzékeltethetjük, ha egy program nem tartalmaz ilyeneket akkor problémát okoz az algoritmus megértése a program olvasás közben. Például, ha ugyanazt a kódot mutatjuk be megjegyzések és blokkelválasztás nélkül, nehezebb lesz olvasni azt, bár a program eléggé egyszerű és rövid:

int Count=0; 
int init() {
Alert (Funct. init() triggered at start"); 
return; } 
int start() {
double Price = Bid; 
Count++;
Alert("New tick ",Count," Price = ",Price);
return; }
int deinit(){
Alert (""Funct. deinit() triggered at exit"); 
return;}

A program lefordítása

 Hogy gyakorlatban használhatóvá tegyünk egy programot, azt le kell fordítani. Erre a  gombot vagy az F5-öt kell használni a Meta Editorban. Ha a program nem tartalmaz semmilyen hibát, a fordítás megtörténik és egy üzenet fog a szerszámosládában megjelenni:


29. ábra. Szerkesztőüzenet egy sikeres programfordításról.


Ezután az új fájl, a create.ex4 me gfog jelenni a megfelelő mappában (ebben az esetben Terminal_directory\experts). Ez egy olyan program, ami készen áll a végrehajtásra a MetaTrader4 ügyfélterminálban. A fordítása alatt ugyanazon néven a program forrásszövegének az utolsó verziója (ez esetben ez a fájl a create.mq4) ugyanabba a mappába lesz elmentve.

Ugyanakkor a létrehozott Expert Advisor neve meg fog jelenni az ügyfélterminál navigátor-ablakának az Expert Advisors szekciójában:


30. ábra. Láthatjuk az ügyfélterminál navigátor-ablakában levő Expert Advisorok nevét.

Ha a fordítás alatt hibát talál a programban, a Meta Editor a megfelelő hibaüzenetet fogja mutatni. Ezesetben  vissza kell térni a forrásszöveghez, ki kell javítani a hibákat és meg kell kísérelni még egyszer lefordítani a programot. A sikeres fordítás csak akkor lehetséges, ha a programban nincsenek hibák.

Egy program gyakorlati használata

Ha egy alkalmazási program (Expert Advisor, script vagy indikátor) sikeresen le lett fordítva és a neve megjelent az ügyfélterminál navigátor-ablakában, azt a gyakorlatban használhatjuk. Készen áll arra, hogy az ikont az egérrel áthúzzuk navigátorablakból a szimbólumablakba ('drag & drop' módszer). Ezzel a művelettel a programot hozzá csatoltuk egy szimbólumablakhoz és a végrehajtása indult.

Egy Expert Advisor és egy indikátor addig fog működni , amíg a felhasználó kézzel leállítja a programvégrehajtást. Egy szokásos script abba fogja hagyni a működését  miután végrehajtotta az algoritmusát.

Még egyszer felhívjuk a figyelmedet:

Figyelem!

Bármilyen alkalmazási programot (Expert Advisor, indikátor, script) csak arra tudod használni, hogy a MetaTrader 4 Client Terminal részeként kereskedjen, amikor ez az Interneten keresztül a szerverhez kapcsolódik (a dealing centerhez). A programok közül egyik sem települ a szerverre és nem használhatók más fejlesztésű ügyfélterminálokban.

Más szóval, ha a kereskedő használni akar valamilyen alkalmazási programot, neki fel kell kapcsolnia a számítógépét, el kell indítania a MetaTrader 4 Client Terminalt és el kell indítania az *.ex4 állományt egy szimbólum ablakban. A program működése alatt (az algoritmusától függően) megbízásokat küld a szerverre miközben a kereskedelmi menedzsmentet vezeti.