Radu MetaTrader a blogja | További ingyenes és hasznos eszközök MetaTraderhez | Kérdésed merült fel? Kérdezz!
MQL4 Könyv tartalomjegyzék | Stratégiák programozása MetaTrader platformra | Fogalomtár | Gyakran Ismételt Kérdések

MQL4 könyv   Az MQL4 alapjai  Adat típusok


Adat típusok


Közismert dolog, hogy csak egyféle dogokat adhatunk össze vagy vonhatunk ki egymásból. Például az almákat hozzá adhatjuk almákhoz, de az almákat nem adhatjuk hozzá négyzetméterekhez vagy a hőmérséklethez. Hasonló korlátozásokat találhatunk a modern algoritmikus nyelvekben.

Miként a valóságos élet tárgyainak vannak bizonyos tulajdonságaik, amik jellemzik őket: a színük (piros, kék, sárga, zöld), az ízük (keserű, savanyú, édes), összegük (másfél, kettő, hét), az MQL4 is használja a különböző típusú adatokat. Miközben adattípusról beszélünk, gondolhatunk az állandó értékének egy fajtájára, egy változó értékre és egy függvény visszatérési értékére (a függvény fogalmát a  Függvények részben tárgyaljuk).

Az MQL4 a következő típusokat különbözteti meg (az állandók értékeit, változók értékeit és a függvény visszatérési értékét):

  • int - egész számok;
  • double - valós számok;
  • bool - Boolean (logikai) értékek;
  • string -string  típusú érték;
  • color - szín érték;
  • datetime - dátum és idő.

Int típus


Az int típus értékei egész számok. Ez a típus olyan értékeket tartalmaz, amelyek a természetes egész számok. A következő értékek például egész számok: a chart-ablakban levő bárok összege (16000 bár), a nyitott és függőben levő megbízások száma (3 megbízás), távolság az aktuális ár, és a megbízás között - pontokban Open Price (15 pont). Az események számának összege szintén csak egész szám lehet. Például a megbízás nyitási kísérletek szám nem lehet másfél, csak egy lehet, kettő vagy három stb.

Az integer típusnak két fajtája van:

  • Decimális érték 0-tól 9-ig számjegyekből állhat, és lehet pozitív vagy negatív: 10, 11, 12, 1, 5,-+379, 25,-+12345,-+1, 2.
  • A hexadecimális érték latin betűkből állhat a-tól f-ig vagy A-tól F-ig és számjegyek 0-tól 9-ig. Ezeknek 0x-el vagy 0X-el kell kezdődniük és pozitív vagy negatív értékeket vehetnek föl: 0x1a7b, 0xff340, 0xAC3 0X2DF23, 0X13AAB, 0X1.

Az int típus értékeinek -2 147 483 647-tól a -+2 147 483 648-ig terjedő tartományon belül kell lenniük. Ha egy állandó vagy egy változó értéke a fenti tartományon túl van, a programművelet eredménye üres érték lesz. Az int típus állandók és változók értékei a számítógép memóriájában 4 byte helyet foglalnak le.

Példa a programban levő int típusú változóra:

 int Art = 10; // Pálda az integer változóra
int B_27 = -1; // Pálda az integer változóra
int Num = 21; // Pálda az integer változóra
int Max = 2147483647; // Pálda az integer változóra
int Min = -2147483648; // Pálda az integer változóra

Double típus


A double típus értéke azok a valós számok, amik tört részt is tartalmaznak.

Erre a típusra minta lehet bármilyen olyan érték aminek rrésze van  : a támaszvonal hajlásszöge, az instrumentum ára, a naponkénti megbízások átlaga.

Néha problémát jelent, hogy amikor a változókat kell a kódba írni, nem mindig tiszta egy programozónak, hogy hová tartozik a változó (int vagy double). Lássunk egy kis példát:

