Típusú változók - változók - bemutató MQL4 - tankönyv MQL4

Egy alkalmazási program MQL4 tartalmazhat több tíz vagy több száz változó. Egy nagyon fontos tulajdonság bármely változó az a képesség, hogy használja a programot annak értékét. Korlátozása ilyen lehetőséget közvetlenül kapcsolódik a hatálya változók.

Változó hatálya - egy hely a programban, ahol a változó áll rendelkezésre. Minden változó annak hatálya alá. Szerint a körét, MQL4 kétféle változók: lokális és globális.

A helyi és globális változók

Helyi változó - a változó deklarált egy függvényen belül. Hatálya lokális változók a szervezet a funkció, amelyben a változó nyilvánították. A lokális változó is inicializálható állandó vagy expressziós megfelelő annak típusát.

Globális változó - változó deklarált kívül minden funkció. Hatálya globális változók az egész programot. A globális változó nem lokalizálódik semmilyen szinten. Egy globális változó lehet inicializálni csak egy megfelelő állandó (de nem a kifejezés). A globális változók kezdeti csak egyszer végrehajtása előtt speciális funkciók.

Ha az ellenőrzési program egy függvényen belül, az értékek a helyi változók deklarált egyéb funkciók nem állnak rendelkezésre. Az érték minden globális változó áll rendelkezésre, és minden speciális egyedi funkcióval. Tekintsünk egy egyszerű példát.

Probléma 22. Készítsen programot, amely számít a kullancsokat.

Algoritmusok problémák megoldása 22 egy globális változó (countticks.mq4).

Ez a program csak az egyiket használja globális változó Tick. Ez a globális mert bejelentett kívül függvénydefiníciót start (). Ez azt jelenti, hogy kullancs kullancs változó értékeit tárolni fogják. Tekintsük a részleteket a program végrehajtásához.

A különleges funkciók figyelembe vettük azokat a feltételeket, amelyek futnak a végrehajtás speciális funkciókat. Nézzük röviden felidézni, hogy a különleges start () függvény az Expert Advisors kezdte az ügyfélterminál, amikor egy új tick jövedelmek. Abban az időben a szakértő mellékletet egy biztonsági ablak, a következő események:

2. Ellenőrzési tartják a kliens végberendezés bevételt teak.

3. Fogadott: kullancs. Vezérlés átkerül a különleges start () függvény.

3.1. Ennek része a végrehajtás a különleges start () függvény, a vezérlés az üzemeltető:

Ennek eredményeként az üzemeltető végrehajtás Tick értéke növekszik 1 (teljes egység).

3.2. Vezérlés átkerül az üzemeltető:

Végrehajtása a standard függvény Comment () megjelenik a figyelmeztetés:

Lépett kullancs № 1

3.3. Vezérlés átkerül az üzemeltető:

Ennek eredményeként a végrehajtás start () befejezi a munkát, a vezérlés az ügyfélterminálhoz. A globális változó továbbra is létezik, értéke lehet 1.

További események fogják ismételni a 2. lépéstől kezdve a változó Tick ismét részt vesz a számítás, de a második kullancs, amikor fut a végrehajtás a start () függvény, értéke 1, így az eredmény a operátor végrehajtása:

lesz az új érték a változó Tick - növeli 1-gyel és most egyenlő a 2. és végrehajtása Comment () függvény megmutatja a riasztást:

Lépett kullancs № 2

Így a változó Tick növekszik 1 minden egyes bekapcsolásakor a speciális funkció elindításához (), azaz minden kullancs. A megoldás az ilyen problémák csak akkor lehetséges, abban az esetben a változók használatára, hogy megtartják az értékeiket való kilépés után a függvény (ebben az esetben, a globális változót használjuk). Használt ugyanerre a célra lokális változók értelmetlen: a helyi változó elveszíti az értékét, miután a függvény végrehajtása, amelyben megállapították.

Ez nagyon egyszerű, hogy elindítunk egy Expert Advisor, amelyben a változó Tick kinyílik, mint egy helyi változó (azaz a program tartalmaz egy algoritmikus hiba):

