5. MQL4 - Předdefinované proměnné

Napsal:   Sekce: MQL4

V této kapitole se trochu ponoříme do jazyka MQL4 a představíme si základní proměnné, pomocí kterých můžeme zjišťovat informace o cenách.

Předchozí díl

Až budete vyvíjet svůj vlastní skript, budete potřebovat „dolovat“ data o aktuální ceně na trhu pro daný měnový pár. Jazyk MQL4 nabízí několik vestavěných proměnných, které vracejí různé informace o dění na trhu.

Ask

V našem testovacím skriptu jsme se již seznámili s touto proměnou a víme, že vrací cenu, za kterou můžeme nakupovat daný měnový pár. Slovo „ask“ v anglickém jazyce znamená „žádat“. Přesto z pohledu obchodu vůči nám se jedná o nabídku, je to cena, kterou nám nabízí trh.

double nabidka = Ask;

 

Bid

Opačná proměnná k proměnné Ask je Bid. Jedná se o cenu, za kterou můžeme prodávat daný měnový pár. Stejně jako u Ask jsme si vysvětlili anglický význam, i zde musím podotknout, že „bid“ je v anglickém jazyce „nabídka“, ale pro obchodování vůči nám to znamená poptávku, jelikož se jedná o cenu, kterou trh poptává.

double poptavka = Bid;

 

Bars

Tato proměnná vrací počet dostupných svíček ve svíčkovém grafu (dovolil jsem si nahradit slovo bar slovem svíčka kvůli lepšímu pochopení významu). MetaTrader vám ukládá data z trhu a uchovává tak historii cen. Bars pak vrací počet těchto záznamů. Čím více, tím lépe pro statistiku. Otázkou je, kolik svíček vlastně pro své výpočty budete potřebovat.

int pocetSvicek = Bars;

 

Digits

Proměnná vrací počet desetinných míst, ze kterých se skládá cena daného měnového páru. Pokud bychom tuto proměnou použili např. u měnového páru EURUSD, kde cena může být např. 1.3032, vrátila by nám proměnná číslo 4.

int pocetMist = Digits;

 

Point

Vrací hodnotu jednoho bodu daného měnového páru. Tato proměnná se hodně používá při nastavování ceny StoppLoss (zastavení ztrát) a TakeProfit (realizování zisku) v metodě pro otevření pokynu případně pro úpravu pokynu.

double hodnotaBodu = Point;

 

Close[]

První proměnná typu pole. Pole je proměnná, která v sobě ukládá více hodnot, kde každá hodnota je identifikována indexem právě v hranatých závorkách. Tato proměnná vrací zavírací hodnotu daného měnového páru a to pro všechny dostupné svíčky v grafu (viz. proměnná Bars). MetaTrader automaticky naplní tuto proměnnou daty ze svíček, které jsou v grafu dostupné. Hodnoty pole se indexují od 0 a první hodnota je vždy aktuální hodnota. Je třeba zmínit, že hodnota je aplikovaná na svíčku grafu a tudíž je hodnota jiná pro jinou periodu, proto Close[] vrací jinou hodnotu pro třicetiminutový graf a jinou pro hodinový graf.

// vrátí aktuální zavírací cenu
double aktualniHodnota = Close[0];

// vrátí předchozí zavírací cenu
double predchoziHodnota = Close[1];

// vrátí zavírací cenu poslední svíčky, která je pro graf dostupná
// jelikož Bars vrací počet svíček, index svíčky musí být o 1 menší 
// než celkový počet, protože se indexuje od 0 a ne od 1
double posledniHodnota = Close[Bars - 1];

 

Open[]

Tato proměnná vrací otevírací cenu pro konkrétní svíčku daného měnového páru. Platí pro ni stejná pravidla jako pro Close[].

double aktualniHodnota = Open[0];

 

High[]

High vrací nejvyšší hodnotu konkrétní svíčky měnového páru pro danou periodu.

double aktualniHodnota = High[0];

 

Low[]

Low vrací nejnižší hodnotu svíčky měnového páru pro danou periodu.

double aktualniHodnota = Low[0];

 

Volume[]