Egy program egy héten belül adott 12 megbízást. Mi annak a változónak a típusa, ami megmutatja a naponkénti megbízások átlagos számát? A válasz nyilvánvaló: A = 12 megbízás / 5 nap. Ez azt jelenti, hogy a változót, aminek A = 2.4 az értéke, double-ként kell  kezelni a programban, mert ennek az értéknek van  tört része. Mi lesz a típusa ugyanannak a változónak, ha a megbízások teljes mennyisége egy hét alatt 10 lesz? Azt gondolnánk, ha a változó értéke 2 (10 megbízás / 5 nap = 2), nincs tört rész, a változó int típus lesz. Azonban ez az érvelés hibás. Egy változó törtrészének az értéke egyetlen nullából is állhat. Fontos, hogy ennek a változónak a típusa a természetéből fakadóan adódik. Ebben az esetben, a változónak szintén double típusúnak kell lennie. A tizedes pontot jelölni kell az állandót rögzítő rekordban: А = 2.0

A valós állandók és változók értékei egy egész számrészből, egy tizedespontból, és egy tört részből állnak. Az értékek pozitívak vagy negatívak lehetnek. Az egész számrész és a tört rész a 0-tól 9-ig terjedő számjegyekből állnak. A tizedes számjegyek száma a tizedespont után elérheti a 15-öt.

Példa:

27.12;  1.0;  2.5001;  765456.0;  198732.07;  0.123456789012345

A double típus értékei-+1.7 * e-308-től 1.7 * e308-ig terjedhetnek. A számítógép memóriában az állandók értékei és a double típus változói 8 byte helyet foglalnak el.

Egy példa a programban használt double típusú változóra:

 double Art = 10.123; // Pálda a valós változóra
double B_27 = -1.0; // Pálda a valós változóra
double Num = 0.5; // Pálda a valós változóra
double MMM = -12.07; // Pálda a valós változóra
double Price_1 = 1.2756; // Pálda a valós változóra

Bool típusú változó


A bool típus értékei Boolean (logikai) értékek, valótlanságot vagy valóságot tartalmaznak.

Azért hogy megismerjük a Boolean típus fogalmát, hozzunk egy egyszerű példát a mindennapi életünkből. Mondjuk, egy tanárnak elemeznie kell a tanulók tankönyveinek a meglétét. Ebben az esetben a tanár fel fog sorolni minden tanulót egy  papírlapon, azután fel fogja jegyezni egy sorban azt, hogy egy tanulónak van-e egy bizonyos tankönyve, vagy nincs. Például a tanár pipa jeleket és kötőjeleket használhat a táblázatban:

A tanulók listája Fizika tankönyv Biológia tankönyv Kémia tankönyv
1 Smith V - -
2 Jones V - V
3 Brown - V V
... ... ... ... ...
25 Thompson V V V

Az oszlopokban csak 2 helyes érték lehet: igaz vagy hamis. Ezeket az értékek nem tartoznak a fenti típusok közül egyikbe sem, mert ezek nem számok. Ezek nem szín értékek, ízek, összegek, stb. azonban fontos jelentésük van. Az MQL4-ben az ilyen értékeket booleanoknak, vagy logikai, értékeknek elnevezzük. A bool  típusú állandókat és változókat csak 2 lehetséges értékkel jellemezhetünk: igaz (True, TRUE, 1) vagy hamis (False, FALSE, 0). A bool típusú állandók és változók értékei számítógép memóriába 4 byte helyet foglalnak.

Egy példa egy programban levő bool típusú változóra:

 bool aa = True; // Boolean változó аа értéke igaz
bool B17 = TRUE; // Boolean változó B17 értéke igaz
 bool Hamma = 1; // Boolean változó Hamma értéke igaz

bool Asd = False; // Boolean változó Asd értéke hamis
bool Nol = FALSE; // Boolean változó Nol értéke hamis
bool Prim = 0; // Boolean változó Prim értéke hamis

String típus


Mindennapi életünkben hasonló, amikor például neveket, autótípusokat stb. tárolunk. A string típus értéke egy karaktersorozat, amit kettős idézőjelek közé zártak, (nem szabad összekeverni a kettős és egyszeres idézőjeleket!). Az idézőjeleket csak arra használjuk, hogy jelöljük egy string állandó kezdetét és végét. Maga az érték a karaktereknek az összessége, amiket az idézőjelek kereteznek.

