MQL4 könyv   Programozás MQL4-ben    Különleges függvények

Különleges (speciális) függvények

A MetaTrader 4 ügyfélterminálban működő programoknak az az egyik fő sajátossága, hogy állandóan frissített információkkal, valós idejű módban dolgoznak. Az MQL4 nyelv ezen sajátsága visszatükröződik a három különleges függvény alakjában: init(), start() és deinit().

A különleges függvények különleges tulajdonságokkal felruházott, előre definiált nevekkel - init(), start() és deinit() - rendelkező függvények.

A különleges függvények tulajdonságai

A különleges függvények közös tulajdonsága

Minden különleges függvény közös tulajdonsága az, hogy a programból történő függvényhívás nélkül, bizonyos feltételek megléte esetén végrehajtódnak a programban. A különleges függvényeket végrehajtásra az ügyfélterminál hívja. Ha egy program tartalmazza egy különleges függvény leírását, azt hívni fogják (és végrehajtódik) a hívó feltételekkel összhangban (saját tulajdonságok).

Figyelem!

A különleges függvényeket végrehajtásra híják, csak az ügyfélterminál hívhatja őket.

A különleges függvények egyéni tulajdonságai

Az init() különleges függvény.

Az init() különleges függvény tulajdonsága, hogy a program inicializálásnál azt végrehajtják. Ha egy program tartalmazza az init() különleges függvény leírását, azt hívni fogják (és végrehajtják) a program indításánál. Ha init() különleges függvény nincs egy programban, a programkezdésnél nem történik végrehajtás.

Az Expert Advisorban az init() különleges függvényt hívják (és végrehajtják) az ügyfélterminál indításánál a történelmi adatok betöltése után, a Meta Editorban levő program újrafordítása után, chart ablak és idősík váltás után, azután, hogy az EA tulajdonságok ablakában az input paramétereket megváltoztatjuk, és az után, hogy számlaegyenleg megváltozik.

A scriptben az init() különleges függvényt hívják (és végrehajtják) közvetlenül az elindítása után.

Egyéni indikátorokban az init() különleges függvényt, hívják (és végrehajtják) közvetlenül az ügyfélterminál indítása után, chart ablak és idősík váltás után, a MetaEditorban levő program újrafordítása után és az egyéni indikátor tulajdonságok ablakban lévő input paraméterek változása után.

A start() különleges függvény.

A start()  különleges függvény működése  a végrehajtható program típusától függ.

Az Expert Advisorban a start() különleges függvényt, hívják (és végrehajtják) amint egy új tick jön. Ha az új tick a start() különleges függvény végrehajtása alatt jött, ezt a ticket figyelmen kívül fogják hagyni, vagyis ilyen esetben  a start() különleges függvényt nem fogják hívni. Minden fogadott árváltozást a start() különleges függvény végrehajtása alatt figyelmen kívül fognak hagyni. A start() különleges függvény végrehajtását csak akkor kezdeményezi az ügyfélterminál, ha az előző munkamenet befejeződött, a vezérlés  visszakerült az ügyfélterminálra és a start() különleges függvény egy új tickre vár.

Lehetséges a start()különleges függvény végrehajtását befolyásolni az "Enable/disable Expert Advisors"gombbal. Ha ez a gomb az ügyfélterminálban ki van kapcsolva, tiltja az EA működését, és az ügyfélterminál nem fogja hívni a start() különleges függvényt függetlenül attól, hogy az új tickek jönnek-e, vagy sem. Azonban a gomb kikapcsolása vagy bekapcsolása nincs befolyással a program aktuális végrehajtására (a bekapcsolásakor nem fut le a start() függvény).

A start() különleges függvényt, nem hívja az ügyfélterminál, ha az EA tulajdonságok ablaka nyitva van. Az EA tulajdonságok ablakát csak akkor tudjuk kinyitni mikor a start() különleges függvény egy új tickre vár. Ezt az ablakot nem nyithatjuk ki a start() különleges függvény végrehajtása alatt.

A scriptben a start() különleges függvényt egyszer hívják (és hajtják végre) közvetlenül a program inicializálást elvégző init() különleges függvény lefutása után.

Egyéni indikátorokban a start() különleges függvényt hívják (és végrehajtják) azonnal amint az indiktort hozzácsatolják egy  charthoz, egy új tick érkezésekor, az ablakméret megváltoztatásakor, amikor átkapcsolunk egyik ablakról egy másikra, mikor az ügyfélterminált elindítjuk (ha korábban az indikátort csatoltuk egy charthoz), ha a kereskedett szimbólumot (instrumentum) vagy az idősíkot megváltoztatjuk, függetlenül a tickek érkezésétől.