Volume vrací hodnotu objemu obchodů na dané svíčce měnového páru pro danou periodu. Přesněji vrací počet změn ceny v daném intervalu. Neříká tedy, kolik obchodníků obchodovalo v dané době, ale kolikrát toto obchodování ovlivnilo cenu.

double aktualniHodnota = Volume[0];

 

Time[]

Poslední z proměnných je Time, která vrací datum a čas svíčky měnového páru pro danou periodu.

datetime casHodnoty = Time[0];

 

Bonus na závěr

Když už víme, jak získat informace z grafu, můžeme si ukázat příklad, který projde všechny dostupné svíčky a vypíše základní údaje o ceně. Jako výstup použijeme funkci Alert(). Kód můžete použít ve vašem existujícím skriptu MyTestScript nebo si kliknutím na New z menu File založte nový skript, kde v průvodci přidáním nového souboru nezapomeňte vybrat položku Script. V případě, že použijete existující skript z předchozí kapitoly, nahradíte pouze obsah funkce start() níže uvedeným kódem. Pro lepší přehled uvádím kód včetně funkce start():

int start()
{
   // zjistíme, kolik svíček máme k dispozici
   int nc = Bars;
 
   // pokud je svíček víc než 30, nastav max. 30
   if(nc > 30)
   {
      nc = 30;
   }
    
   // pro každou svíčku vypiš čas, otevírací a zavírací cenu   
   for(int i = 0; i < nc; i++)
   {
      string casSvicky = TimeToStr(Time[i], TIME_DATE|TIME_MINUTES);
      string oteviraciCena = DoubleToStr(Open[i], Digits);
      string zaviraciCena = DoubleToStr(Close[i], Digits);
      string msg = "Čas svíčky: " + casSvicky;
      msg = msg + ", otevírací cena je " + oteviraciCena;
      msg = msg + ", zavírací cena je " + zaviraciCena;
      Alert(msg);
   }

   return(0);
}

Rozebereme si výše uvedený kód. Jeho úkolem je projít určitý počet dostupných svíček, získat z každé svíčky informaci o ceně a zobrazit složenou zprávu v Alarm dialogu.

Nejprve definujeme proměnou nc, do které si uložíme počet dostupných svíček, které nám MetaTrader může nabídnout.

int nc = Bars;

Dále následuje podmínka if. Až budete vytvářet vlastní EA, určitě se nevyhnete podmínkám. Podmínky řídí tok kódu na základě zadaných kritérií. Obecně lze podmínku vyjádřit asi takto: když něco platí, tak udělej tohle, jinak udělej tohle. Podmínky tedy vyhodnocují booleanovská data, zda je něco pravda nebo není.

Definice podmínky se zapisuje takto:

if(podmínka)
{
      // kód
}
else
{
      // kód
}

Nebo rozšířená upřesňující podmínka

if(podmínka)
{
      // kód
}
else if(jiná podmínka)
{
      // kód
}
else
{     
// kód
}

Podmínky můžete do sebe zanořovat, tzn., že v jednom bloku if nebo else můžete napsat další podmínku.

if(podmínka)
{
      if(jiná podmínka)
{
            // kód
}     
else
{
            // kód
}
}
else
{
      // kód
}

V našem kódu máme podmínku, která říká: pokud počet svíček v proměnné nc je větší jak 30, tak nastav proměnnou nc na 30. Jinak zůstává počet svíček takový, který jsme dostali z proměnné Bars. Tuto podmínku jsem zavedl čistě s limitních důvodů. Proměnná Bars vám může vrátit tisíce záznamů a výpis tolika záznamů do Alarm dialogu by nebyl zrovna nejlepší ukázkou, proto jsem tento počet omezil a zároveň vás seznámil s podmínkami.

if(nc > 30)
{
      nc = 30;
}

Další část kódu představuje cyklus, který se bude vykonávat pro určitý počet výskytů. Pro procházení nějakých cyklických dat se používají funkce, které umí cykly zpracovávat. Jednou z nich je operátor for. Jeho definice je:

for(Výraz1; Výraz2; Výraz3)
{
      // tělo cyklu
}

Výraz1 je inicializace cyklu, zde se nachází proměnná, která nám nastaví počítadlo cyklu.