Ha egy dupla idézőjelet (”) kell elhelyezni a stringben, akkor egy fordított perjelet (\) kell elé írni. Bármilyen speciális karaktert a fordított perjel (\) után elhelyezhetünk a stringben. Egy stringállandó hossza 0-tól 255 karakterig terjedhet. Ha egy stringállandó hossza felülmúlja a lehetséges maximumát, a többlet karaktereket a jobb oldalon meg fogja csonkítani a szerkesztő és figyelmeztetést fog adni. A fordított perjel (\) és egy karakter kombinációját, melyek közül az első a fordított perjel (\) általában elfogadja, és arra irányuló utasításként értelmezi a legtöbb program, hogy egy bizonyos szövegformázást végrehajtson. Ezt a kombinációt nem mutatják a szövegben. Például  a \n kombinációja egy soremelést jelez; \t tabulálást kér, stb.

A string típus értéke az a karaktersorozat, amit dupla idézőjelek kereteznek: "MetaTrader MetaTrader 4", " Stop Loss", "Ssssstop_Loss", "stoploss", "10 pips". A string értéke karakterekből áll. Az idézőjeleket csak arra használják, hogy megjelöljék a határait. A belső ábrázolása 8 byte méretű.

Példa egy programban levő string típusú változókra:

 string Prefix = "MetaTrader 4";  // Példa a string változóra
string Postfix = "_of_my_progr. OK"; // Példa a string változóra
string Name_Mass = "History"; // Példa a string változóra
string text ="Upper Line \n Lower Line"; // A szöveg soremelés utasítást tartalmaz

Szín típus


A színtípus értéke egy kromatikus érték.

A szín jelentése (kék, piros, fehér, sárga, zöld, stb.) egy közismert dolog. Könnyű elképzelni, hogy egy változó vagy a szín típus egy állandója mit jelenthet. Ez egy állandó vagy egy változó, az az érték, ami egy szín. Ez úgy tűnhet, hogy kicsit szokatlan, de ez valójában nagyon egyszerű. Ahogy egy egész számállandó értéke egy szám, úgy egy színállandó értéke egy szín.

A színállandók és változók értékeit három féle képpen tüntethetjük fel:

  • Konstans

A színtípusnak az értéke, amit konstansként tüntetünk fel, három részből áll, ami  a három alapszín intenzitásának a számszerű értékét képviseli: piros, zöld és kék (RGB). Ennek a fajtának az értéke ’C’-vel kezdődik, és egyszeres idézőjelek határolják.

A 0-255 terjedő RGB szín intenzitás számszerű értékei is fel lehet venni decimális és hexadecimális alakban.

Példák: C'128,128,128' (szürke), C'0x00,0x00,0xFF' (kék), C'0xFF,0x33,0x00' (piros).

  • Egész szám ábrázolás

Az egész szám ábrázolást hexadecimális vagy decimális formában használjuk. Egy hexadecimális számot 0xRRGGBB formában alkalmazunk hol RR a piros intenzitás értéke, GG a zöldé és BB a kéké. A decimális ábrázolás közvetlenül nem tükrözi vissza az RGB szín értékeket. Csupán a hexadecimális számábrázolás tízes értékét képviselik.

A színtípus értékeinek az ábrázolása egész számokként és hexadecimális konstansként nagyon felhasználóbarát. A modern szöveg és grafikai szerkesztők többsége a kiválasztott szín piros, zöld és kék összetevők intenzitásával kapcsolatos információt nyújt. Megteheted, hogy kiválasztasz egy színt a szerkesztődben és kimásolod az értéket, ami a megfelelő színt leírja, és ezt az értéket illeszted be a kódodban.

 

Példák: 0 xFFFFFF (fehér), 0x008000 (zöld), 16777215 (fehér), 32768 (zöld).


    11. ábra. A konstans és az egész számmal ábrázolt színparaméterek a modern szerkesztőkből átvehetők


  • Színnevek

