Proměnné

Co je to proměnná a jakou má v programu funkci? Jak proměnnou vytvořím? Jak jí přidělím hodnotu? Na jaké typy lze proměnné dělit?

Práci s proměnnými se rozhodně nevyhneme v žádném programu. Proměnná působí jako držitel určité hodnoty, kterou jí přiřadíme. Hodnota proměnné je uložena v paměti počítače, dokud není zase jinou operací změněna. Pomocí proměnných může program uchovávat a prezentovat informace v různých formách. Budete však využívat i proměnné pomocné, se kterými se bude operovat pouze v rámci kódu, takže jejich použití nebude uživateli navenek nikterak znát. Možná z těchto definic nejste zrovna moudří, ale z praktických příkladů vám bude brzy jasné, o co se jedná. Proměnné se dělí podle různých kritérií, ale nejdříve si řekneme, jak takovou proměnnou „vyrobit“, aby to počítač pochopil, a jak jí přidělit hodnotu.

Deklarace

Zavedení proměnné do programu se říká deklarace. Je to jednoduché, pro zavedení stačí znát její název a typ data, který do ní hodláme uložit. O typech dat jsme pojednávali v minulém díle. Zavedení provedeme zápisem identifikátoru datového typu a poté názvu proměnné. Název může obsahovat pouze znaky anglické abecedy, nelze používat speciální znaky včetně například tečky. Jelikož deklarace je operací, na konec je potřeba napsat středník. Proč tomu tak je se dozvíte v dalším díle věnovaném operacím. Zavedení proměnné s názvem „Vyzva“, která má obsahovat celočíselné hodnoty, bude tedy v kódu vypadat takto:

int Vyzva;

Proměnných stejného typu můžeme deklarovat i více najednou, stačí jejich názvy oddělit čárkou:

double Zisk,Ztrata,Prum_zisk,Prum_ztrata,Celk_Profit,Podil;

Takto jsme deklarovali šest proměnných, do kterých plánujeme uložit desetinná čísla. Pokud by některé proměnné byly jiného typu, musíme je deklarovat zvlášť. První přiřazení hodnoty proměnné se nazývá inicializace.

Inicializace

Inicializace, tedy první přiřazení hodnoty proměnné se provede jednoduše přiřazovací operací, ve které bude figurovat symbol =. Možností je celá řada. Inicializace může být provedena přímým přiřazením:

Ucet = 250000;

Nebo výsledkem rovnice, ve které figurují jiné proměnné:

A = B + C;

Nebo třeba výsledkem funkce či kombinace funkcí:

Dnes = TimeToString(TimeCurrent(),TIME_DATE);

Takto jsme například do proměnné Dnes vložili aktuální datum serveru brokera převedené na text. Proměnná Dnes však musela být deklarována jako typ řetězec, tedy string. Opět nezapomeňte na středník na konci.

Deklaraci a inicializaci lze sloučit do jediné operace na jednom řádku, například takto:

int A = 3;

color Zluta = Yellow, Limetkova = Lime;

Na předchozích dvou řádcích jsme zavedli celočíselnou proměnnou A o hodnotě 3 a barvy Zluta o hodnotě Yellow a Limetkova o hodnotě Lime.

Vlastní vs. předdefinované proměnné

Výše jsme si ukázali tvorbu a práci s vlastními proměnnými. V rámci MQL však existuje i několik proměnných předdefinovaných, které nemusíme deklarovat ani inicializovat. Pokud je v kódu použijeme, vybarví se nám růžově a automaticky v sobě obsahují příslušnou hodnotu. Tyto proměnné v sobě obsahují specifická data o trhu, grafu, na kterém program běží, a o dalších vlastnostech terminálu. Níže naleznete tabulku s těmito proměnnými a hodnotami, které v sobě obsahují. Některé pravděpodobně nikdy nepoužijete, jiné se používají téměř v každém programu.

Proměnná Hodnota
_Digits Počet desetinných míst ceny trhu, na kterém program běží
_Point Velikost bodu trhu, na kterém program běží
_LastError Kód poslední chyby
_Period Časový rámec grafu, na kterém program běží
_RandomSeed Stav generátoru pseudonáhodných čísel
_StopFlag Program stop flag
_Symbol Název symbolu, na kterém program běží
_UninitReason Důvod deinicializace
Ask Poslední známá cena Ask trhu, na kterém program běží
Bars Počet úseček grafu, na kterém program běží
Bid Poslední známá cena Bid trhu, na kterém program běží
Close[] Proměnná typu pole obsahující zavírací ceny všech svíček na grafu
Digits viz _Digits
High[] Proměnná typu pole obsahující nejvyšší ceny všech svíček na grafu
Low[] Proměnná typu pole obsahující nejnižší ceny všech svíček na grafu
Open[] Proměnná typu pole obsahující otevírací ceny všech svíček na grafu
Point viz _Point
Time[] Proměnná typu pole obsahující časy otevření všech svíček na grafu
Volume[] Proměnná typu pole obsahující objemy všech svíček na grafu

Po kliknutí na název proměnné se dostanete na její podrobný popis na stránkách mql.com (v angličtině).

Možná jste se pozastavili nad proměnnými typu pole a hledali je v tomto díle. To je však natolik rozsáhlá a důležitá kapitola, že jí bude věnován celý další díl. Nyní ještě krátce k rozdělení proměnných na globální a lokální.

Globální vs. lokální proměnné

Zda je daná proměnná globální nebo lokální závisí na tom, ve které části programu je deklarována. Je-li proměnná deklarována v hlavičce kódu mimo těla veškerých funkcí (o struktuře programu jste četli ve čtvrtém díle), jedná se o proměnnou globální. Taková proměnná je k dispozici všem funkcím programu – hlavním i uživatelským. Jinými slovy, lze ji použít se stejným názvem i aktuální hodnotou ve všech částech programu. Tento typ globální proměnné se ale nesmi zaměňovat s globálními proměnnými dostupné dokonce pro celý terminál a všechny jeho další programy. S těmi se pracuje pomocí sady funkcí. O tomto zvláštním typu proměnných referuje samostatný článek.

Naopak lokální proměnná je každá proměnná, která je definována uvnitř některé funkce. Ta je potom k dispozici pouze pro tuto funkci. Pokud ji použijeme v jiné funkci, nebude rozpoznána, respektive kompilátor to označí za chybu a donutí vás ji opravit. V této jiné funkci může být klidně zavedena proměnná se stejným názvem, ale její hodnota se bude odvíjet pouze od operací v této funkci. Pokud potřebujete převést hodnotu nějaké proměnné z jedné funkce do jiné, lze to provést pomocí parametrů volání funkce. O nich ale až v díle o funkcích.

Jak bylo řečeno výše, v dalším díle problematiku proměnných ještě rozšíříme o proměnné typu pole, které se používají u tolik důležitých předdefinovaných proměnných jako Open, High, Low, Close, Time a Volume.