Výraz2 je podmínkový výraz, který nám vyhodnocuje, zda je pravda, že se má cyklus stále vykonávat, nebo již ukončit.

Výraz3 je iterace počítadla. Když bych měl vlastními slovy říct, co přesně definice říká, tak by to bylo asi takto: pro každý cyklus, dokud je to pravda, vykonej něco, co potřebuju.

for(int i = 0; i < nc; i++)

Nejdříve se nastaví hodnota i na 0 a pak při každém opakování se zvýší o 1. Cyklus bude vykonávat kód, dokud hodnota i bude menší jak nc (např. 30).

Dále si pak v kódu ukládáme do pomocných textových proměnných hodnoty, které spojíme do jednoho řetězce a později zobrazíme.

string casSvicky = TimeToStr(Time[i], TIME_DATE|TIME_MINUTES);
string oteviraciCena = DoubleToStr(Open[i], Digits);
string zaviraciCena = DoubleToStr(Close[i], Digits);

Do proměnné casSvicky si uložíme čas svíčky v podobě textu v určitém formátu pomocí funkce TimeToStr().

Funkce TimeToStr() je konverzní funkce a převádí hodnotu datumu do řetězce. Když bychom zobrazili hodnotu pouze použitím Time[i], tak by se nám zobrazila celočíselná hodnota, které rozumí počítač, ale pro nás by tato hodnota byla nic neříkající. Tato funkce má dva parametry, kde v prvním předáváme hodnotu datumu a v druhém říkáme, jak hodnotu chceme zobrazit. Druhý parametr je bitový příznak a je kombinací následujících konstant:

TIME_DATE – zobrazí hodnotu datumu ve formátu „yyyy.mm.dd“, kde yyyy reprezentuje číslo roku, mm číslo měsíce a dd číslo dne.

TIME_MINUTES – zobrazí hodnotu datumu ve formátu „hh:mi“, kde hh je hodina a mi je minuta.

TIME_SECONDS – zobrazí hodnotu datumu ve formátu „hh:mi:ss“ kde ss je sekunda a zbytek je stejný jako u TIME_MINUTES.

Kombinací TIME_DATE|TIME_MINUTES tak získáme datum ve formátu „yyyy.mm.dd hh:mi“. Jednotlivé kombinace se oddělují bitovým operátorem OR, reprezentující znak „|“. Pokud používáte českou klávesnici, napíšete tento znak kombinací kláves <AltGr>+<W> (Pravý Alt + písmeno W). Samozřejmě můžete funkci předat pouze jednu z výše uvedených konstant a nemusíte kombinovat.

Do proměnných oteviraciCena a zaviraciCena si uložíme hodnotu otevírací a zavírací ceny v podobě textu, kde hodnotám upřesním, kolik desetinných míst mají zobrazit a to pomocí funkce DoubleToStr().

Funkce DoubleToStr() převádí číslo typu double na řetězec. V prvním parametru se předává hodnota čísla a v druhém parametru se říká, kolik desetinných míst chceme v čísle zobrazit. Když bychom chtěli zobrazit číslo s 2 desetinnými místy, napsali bychom následující:

string vysledek = DoubleToStr(1.23456, 2);  // vysledek bude „1.23“

Jak jste si všimli, tak v našem příkladu jsme hnedka využili služeb proměnné Digits, která vrací počet desetinných míst pro daný měnový pár.

Jelikož jsme v cyklu a díky proměnné i, která při každém opakování cyklu zvyšuje svou hodnotu, můžeme tak pomocí proměnných Time[], Open[], Close[] číst hodnoty jednotlivých svíček směrem do historie.

Další část kódu v cyklu již skládá výslednou zprávu, která se má zobrazit. Spojování řetězce se v jazyku MQL4 provádí znakem „+“. Výsledný text se nám uloží do proměnné msg.

string msg = "Čas svíčky: " + casSvicky;
msg = msg + ", otevírací cena je " + oteviraciCena;
msg = msg + ", zavírací cena je " + zaviraciCena;

Finále cyklu je završeno výpisem do Alarm dialogu pomocí funkce Alert().

Alert(msg);