A legkönnyebb módja annak, hogy beállítsunk egy színt, az, hogy a webes színek táblázata szerint megadjuk a nevét. Ebben az esetben egy szín értékét egy szóval jelezzük a szín angol nevével, például: Red - a piros szín.

    Black DarkGreen DarkSlateGray Olive Green Teal Navy Purple
    Maroon Indigo MidnightBlue DarkBlue DarkOliveGreen SaddleBrown ForestGreen OliveDrab
    SeaGreen DarkGoldenrod DarkSlateBlue Sienna MediumBlue Brown DarkTurquoise DimGray
    LightSeaGreen DarkViolet FireBrick MediumVioletRed MediumSeaGreen Chocolate Crimson SteelBlue
    Goldenrod MediumSpringGreen LawnGreen CadetBlue DarkOrchid YellowGreen LimeGreen OrangeRed
    DarkOrange Orange Gold Yellow Chartreuse Lime SpringGreen Aqua
    DeepSkyBlue Blue Magenta Red Gray SlateGray Peru BlueViolet
    LightSlateGray DeepPink MediumTurquoise DodgerBlue Turquoise RoyalBlue SlateBlue DarkKhaki
    IndianRed MediumOrchid GreenYellow MediumAquamarine DarkSeaGreen Tomato RosyBrown Orchid
    MediumPurple PaleVioletRed Coral CornflowerBlue DarkGray SandyBrown MediumSlateBlue Tan
    DarkSalmon BurlyWood HotPink Salmon Violet LightCoral SkyBlue LightSalmon
    Plum Khaki LightGreen Aquamarine Silver LightSkyBlue LightSteelBlue LightBlue
    PaleGreen Thistle PowderBlue PaleGoldenrod PaleTurquoise LightGray Wheat NavajoWhite
    Moccasin LightPink Gainsboro PeachPuff Pink Bisque LightGoldenrod BlanchedAlmond
    LemonChiffon Beige AntiqueWhite PapayaWhip Cornsilk LightYellow LightCyan Linen
    Lavender MistyRose OldLace WhiteSmoke Seashell Ivory Honeydew AliceBlue
    LavenderBlush MintCream Snow White




A színtípusú állandók és a változók a számítógép memóriába 4 byte helyet foglalnak el. Példa a szín típus alkalmazására egy programban:

color Paint_1 = C'128,128,128'; // A szín változó értéke szürke
color Colo = C'0x00,0x00,0xFF'; // A szín változó értéke kék
color BMP_4 = C'0xFF,0x33,0x00' // A szín változó értéke piros

color K_12 = 0xFF3300; // A szín változó értéke piros
color N_3 = 0x008000; // A szín változó értéke zöld
color Color = 16777215; // A szín változó értéke fehér
color Alfa = 32768; // A szín változó értéke zöld

color A = Red; // A szín változó értéke piros
color B = Yellow; // A szín változó értéke sárga
color Colorit = Black; // A szín változó értéke fekete
color B_21 = White; // A szín változó értéke fehér

Datetime típusú változó


A datetime típus értéke a dátum és idő értéke.

Ennek a típusnak az értékeit a programokban arra használhatjuk, hogy elemezzük az események kezdetét és az  események végződését, például a fontos hírek kibocsátását, munkanapkezdést/befejezést, stb. A dátum és idő állandót úgy tüntethetjük fel, hogy az 6 részből tevődik össze: az év számszerű értéke, hónap, nap (vagy nap, hónap, év), óra, perc, és másodperc.

Ez a típusú állandó ’D’- vel kezdődik, és egyszeres idézőjelek keretezik. Megengedett megcsonkított értékeket használni: dátum nélkülit vagy idő nélkülit, vagy csak egy üres értéket. Értéke 1970. január 1-jétől 2037. december 31-éig terjed. A datetime típusú állandók és változók értékei a számítógép memóriába 4 byte-ot foglalnak el. Ez az érték az 1970. január 1-je 00:00-tól eltelt másodpercek száma.

