Typy dat

Proč je potřeba rozlišovat data dle jejich typu? Jaké typy dat existují a k čemu se hodí? Jak s daty pracuje počítač?

Každý program musí zpracovávat určitá data. Ne všechna jsou však vzájemně srozumitelná. Budeme používat čísel, textů, mnohdy třeba také barev nebo výčtů a s těmito daty budeme provádět různé operace – aritmetické jako sčítání, násobení apod., přiřazovací (proměnným budeme přiřazovat hodnoty), porovnávací a další. Tyto operace však můžeme provádět pouze s daty stejného typu. Jinými slovy zkrátka nemůžeme míchat jablka a hrušky dohromady. K číslu nelze přičítat text a barvu těžko porovnáme s datem. Proto je potřeba striktně rozlišovat, s jakým typem dat pracujeme.

Abychom počítači sdělili, s jakým typem dat u konkrétní proměnné nebo funkce pracujeme, používáme v kódu tzv. identifikátory typů dat. Tyto identifikátory vkládáme před proměnnou či funkci při jejím zavedení. O zavádění neboli deklaraci proměnných a o funkcích se dočtete v následujících dílech.

Data se v kódu dají dělit do typů uvedených v následující tabulce. Uvedeny jsou jen základní typy, které bohatě stačí pro tvorbu běžných programů. Existují ještě odvozené typy, které však mají většinou jen funkci šetření paměti počítače nebo naopak umožňují vložit extrémní hodnoty. O nich se můžete anglicky dočíst na stránce http://docs.mql4.com/basis/types nebo v našem článku mimo základní sérii.

Identifikátor Anglicky Česky
int integer celé číslo
bool logical pravda/nepravda
string string řetězec
double floating-point number desetinné číslo
color color barva
datetime date and time datum a čas
enum enumeration výčet

Není bez zajímavosti, že program při svých výpočtech používá pouze tři typy z těchto všech, a to celá a desetinná čísla a řetězce. Rozdíl od ostatních typů je pouze ve velikosti paměti, kterou počítač pro danou hodnotu alokuje, a ve formě, jakou jsou data prezentována uživateli. V čem to vězí se dočtete na následujících řádcích.

Celá čísla (int)

Tento typ dat se hodí pro proměnné a funkce, které ze své podstaty mohou nabývat jen celých čísel. Může jít třeba o počet pozic, počet svíček v grafu, rozdíl mezi cenami v pipech a podobně. Hodnota proměnné tohoto typu je omezena číslem 2 147 483 647 v kladném i záporném spektru. Pokud bychom potřebovali vyšší číslo, je potřeba použít odvozeného datového typu, jako třeba uint nebo long. Příklad zavedení celočíselné proměnné a přiřazení konkrétní hodnoty ukazuje následující řádek.

int Cislo = 5;

Hodnoty typu Bool (bool)

Logická hodnota neboli Bool hodnota je datový typ reprezentovaný jednou z hodnot PRAVDA, nebo NEPRAVDA. V kódu lze zapsat jako true a false nebo jako 1 a 0. Z toho plyne, že i tento typ bere počítač jako celé číslo.

bool Chyba = true;

bool Chyba = 1;

Řetězec (string)

Typ řetězec používáme pro data, do kterých chceme vložit texty neboli řetězce jakýchkoliv znaků. Začátek a konec řetězce musí vždy ohraničovat uvozovky.

string Reklama = „Zdolejte Výzvu a spravujte 250 000 CZK obchodního kapitálu“;

Desetinné číslo (double)

Desetinné číslo použijeme samozřejmě tam, kde hodnota není ze své podstaty celočíselná, ale může nabývat i desetinných míst (až 15).

double Des_cislo = 15.958645;

double Prum_zisk = Celkovy_profit/Pocet_dni;

Barva (color)

Pokud danou proměnnou nebo funkci určíme jako typ barva, hodnota, kterou do ní uložíme, bude počítačem pochopena jako kód konkrétní barvy dle své interní palety barev. Máme tři možnosti, jak mu říci, kterou barvu chceme. Nejjednodušší možnost je napsat ji slovy. Název barvy však musí být jednou z webových barev, které je MQL schopno rozeznat, jejich tabulku i s názvy najdete na adrese http://docs.mql4.com/constants/objectconstants/webcolors.

color Cervena = Red;

Další možností je celočíselný zápis. Na webu se obvykle používá ve formě takzvaného hexadecimálního kódu. Hexadecimální kód konkrétní barvy vám vrátí každý jednodušší textový nebo grafický editor. Kód vychází z hodnot RGB, tedy z podílu červené, zelené a modré ve tvaru 0xRRGGBB.

color Bila = 0xFFFFFF;

Použít můžeme i stejnou hodnotu převedenou do desítkové soustavy.

color Zelena = 32768;

Možností, jak zadat kód barvy, je více, osobně je však považuji za méně praktické, proto vás zde odkážu na příslušné stránky http://book.mql4.com/basics/types#13.

Datum a čas (datetime)

Tento typ dat slouží pochopitelně k zápisu data a případně ještě času. Zápis konkrétního data bude vždy začínat identifikátorem D´ a následně kódem data a času. Přijímán je jak formát rrrr.mm.dd tak dd.mm.rrrr, na který jsme zvyklí z našich zeměpisných šířek. Vteřiny, minuty a hodiny jsou dobrovolné. Pokud však bude chybět den, měsíc či rok, kompilátor nás upozorní na chybu.

datetime Silvestr1 = D’2017.31.12 23:59:59′;

datetime Silvestr2 = D’31.12.2017′;

I v tomto případě se pro potřeby výpočtů procesoru datum převádí na celé číslo, a to jako počet vteřin, které uplynuly od 1. 1. 1970 00:00:00. Datum a čas 29. 8. 2015 15:44 tedy lze zapsat i takto:

datetime Ted = 1440863081;

Datum takto nejspíš zadávat nikdy nebudete, ale může se stát, že tam, kde očekáváte datum, na vás v důsledku nějaké chyby v kódu vyskočí takovéto hausumero. Příčinu tedy již budete znát.

V praxi se datum explicitně do proměnné zadává málokdy. Obvykle jsou proměnné, které v sobě nesou čas, nějakým způsobem odvozené například od aktuálního času, na který máme funkce TimeCurrent() a TimeLocal(). I tady se bude hodit výše zmíněný přepočet na celočíselný kód, protože například současný čas + dva dny se spočte jednoduše takto:

datetime Pozitri = TimeLocal() + 2*24*60*60;

Jinými slovy, pozítří = teď + 2(dny)*24(hodin)*60(minut)*60(vteřin). Proč tomu tak je, už nyní víte a dost to usnadní práci s daty.

Výčet (enum)

Výčet je jeden z datových typů, který se v MQL4 objevil až po velkém sjednocení. Tento typ dat slouží k vytvoření skupiny dat stejného typu. Datům můžeme přidělit hodnoty, ale nemusíme, pak budou přiděleny automaticky. Výčet musí být deklarován uvnitř složených závorek. Výčty v základní sérii pravděpodobně potřebovat nebudeme, více se o nich dočtete v článku nad rámec této série.

Již v tomto díle jsme několikrát narazili na důležitý pojem „proměnná“. Právě proměnné si podrobně rozebereme v dalším díle.