Nyní, když zkompilujete kód (nebudete mít žádné chyby v okně Errors) a spustíte skript v platformě přetažením do grafu, výpíše se vám 30 zpráv, kde bude zobrazena informace o cenách v daném čase.

Zobrazit obrázek

Hodnocení článku:
Sdílení článku:
Facebook

Čtěte více

  • 10. MQL4 - Moje první strategie (2/2)
    V následujícím bloku budeme pokračovat ve vytváření naší první strategie
  • 123 signal trading
    Hello guys and girls. My name is Athena Cohen, I come from California, and I would like to share my trading ideas with you, who can understand my english.
  • 2. MQL4 - Vzhled editoru MetaQuotes
    V tomto díle se v rychlosti seznámíme se vzhledem editoru jazyka MQL4 a s jeho základními možnostmi.
  • 2. týden prvního kola investiční soutěže
    Máme za sebou 2. týden prvního kola investiční soutěže, která probíhá na tzv. “demo“ fiktivních účtech. Každý soutěžící odstartoval hru se stejným počátečním kapitálem 30 000 Kč.
  • 20 vytrvalých
    Jsem day-trader na EUR/USD. Forex obchoduji 5 let.
  • 2004-2015: 11 let obchodování a stále v zisku. Jaké je tajemství?
    Přemýšleli jste někdy nad tím, jak dlouho budete chtít trading provozovat? A jak to udělat, abyste byli i za pár let stále ve hře? Jaký časový horizont uvažujete? Pět, možná deset let? A mít vlastní klienty? Kolik myslíte, že by vám takový trading zabral času? A jak jej vybudovat? Řešení už existují a nemusíte je hledat. Trader a zubař, Julius H. je na burze od roku 2004. Prošlapal cestu a zjistil, jak být na trhu po desetiletí úspěšný. Když jsem se s ním potkal, tušil jsem, že je přede mnou výjimečný rozhovor s výjimečným člověkem. A bylo to více než správné tušení.
  • 20ti minutový perfektní den dle R. Horner
    Článek od Raghee Horner - 20ti minutový perfektní den...
  • 3. MQL4 - Ještě, než začneme kódovat
    Řízení motorového vozidal je vždy záživnější, než studování předpisů. Stejně tak je to v programování. Samotné kódování není tak nudné, jako čtení referenčních manuálů, ale bez základních znalostí se programovat ani nedá začít. V tomto díle se podíváme trochu do struktury jazyka MQL4.
  • 4. MQL4 - Můj první skript
    V této kapitole si zkusíme společně vytvořit první velice jednoduchý skript. Ukážeme si tak, jak se skript zakládá, seznámíme se s prvními funkcemi a nasadíme skript do platformy MetaTraderu.
  • 5 nejsilnějších emocí tradera
    Psychologie obchodování je nedílnou součástí každého z nás. Trhy jsou jakýmsi živým organismem, u kterého se snažíme racionálním přístupem zanalyzovat jeho vývoj, což vytváří rozpor mezi očekáváním a konečným výsledkem.
  • 6. MQL4 - Technické indikátory
    V tomto díle se podíváme funkce, které vracejí data jednotlivých indikátorů.
  • 7. MQL4 - Funkce pro obchodování
    V tomto díle si představíme poslední oblast jazyka MQL4 tak, abychom byli schopni napsat svoji vlastni strategii pro automatizované obchodování a tím jsou funkce pro práci s pokyny.
  • 8 pips
    Dnes mi dorazila zpráva od mého dobrého přítele. Napsal mi v ní: "Tak dneska jsem vydělal jen 8 pips". Trh EUR/USD se dnes do této chvíle pohyboval v rozmezí High a Low asi 80 pips. Nabízí se zde otázka: Je 8 pips profitu za jeden den skutečně tak málo?
  • 8. MQL4 - Tester strategií
    V tomto díle se v rychlosti seznámíme s testerem strategií, který nám pak poslouží k testování a ladění naší strategie.
  • 9. MQL4 - Moje první strategie (1/2)
    V tomto díle si společně napíšeme vlastní strategii. Začneme nejprve vytvořením knihovny s pomocnými funkcemi pro obchodování.
  • A co takhle EURo?
  • A jsme tam, kde jsme byli před 10 lety
    Shoda u představitelů americké centrální banky (Fed) na rychlejším zvyšování úrokových sazeb trhy překvapila, protože poslední roky Fed hrál spíše holubičí kartu a odsouval utahování měnové politiky dál do budoucna. Poslední data z amerického trhu práce sice Fed zase trochu zbrzdila, jeho optimismus ukazující na rychlejší americkou ekonomiku, která si vyšší sazby zaslouží, však můžeme potvrdit.
  • AOS vs vlastní obchodování
    Stále více se setkávám s lidmi, kteří chtějí pro své obchodování používat AOS.
  • AOS - budúcnosť tradera
    Budúcnosť obchodníka, nevidím reálne, bez pomocníka AOS.
  • AOS a obchodné stratégie
    Základným stavebným kameňom obchodníka by mala byť jeho obchodná stratégia. Veľká väčšina obchodníkov – začiatočníkov, si nevie svoju obchodnú stratégiu nájsť, navrhnúť, otestovať a tak to častokrát končí zhlukom indikátorov či trendových čiar, ktoré viac či menej fungujú. No dlhodobá udržateľnosť a ziskovosť je minimálna. Preto sa v tomto článku pozrieme viac na to prečo mať obchodnú stratégiu ako ju možno naprogramovať, backtestovať a dostať až do podoby AOS – automatizovaného obchodného systému.
  •  


    Diskuse ke článku

    Diskuse je přístupná pouze pro registrované uživatele.
    Přihlásit se | Nová registrace