Egy példa a programban használható datetime típusú változókra:

datetime Alfa = D'2004.01.01 00:00'; // New Year
datetime Tim = D'01.01.2004'; // New Year
datetime Tims = D'2005.05.12 16:30:45'; // May 12, 2005 4:30:45 p.m.
datetime N_3 = D'12.05.2005 16:30:45'; // May 12, 2005 4:30:45 p.m.
datetime Compile = D''; // a jelenlegi ídő[a program lefordításának időpontja]

Változó deklarációja és inicializálás


Azért, hogy ne legyen kérdéses, hogy ez vagy az a változó milyen adattípushoz tartozik, szükségszerű hogy az MQL4 részletezze a változók fajtáit, a program legelején. Mielőtt egy változó részt vesz bármilyen számításban, azt deklarálni kell.

A változó deklarációja a változó első említése a programban. Egy változó deklarációjánál a változó típusát meg kell adni.

A változó inicializációja hozzárendel egy olyan  kezdeti értéket a változóhoz, amely érték típusa megegyezik a változó deklarált típusával. Minden változót inicializálhatunk. Ha a kezdőértéket nem állítjuk be, egy számszerű változót inicializált értéke nulla (0) és egy string változó inicializált értéke egy üres sor.

Az MQL4 megköveteli, hogy a változók típusát megadjuk a deklarációjuknál. Egy változó típusát deklarálják  a változó nevének az első említésekor. A változó típusát a későbbiekben már nem kell megadni. A program végrehajtása során a változó értéke változhat, de a típusa és neve változatlanok maradnak. Egy változó típusát egyetlen sorban vagy operátorokkal is deklarálhatják.

Egy változót deklarálhatunk egy sorban:

 int Var_1; // Változó deklaráció egy sorban

Ez a rekord azt jelenti, hogy lesz egy Var_1 változó és ennek a változónak a típusa int lesz az adott programban.

Egy sorban több ugyanolyan típusú változót is deklarálhatunk:

 int Var_1, Box, Comm;  // Több változó deklarációja egy sorban

Ez a rekord azt jelenti, hogy a programban lesz Var_1, Box és Comm, változó és mindegyik int típus. Ez azt jelenti, hogy a változókat, amiket fent felsoroltak, egész szám típusú változóként fogja kezelni a program.

Változókat inicializálhatnak az operátorokkal:

 double Var_5 = 3.7; // Változó inicializációja értékadó operátorral

Ez a rekord azt jelenti, hogy a programban lesz egy Var_5 nevű double típusú változó, aminek a kezdőértéke 3.7.

A változó típusát később a programban már nem kell megadni. A későbbiekben minden alkalommal, amikor a program a változóval hajt végre műveletet, „emlékszik” a változó típusára, amit a deklarációkor adtunk a változónak. A program végrehajtása alatt a változók értékei változhatnak, de a típusuk változatlan marad.

Egy változó nevének nincs kapcsolata a típusával, vagyis, nem tudod megítélni egy változó típusát a neve alapján. Egy nevet, amit egy változónak adtunk, más programokban használhatjuk bármilyen típusú változókra. Azonban bármilyen változó típusát egy programon belül csak egyszer lehet deklarálni. A változó deklarált típusát nem lehet megváltoztatni a program végrehajtása alatt.

Példák változó deklarációjára és inicializálásra


A változókat deklarálni lehet több sorban vagy egyetlen sorban.

Megengedett több azonos típusú változót deklarálni egyidejűleg. Ebben az esetben változókat vesszőkkel választják el, és a sor végét egy pontosvessző zárja.



12. ábra. Példa a változók deklarációjára.


A változó típusát csak egyszer deklaráljuk, amikor először említjük a változót a programban. A típust nem kell a későbbiekben megadni.



13. ábra. Példa a változók deklarációjára.


Lehetséges, hogy operátorokkal deklaráljuk és inicializáljuk a változókat.


14. ábra. Példa változók inicializálására.



15. ábra. Változó inicializálás egy összetett operátor fejlécében.