Ami a szintaktikai hibák a rend. Ez a program is sikeresen össze, és elindította a végrehajtás. És ez működni fog, de minden alkalommal elmondja ugyanazt az eredményt:

Lépett kullancs № 1

És ez teljesen természetes, mert a változó Tick indítja nullára elején a különleges start () függvény minden alkalommal, amikor elindul. A további növekedés egyik vezet csak az a tény, hogy abban a pillanatban a riasztási Tick érték mindig 1-gyel egyenlő.

statikus változók

Az alábbiakban egy feladat megoldását 22 egy statikus változót (staticvar.mq4 szakértő):

Statikus változók kezdeti csak egyszer. Az egyes statikus változót lehet inicializálni egy megfelelő állandó (szemben egy egyszerű lokális változó, amely lehet inicializálni bármilyen expressziós). Ha nincs explicit inicializálás, a statikus változó zéró kezdeti értékre. A statikus változók tárolása egy állandó memóriában, értéküket nem veszik el a függvény kilép. A statikus változók vannak korlátai tipikus helyi változók - tartomány láthatósága változatlan marad változó funkció, amelyen belül a változó deklarált, szemben a globális változók, amelyek értéke elérhető bármilyen program. Könnyen belátható, hogy a programok countticks.mq4 és staticvar.mq4 ugyanazt az eredményt adja.

Minden tömbök kezdetben statikus, vagyis van egyfajta statikus, akkor is, ha az inicializálás nem kifejezetten (lásd. tömbök).

külső változók

Külső változókat a programban meghatározott fejrész, vagyis mielőtt bármilyen funkciót, amelyben van egy külső függvényhívás. A külső változók nagyon kényelmes, ha időről-időre meg kell futtatni a programot futtatni a különböző változók értékét.

Probléma 23. Alkoss egy olyan programot, ahol a következő feltételek teljesülése esetén lehetséges: Ha az ár elér egy bizonyos szint, és lement a megadott szint alá n pontot, majd egyszer jelentést az a tény, hogy a kereskedőnek.

Egyértelmű, hogy a probléma igényli a beállítások módosítása, mert ma az árak nem ugyanaz tegnap, és holnap nem lesz, amit ők ma. Ahhoz, hogy változtatni a beállításokat a szakértő externvar.mq4 használt külső változók:

Ebben a programban, a külső változók meghatározott sorok:

Az értékek a külső változók állnak a program tulajdonságai ablak. Az érték ezeket a változókat az, hogy meg lehet változtatni bármikor - és a szakaszában a programban való részvételhez a biztonsági ablakban és a program során.

Típusú változók - változók - bemutató MQL4 - tankönyv MQL4

Ábra. 54. A tulajdonságok ablak a program; Itt lehet megváltoztatni a változók értékei.

Abban az időben a programban való részvételhez a felépítést, a változók értékét fogja meghatározni a Beállítások ablakban, ahogy azt a programkódot. A felhasználó saját belátása szerint módosíthatja ezeket az értékeket. Attól a pillanattól kezdve, amikor a felhasználó rákattint az OK gombra a Beállítások panel, a program elindul az ügyfélterminál. Ebben az esetben a kezdeti értékek a külső változók lesznek, mint azok a felhasználó által megadott. A program során az e változók értékeit meg lehet változtatni a program futása.

Ha a felhasználó meg kell változtatni az értékeket a külső változók a program során, meg kell nyitni a beállítások ablakot, és a változtatásokat. Fontos megjegyezni, hogy a program tulajdonságai eszköztár csak akkor jelenik meg az időszakban, amikor a program (Expert Advisor vagy indikátor) vár egy új tick, azaz sem a speciális funkciók nem kerül végrehajtásra. Ideje alatt a program végrehajtása tollbar nem lehet. Ezért, ha a program célja olyan módon, hogy a hosszú ideig (néhány másodpercig vagy tíz másodperc), a felhasználó nehézségekbe ütközik az a program tulajdonságai ablak. Az értékek a külső változók a szkript csak abban az időben a csatlakozás szimbóluma ablakon, de a folyamatot nem lehet megváltoztatni. Ha a program tulajdonságai ablak nyitva van, a szakértő nem működik - a vezetés birtokában az ügyfélterminál és továbbítja a program futtatásához konkrét feladatokat.