avatar

Autor:

Geafer

Hodnocení autora:
Bližší informace o autorovi >>

Kategorie blogu

reklama
Dukascopy

Kurzy obchodování

Zář
23

Jak vytvářet ziskové AOS a testovat obchodní strategie

Představujeme vám exkluzivní seminář se zástupci profesionálního vývojářského týmu, působícího ve společnosti FXstreet.cz. Hlavní náplní budou základy tvorby automatických obchodních systémů (AOS) pro platformu MetaTrader 4 včetně praktických ukázek. Naučíte se také správně backtestovat ziskovost AOS. Navíc si sami v průběhu semináře vytvoříte svůj první ziskový AOS.

říj
14

Profesionálem na forexu - kurz pro pokročilé tradery (Praha)

Seminář Profesionálem na forexu je určený pro absolventy kurzu Juniorská škola tradingu a pro pokročilé forexové tradery. Naučíme vás naše ziskové intradenní a swingové obchodní strategie a posuneme vás k vyšším ziskům. Jedná se o jeden z nejlépe hodnocených seminářů FXstreet.cz a věnujeme se na něm hlavně korelačním strategiím a intermarket analýze. Sleva: Absolventi semináře Juniorská škola tradingu mají tento seminář za 4 400,-Kč.


říj
28

Exkluzivní VIP seminář: Obchodujte jako bankovní trader!

Představujeme vám exkluzivní seminář, který účastníky semináře posouvá mezi tradingovou elitu. V průběhu semináře se dozvíte veřejně nedostupné informace o tom, jak ve skutečnosti funguje forex, pravdu o retailových brokerech a další veřejně nedostupné informace z obchodování bank a tradingu na institucionální úrovni.

Lis
4

Juniorská škola tradingu - Forex I-II (Brno)

Juniorská škola tradingu - Forex I-II je určena pro začínající tradery. Pokud chcete vyzkoušet něco nového, vymanit se z davu a být úspěšný v obchodování na finančních trzích, tak je tento seminář určen právě vám.

Literatura

titulka_smallsize.jpg

Novinka! Kniha "Jak se stát forexovým obchodníkem" Ondřeje Hartmana vychází ve druhém a výrazně rozšířeném vydání!

Kniha vychází již ve druhém, ale tentokrát výrazně upraveném a rozšířeném vydání. Kniha je koncipována tak, aby byla užitečným průvodcem jak začínajícím obchodníkům bez zkušeností, tak i těm, kdo na forexu již obchodují a potřebují si prohloubit své znalosti.

Day_Trading_obalka_78x110.jpg

Kniha "FOREX – Ziskové intradenní a swingové obchodní strategie" od Kathy Lien vychází v češtině!