Minden programtípusban a start() függvényt végrehajtják, amikor egy programot eltávolítanak egy chartról, amikor ablakot és/vagy idősíkot változtatnak, amikor egy számla megváltozik, amikor egy ablak bezáródik, vagy ha az ügyfélterminál befejezi a működését. Ha a start() különleges függvény az ügyfélterminál leállításakor fut, a terminálnak 2.5 másodperc áll rendelkezésére, hogy befejezze a függvény végrehajtását,. Ha a leállítási parancs után a start() különleges függvény a jelezett határidőnél tovább folytatja a működését, azt erőszakosan be fogja fejezni az ügyfélterminál.

A deinit() különleges függvény

A deinit() különleges függvény feladata, hogy a program befejezésekor lefusson (deinicializáció). Ha egy program tartalmazza a deinit() különleges függvény leírását, azt hívni fogják (és végrehajtják) a programleállításnál. Ha egy program nem tartalmazza a deinit() függvényt akkor nem kell műveleteket végrehajtani a programleállításnál.

A deinit() különleges függvényt hívja az ügyfélterminál a terminál leállításnál, amikor egy chart ablakot bezárunk, mikor ablakot és/vagy idősíkot váltunk, a Meta Editorban történt sikeres program újrafordításnál, mikor megváltoznak az inputparaméterek, és mikor egy számlán változás történik.

Expert Advisorokban és scriptekben programleállítás és a deinit() különleges függvény hívása történik amikor egy chart ablakhoz csatolt új program felváltja a előző  ugyanazon típusú programot.

Egyéni indikátorokban a deinit() különleges függvényt nem hajtják végre, amikor egy új indikátort hozzácsatolnak egy charthoz. Több indikátor is tud működni egy ablakban, vagyis egy új indikátor csatolása az ábrához nem követeli meg a működők leállítását és a deinit() függvény hívását.

A deinit() végrehajtási ideje 2.5 másodpercre van korlátozva. Ha a deinit() különleges függvény kódja ennél tovább futna, az ügyfélterminál erőszakosan be fogja fejezni a deinit() különleges függvény végrehajtását és a program működését.

A különleges függvényekkel szembeni követelmények

Az init() és deinit() különleges függvények hiányozhatnak egy programból. A különleges függvények leírásának a sorrendje egy programban közömbös. A különleges függvények a függvényhívások általános szabályai szerint hívhatjók, bárhol is helyezkednek el a programba. 

A különleges függvényeknek lehetnek paramétereik. Mindazonáltal, amikor ezeket a függvényeket hívja az ügyfélterminál, paramétereket nem fog küldeni kívülről, az alapértelmezett értékeket fogja használni.

Az init() és deinit() különleges függvények működését még azelőtt be kell fejezni, mielőtt a start() függvény hívása megtörténik.

A különleges függvények használatának szabályai

A fejlesztők a programozóknak egy nagyon kényelmes eszközt adtak: amikor egy program végrehajtása elkezdődik, az init() függvény fut le, azután a fő munkát a start() függvény segítségével hajtják végre, és mikor egy folyamat befejeződik a deinit() függvényt a programleállítást megelőzően el fogják indítani.

Egy program fő kódját a start() függvénynek kell tartalmaznia. Minden operátort, beépített és felhasználói függvényhívást és minden szükséges számítást ebben a függvényben kell végrehajtani . Ugyanakkor az embernek helyesen kell értelmezni ennek a függvénynek a szokásos szerepét. A felhasználói függvények leírása a különleges függvények leírásán kívül helyezkedik el a programkódban, de ha egy felhasználói függvényt végrehajtásra hívnak a különleges függvény nem fejezi be a működését. Ez azt jelenti, hogy a vezérlést megkapja a felhasználói függvény, de maga a felhasználói függvény azon a különleges függvényen belül működik, amelyik hívta azt. Tehát a programvégrehajtás során a különleges függvény mindig működik (a saját tulajdonságai szerint) és a felhasználói függvények akkor hajtódnak végre mikor a különleges függvények hívják őket.

Ha egy programozó nem akarja használni valamely különleges függvényt, ezt megteheti. Ez esetben az ügyfélterminál nem fogja hívni azt. A teljesen szabályos program tartalmazza a három különleges függvény mindegyikét. Ha egy programban nincs init() vagy deinit() vagy egyik sem az szintén elfogadható.

Ha a különleges függvények közül semelyiket nem használják egy programban, ezt a programot nem fogják végrehajtani. Ügyfélterminál végrehajtásra csak a különleges függvényeket hívhatja. Egyedi függvényeket nem hív az ügyfélterminál. Ezért ha egy program egyáltalán nem tartalmaz különleges függvényeket (és csak egyedi függvényeket tartalmaz), azt végrehajtásra soha nem fogják hívni.

Nem ajánlott az init() függvényből hívni a a start() függvényt vagy kereskedelmi függvényeket végrehajtani az init() függvényből, mert az információkörnyezeti paraméterek  értékei lehet, hogy nem állnak kész (a charttal kapcsolatos információk, piaci árak, stb.).

Programvégrehajtás és a Példák a megvalósításra részek gyakorlati példákat tartalmaznak és segíteni fognak a különleges függvények további tulajdonságainak megismerésében.