Felhívjuk figyelmét, amikor egy EA tulajdonságok ablakban, a felhasználó úgy dönt, azokra az értékekre, a külső változók, szakértő (vagy mutató) nem működik. Az itt megadott értékek a külső változók és az OK gombra kattintva programozható a beállítások panel, a felhasználó újra működni kezd.

Ebben az esetben az ügyfél terminál elkezdi egymás teljesítményét speciális funkció deinit (), majd a speciális init () függvény, majd azt követően az átvétel időpontjában egy új tick, elkezdi végrehajtani a különleges start () függvény. A teljesítmény deinit () függvény, a végleges program, külső változók lesz a kapott értékeket az előző ülésen, azaz azok, akik velük, mielőtt megkezdik a szakértői beállításokat. Végrehajtása előtt a különleges init () függvény külső változók lesz az értékeket, amelyeket a felhasználó a beállítások eszköztár és gyakorlása a init () függvény külső változók lesz az új értékeket a felhasználó által beállított. Így az új értékek a külső változók lépnek hatályba napjától az új ülésszak (init - start - deinit) a szakértői munka, kezdve az init () végrehajtása.

megkezdik a szakértői beállítások ablakban tény globális változók nem érinti. Teljes időtartama alatt, az ablak nyitva van, és a lezárás után, a globális változók megőrzik értéküket, a rendelkezésre álló megelőző időpontban az eszköztár megnyitása.

A program externvar.mq4 használt két globális és lokális változót.

Algoritmikusan probléma megoldása a következő. Amely a két esemény: az első - az a tény szint elérése, a második - az a tény, hogy az üzenet (a kisebb szintű n pont) már kiadták. Ezek a fejlemények tükröződnek a változók értékei és Fact_1 Fact_2: ha az esemény nem történt meg, akkor az adott változó értéke hamis, és ha ez megtörtént - igaz. sorok:

által meghatározott tény, hogy az első esemény. Normál NormalizeDouble () funkció lehetővé teszi, hogy értékeit számítjuk reálváltozók egy adott pontosságú (pontosság megfelelő pénzügyi instrumentum ára). Ha az ár megegyezik vagy meghaladja az előre meghatározott szintet, az a tény, hogy az első esemény akkor tekinthető úgy valósítható meg, azonban Fact_1 globális változó értéke igaz. A program célja, hogy a változó Fact_1 kapott egy nap az igazi érték, soha nem változik meg a hazugság - erre a célra a program nincs megfelelő kódot.

Megállapítja, hogy szükség van üzenetet ad. Ha az első esemény már megtörtént, és az ára csökkent n pontot (kisebb vagy egyenlő) egy előre meghatározott szintet, meg kell adni egy üzenetet - egy hívás van a végrehajtás a felhasználó My_Alert () függvényt. A felhasználó által definiált függvény a figyelmeztetés után az a tény, hogy az üzenet már kiadott, értékét hozzárendeljük egy globális változó Fact_2 igaz. Ezt követően a felhasználó megszakítja a funkciót, és azt követően a különleges start () függvény.

Miután Fact_2 változó értéke igaz, akkor a program minden alkalommal befejezi működését, így az üzenet, ha készen van, soha többé a munkamenet során a program nem kell megismételni:

Szemléltető ez a program, hogy az értékek a globális változók lehet módosítani minden olyan helyen (és a speciális funkciót, és a felhasználó) és a tárolt a teljes időszak alatt a program - között kullancsok, miután változó értékek a külső változók, vagy annak eredményeként a kapcsolási időkeret .

Általában, az értékek globális változók lehet változtatni bármelyik különleges funkciót. Ezért kell legyen különösen óvatos, jelezve, hogy a piaci szereplők értékek megváltoztatásához a globális változók a init () függvény és deinit (). Például, ha a funkciók init () visszaállításához az érték egy globális változó, az értéke a változó start () függvény az első kiviteli alakban nulla lesz, azaz a A változó értékeit alatt éri el az előző futtatás start (), elvész (vagyis a változást követően a külső program beállítások).