Je nám velikou ctí, že můžeme obohatit český a slovenský forexový trh světově uznávanou knihou číslo 1 pro každého, kdo chce do hloubky pochopit fungování největšího světového finančního trhu.

zaciname na burze 03112013.jpg

Začínáme na burze - Jak uspět při obchodování na finančních trzích

Chcete dosáhnout úspěchu při obchodování na finančních trzích? Už jste to zkoušeli a stále se vám moc nedaří? Nevyznáte se v příliš odborných analýzách na finančních serverech? Všem začínajícím investorům přichází na pomoc nová kniha od zkušeného autora – Začínáme na burze.

Forex - doporučené články:

Co je FOREX?
Základní informace o finančním trhu FOREX. Forex je obchodování s cizími měnami (forex trading) a je zároveň největším a také nejlikvidnějším finančním trhem na světě.
Forex pro začátečníky
Forex je celosvětová burzovní síť, v jejímž rámci se obchoduje se všemi světovými měnami, včetně české koruny. Na forexu obchodují banky, fondy, pojišťovny, brokeři a podobné instituce, ale také jednotlivci, je otevřený všem.
1. část - Co to vlastně forex je?
FOREX = International Interbank FOReign EXchange. Mezinárodní devizový trh - jednoduše obchodování s cizími měnami - obchodování se směnnými kurzy.
VIP zóna - Forex Asistent
Nabízíme vám jedinečnou příležitost stát se součástí týmu elitních obchodníků FXstreet.cz. Ve spolupráci s předními úspěšnými obchodníky jsme pro vás připravili unikátní VIP skupinu, až doposud využívanou pouze několika profesionálními tradery, a k tomu i exkluzivní Price Action VIP indikátor, doposud úspěšně používaný pouze k soukromým účelům. Nyní se vám otevírá možnost stát se součástí této VIP skupiny, díky které získáte jedinečné know-how pro obchodování na forexu, výjimečný Price Action VIP indikátor, a tím také náskok před drtivou většinou ostatních účastníků trhu.
Forex brokeři - jak správně vybrat
V podstatě každého, kdo by chtěl obchodovat forex, čeká jednou rozhodování o tom, s jakým brokerem (přeloženo jako makléř/broker nebo zprostředkovatel) by chtěl mít co do činění a svěřil mu své finance určené k obchodování. Velmi rád bych vám přiblížil problematiku výběru brokera, rozdíl mezi jednotlivými typy brokerů a v neposlední řadě uvedu několik příkladů nejznámějších z nich.
Forex robot (AOS): Automatický obchodní systém
Snem některých obchodníků je obchodovat bez nutnosti jakéhokoliv zásahu do obchodu. Je to pouhá fikce nebo reálná záležitost? Kolik z nás věří, že "roboti" mohou profitabilně obchodovat? Na jakých principech fungují?
Forex volatilita
Forex volatilita, co je volatilita? Velmi užitečným nástrojem je ukazatel volatility na forexu. Grafy v této sekci ukazují volatilitu vybraného měnových párů v průběhu aktuální obchodní seance.
Forex zůstává největším trhem na světě
V dnešním článku se podíváme na nejnovější statistiky globálního obchodování na forexu. Banka pro mezinárodní vyrovnání plateb (BIS) totiž před pár týdny zveřejnila svůj pravidelný tříletý přehled, ve kterém detailně analyzuje vývoj na měnovém trhu. BIS je označována jako "centrální banka centrálních bank". Je nejstarší mezinárodní finanční organizací a hraje klíčovou roli při spolupráci centrálních bank a dalších institucí z finančního sektoru. Dnešní vzdělávací článek sice nebude zcela zaměřen na praktické informace z pohledu běžného tradera, ale i přesto přinese zajímavé a důležité poznatky.

Nejnovější články:


Naposledy čtené:


FXstreet.cz - forex, komodity, trading, zpravodajství

Nezávislý investiční server zaměřený na forex, komodity, trading a zpravodajství. Vzdělávací články, cenové grafy, cizí měny, semináře, ekonomické a forex zprávy.
reklama
XTB intradenni-obchodnik
reklama
reklama
LYNX banner
reklama
DEGIRO banner