}w !"#$%&'()+,-./012345
M ASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
MetaTrader - investiˇcná platforma pre obchodovanie B AKALÁRSKA PRÁCA
Tomáš Milo
Brno, jar 2012
Prehlásenie Prehlasujem, že táto bakalárska práca je mojím pôvodným autorským dielom, ktoré som vypracoval samostatne. Všetky zdroje, pramene a literatúru, ktoré som pri vypracovaní používal alebo z nich cˇ erpal, v práci riadne citujem s uvedením úplného odkazu na príslušný zdroj.
Tomáš Milo
Vedúci práce: Mgr. Martin Komenda iii
Pod’akovanie Touto cestou by som rád pod’akoval vedúcemu práce Mgr. Martinovi Komendovi za vedenie práce, prejavenú ústretovost’ a vynaloženú trpezlivost’ pri vypracovaní práce. ˇ Dalej d’akujem mojej rodine za podporu pri štúdiu, priatel’om za morálnu podporu a všetkým zainteresovaným za vecné pripomienky.
v
Zhrnutie Táto bakalárska práca sa zaoberá popisom konceptu obchodovania na burzových trhoch a následne rozborom prostriedkov pre algoritmické obchodovanie. Predložené vypracovanie je založené na práci s vybranou platformou MetaTrader 4 a implementáciou v programovacom jazyku MQL4. Praktický význam práce je podporený výstupom vo forme programov, respektíve zdrojových kódov, ktoré demonštrujú vybrané funkcionality.
vii
Kl’úˇcové slová Forex, MetaTrader 4, MetaEditor, MQL4, indikátor, expertný poradca, skript
ix
Obsah 1 2 3
4
5
6 7
Úvod . . . . . . . . . . . . . . . . . . . . . . . . . Medzinárodný menový trh . . . . . . . . . . . . Dostupný softvér a jeho programové rozhranie 3.1 Porovnanie dostupného softvéru . . . . . . 3.1.1 JForex Platform . . . . . . . . . . . . 3.1.2 MetaTrader 4 . . . . . . . . . . . . . 3.1.3 NinjaTrader . . . . . . . . . . . . . . 3.1.4 TradeStation . . . . . . . . . . . . . . 3.1.5 Tabul’ka . . . . . . . . . . . . . . . . 3.2 Vybraná platforma MetaTrader 4 . . . . . . 3.2.1 Klient-server architektúra . . . . . . 3.3 Koncept obchodovania . . . . . . . . . . . . 3.3.1 Informácie o trhu . . . . . . . . . . . 3.3.2 Operácie . . . . . . . . . . . . . . . . Programovací jazyk MetaQuotes Language 4 . 4.1 Typy súborov . . . . . . . . . . . . . . . . . 4.2 Súborový systém . . . . . . . . . . . . . . . 4.3 Premenné . . . . . . . . . . . . . . . . . . . 4.3.1 Užívatel’ské premenné . . . . . . . . 4.3.2 Preddefinované premenné . . . . . . 4.4 Dátové typy . . . . . . . . . . . . . . . . . . 4.5 Operátori a výrazy . . . . . . . . . . . . . . 4.6 Funkcie . . . . . . . . . . . . . . . . . . . . . 4.6.1 Užívatel’ské funkcie . . . . . . . . . 4.6.2 Špeciálne funkcie . . . . . . . . . . . 4.6.3 Preddefinované funkcie . . . . . . . 4.7 Štruktúra programu a priebeh vykonávania Skript . . . . . . . . . . . . . . . . . . . . . . . . . 5.1 Jednoduchá ukážka . . . . . . . . . . . . . . 5.2 Praktická ukážka . . . . . . . . . . . . . . . Indikátor . . . . . . . . . . . . . . . . . . . . . . . 6.1 Praktická ukážka . . . . . . . . . . . . . . . Expertný poradca . . . . . . . . . . . . . . . . . . 7.1 Praktická ukážka . . . . . . . . . . . . . . . 7.2 Spustenie testu . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 3 5 5 6 6 6 7 7 7 9 9 10 13 15 15 15 16 16 17 18 19 19 19 20 20 21 24 24 25 26 27 28 28 29 xi
8
Záver . . . . . . . . . . . . . 8.1 Prínos a využitie práce 8.2 Možnosti nadviazania A Obsah priloženého CD . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
30 30 30 34
xii
1 Úvod Nakol’ko je Darwinova teória evolúcie všeobecne platný názor, ešte stále nie je jednoznaˇcne zodpovedaná otázka. Potvrdenie teórie, že skutoˇcne existuje reálny dopad existencie konkurencie na evoluˇcné zmeny druhov, si vyžaduje dlhodobý a pracný výskum. V každom prípade vlastnost’ jedinca byt’ rýchlejší ako ostatní znamená jasnú výhodu pred ostatnými pri mnohých cˇ innostiach. Schopnost’ spracovat’ vel’ké množstvo informácií, správne im priradit’ prioritu a rozhodnút’ sa pre vhodné riešenie je kl’úˇcovou vlastnost’ou prežitia v každej dobe. Dnes (2012) už proces rozhodovania v kritických situáciach vo väˇcšine prípadov nie je závislý na rozhodnutí konkrétneho cˇ loveka v reálnom cˇ ase. Základným prostriedkom nástrojov urˇcených pre tento úˇcel sa stalo algoritmické spracovanie, ktoré ponúka mnohonásobne vyššiu rýchlost’ a spol’ahlivost’ v porovnaní s tradiˇcným nástrojom – cˇ lovekom. Je celkom prirodzené, že okrem riadenia kritických situácií, ktoré môžu ohrozit’ l’udský život (kolízie v doprave, zariadenia v zdravotníctve) sa algoritmické spracovanie využíva aj v oblastiach, ktoré bezprostredne nesúvisia so záchranou l’udských životov. Spoloˇcnou charakteristikou týchto oblastí sú prvky sút’aživosti a silná schopnost’ konkurencie. Vhodným príkladom je atraktívna a l’ahko dostupná možnost’ stat’ sa úˇcastníkom finanˇcného trhu. Ciel’om bakalárskej práce je priniest’ prehl’ad možností algoritmického spracovania a následného vyhodnotenia informácií vo vybranej obchodnej platforme MetaTrader 4. Pri výbere konkrétneho finanˇcného trhu je kladený dôraz na parametre, ktoré by mohli negatívne ovplyvnit’ tieto procesy. Z tohoto dôvodu je vybraný likvidný1 , cˇ asovo dostupný a relatívne transparentný medzinárodný menový trh – Forex (International Interbank Foreign Exchange) [1]. Text práce je koncipovaný do formy prístupnej cˇ itatel’ovi so základnými znalost’ami z oblasti informaˇcných technológií a ekonómie. Výklad je sprevádzaný mnohými názornými ukážkami. Druhá kapitola v rýchlosti predstaví a popíše základné vlastnosti vybraného trhu a zoznamuje cˇ itatel’a so špecifikami, ktoré prináležia 1. likvidita je charakteristika trhu, ktorá umožnuje ˇ rýchle uskutoˇcnenie obchodu (nákup alebo predaj). Vlastnost’ou zvyˇcajne disponuje trh s vyšším poˇctom úˇcastníkov, kde je vyššia pravdepodobnost’ nájdenia protistrany pre uskutoˇcnenie obchodu.
1
1. Ú VOD Forexu. Súˇcast’ou je struˇcný prehl’ad historických udalostí, ktoré podmienili vznik Forexu a následne ho formovali. Porovnanie platformy MetaTrader 4 s ostatným softvérom dostupným pre malých obchodníkov je predmetom tretej kapitoly. Do porovnania sú zahrnuté aj dostupné prostriedky pre algoritmické obchodovanie, to znamená vývojové prostredie (Integrated Development Environment) a programovací jazyk. Druhá cˇ ast’ kapitoly predstavuje koncept obchodovania na menovej burze. Vysvetlenie základných poznatkov je založené na ukážkach vo vybranej obchodnej platforme MetaTrader 4. Platforma MetaTrader 4 disponuje vlastným programovacím jazykom MQL4 (MetaQuotes Language 4). Štvrtá kapitola oboznamuje cˇ itatel’a so štruktúrou a kl’úˇcovými vlastnost’ami tohoto jazyka. Na prvú ukážku funkˇcného zdrojového kódu sa pozrieme v piatej kapitole. Ukážeme si ako naprogramovat’ v prostredí MetaEditor jednoduchý skript (script) vhodný pre jednorázové použitie. Šiesta kapitola je venovaná tvorbe vlastného indikátoru (custom indicator), ktorého výstup môže byt’ použitý ako rozhodovacie kritérium pre samotné obchodovanie. Expertný poradca (expert advisor), nazývaný aj automatický obchodný systém, je vyvrcholením možností algoritmického prístupu k obchodovaniu. Na základe vopred stanovených pravidiel automatický obchodný systém samostatne rozhoduje a odosiela pokyny pre obchodovanie. Tvorbu expertného poradcu dop´lna ˇ siedma kapitola. Posledná kapitola sa zaoberá vyhodnotením dosiahnutých výsledkov. Následne sú navrhnuté d’alšie možnosti rozšírenia a nadviazania na prácu.
2
2 Medzinárodný menový trh Forex je skratka používaná pre oznaˇcenie medzinárodného menového trhu, ktorý bol založený v roku 1971 ako reakcia na zrušenie BrettonWoodskej dohody [2]. Pôvodná myšlienka výmeny mien na báze pevných devízových kurzov sa neosvedˇcila, ked’ v roku 1973 prišlo k zrušeniu pravidla pevného kurzu. Vtedajší úˇcastníci trhu (USA, Spolková republika Nemecko, Švajˇciarsko a d’alší) sa dohodli na zavedení pohyblivého výmenného kurzu. Na základe tejto udalosti vznikol Forex, tak ako ho poznáme v dnešnej (2012) podobe. Forex je decentralizovaný [3] trh spájajúci viac navzájom prepojených obchodných miest. Na každom mieste môžu byt’ obchodované rôzne inštrumenty za rôzne ceny. Výsledkom sú odlišné i ked’ vel’mi podobné ceny daného inštrumentu pre každé miesto. Každý broker1 potom disponuje vlastnými dátami. Dáta sa v rámci jedného brokera môžu líšit’ v závislosti od umiestnenia serverov Podmienky obchodovania nie sú štandardizované, preto hovoríme o neorganizovanom trhu (Over-The-Counter) [3]. Toto usporiadanie trhu premietnuté do praxe znamená, že k dohode o pravidlách obchodovania dochádza priamo medzi obchodníkmi resp. brokermi. Ako už bolo spomenuté vyššie, Forex slúži ako prostriedok k realizovaniu platieb v rámci medzinárodného obchodu. Väˇcšina (až 90%) [1] mien sa obchoduje voˇci americkému doláru. Najˇcastejšie obchodované meny sú americký dolár (USD), euro (EUR), japonský jen (JPY), britská libra (GBP) a švajˇciarsky frank (CHF) [4]. Sadzba informujúca o pomere pri výmene jednej meny za druhú sa nazýva kurz meny. Na tvorbe likvidity sa spoloˇcne podiel’ajú centrálne banky, investiˇcné spoloˇcnosti a samotní investori, korporácie a drobní obchodníci. Na základe dostupných dát nie je možné zistit’, ako sa správajú vel’kí a malí obchodníci, nie je teda možné rozlíšit’ medzi situáciami, ked’ trhom hýbe jeden vel’ký subjekt a ked’ trhom hýbe vel’ké množstvo menších obchodníkov. Priemerný denný obrat uskutoˇcnených obchodov neustále rastie a momentálne (podl’a posledného prieskum v apríli 2010) sa pohybuje na úrovni 4 bilióny dolárov [3], priˇcom ˇ dominantným obchodným miestom je Londýn. Dalšie významné ob1. úˇcastník trhu, ktorý vykonáva obchody na úˇcet svojho zákazníka, je sprostredkovatel’om.
3
2. M EDZINÁRODNÝ MENOVÝ TRH chodné centrá sú umiestnenév mestách Frankurt, New York, Tokyo, Hong Kong, Singapore a Sydney. Obchodovanie na menovom trhu Forex má v porovnaní s obchodovaním aktív na iných trhoch mnoho výhod. Ako nesporná výhoda sa javí vysoká likvidita, ktorá minimalizuje riziko straty zisku spojené s nemožnost’ou uzatvorenia obchodu vo vybranom cˇ ase. Možnost’ obchodovania 24 hodín denne 5 dní v týždni prináša znížené riziko vzniku cenových rozdielov (Gap) mimo obchodné hodiny. Masívna informatizácia spoloˇcnosti koncom 90. rokov 20. storoˇcia zasiahla aj sféru obchodovania na burze a ovplyvnila ju pomerne zásadným spôsobom. Ruˇcné kreslenie grafov na papier a telefonické zadávanie pokynov sa pomerne rýchlo stalo minulost’ou v momente, ked’ sa zaˇcali objavovat’ prvé softvérové nástroje umožnujúce ˇ odosielat’ pokyny a spracovávat’ dáta nesúce informácie o aktuálnych a historických cenách do vizuálnej formy grafov. Postupom cˇ asu sa na scéne objavilo viacero technicko-analytických programov od rôznych výrobcov. Ich vzájomné porovnanie a podrobné rozobranie konceptu obchodovania je predmetom d’alšej kapitoly.
4
3 Dostupný softvér a jeho programové rozhranie Základným krokom k zapojeniu sa do diania na vybranom finanˇcnom trhu je výber kvalitnej analytickej platformy. Tento základný prvok vytvára rozhranie, pomocou ktorého užívatel’ komunikuje s trhom, respektíve brokerom. K analýze udalostí na trhu slúži automatické vykresl’ovanie cien do dvojrozmerného grafu (Chart). Horizontálna os reprezentuje cˇ as, vertikálna reprezentuje cenu inštrumentu. Schopnost’ správne porozumiet’ zobrazovaným informáciám je zásadná pre pochopenie historických dát, na základe ktorých je možné s urcˇ itou pravdepodobnost’ou odhadovat’ budúci vývoj ceny.
Obr. 3.1: Ukážka jednoduchého grafu
3.1 Porovnanie dostupného softvéru Paleta dostupného technicko-analytického softvéru je široká, výber konkrétneho riešenia je záležitost’ou individuálnej vol’by. Ponúkaný softvér sa zhoduje alebo podobá vo väˇcšine dôležitých vlastností. Predstaveniu najpoužívanejších rie5
3. D OSTUPNÝ SOFTVÉR A JEHO PROGRAMOVÉ ROZHRANIE šení v abecednom poradí sa venuje nasledujúci text. Každá platforma je dostupná na internete zadarmo vo forme demo verzie. Hlavným kritériom pri výbere platforiem sa stala dostupnost’ informácií v akejkol’vek forme. Pôvodným zámerom bolo výber postavit’ na základe množstva užívatel’ov jednotlivých platforiem. Výber podl’a tohoto parametra sa však ukázal ako t’ažko zrealizovatel’ný, kedže neexistujú oficiálne štatistiky informujúce o poˇcte užívatel’ov. 3.1.1 JForex Platform Švajˇciarska banka Dukascopy Bank SA poskytuje služby sprostredkovania prístupu na Forex. Dukascopy ako broker disponuje vlastnou platformou JForex Platform, ktorá je optimalizovaná pre automatické obchodovanie. Samozrejmost’ou je podpora behu platformy na akomkol’vek operaˇcnom systéme (Linux, Mac OS, Windows). Programovanie je umožnené v jazyku Java, takže je možné použit’ akékol’vek vývojové prostredia urˇcené pre Javu. Nevýhodou platformy JForex je možnost’ obchodovat’ len s Dukascopy, nie je možné vybrat’ si iného brokera. 3.1.2 MetaTrader 4 MetaTrader 4 je bezplatná platforma ruskej spoloˇcnosti MetaQuotes Software Corp. Súˇcast’ou platformy je jednoduché vývojové prostredie MetaEditor. Najväˇcším nedostatkom prostredia MetaEditor je absencia akéhokol’vek ladiaceho nástroja (debugger). Programovanie do platformy prebieha v jednoduchom jazyku MQL4 odvodeného z jazyka C. Výhodou je vel’ká komunita obchodníkov a programátorov pracujúcich s touto platformou. Maximálna dostupnost’ návodov, indikátorov a „third party“ riešení sa stali kl’úˇcovými vlastnost’ami, ktoré prispeli k vel’kej obl’ube platformy MetaTrader 4 medzi zaˇcínajúcimi i profesionálnymi obchodníkmi. Platforma spolupracuje s akýmkol’vek brokerom, zdrojom dát. 3.1.3 NinjaTrader Analytický softvér americkej spoloˇcnosti NinjaTrader, ktorý je pre analýzu zdarma. Ponúka programovanie vlastných indikátorov a obchod6
3. D OSTUPNÝ SOFTVÉR A JEHO PROGRAMOVÉ ROZHRANIE ných systémov v programovacom jazyku odvodenom z jazyka C#. 3.1.4 TradeStation Spoloˇcnost’ TradeStation je výrobcom vlastnej platformy zhodného mena TradeStation. Programovanie indikátorov a obchodných systémov je možné v skriptovacom jazyku EasyLanguage , ktorý je postavený na Pascale. Výhodou EasyLanguage je vysoká flexibilita, ktorá poskytuje výborné zázemie pri budovaní komplexného riešenia. 3.1.5 Tabul’ka Tabul’ka sumarizuje informácie o dostupnom programovacom jazyku a o podpore v rôznych operaˇcných systémoch pre vybrané platformy. JForex
MetaTrader 4
NinjaTrader
TradeStation
Windows
áno
áno
áno
áno
Mac OS
áno
nie
nie
nie
Linux
áno
nie
nie
nie
jazyk
Java
MQL 4
C#
EasyLanguage
backtesting
áno
áno
áno
áno
optimalizácia
áno
áno
áno
áno
3.2 Vybraná platforma MetaTrader 4 MetaTrader 4 je kompletný softvérový balíˇcek, ktorý obsahuje nasledujúce komponenty: •
MetaTrader 4 Client Terminal je klientský softvér.
•
MetaTrader 4 Mobile je verzia pre mobilné zariadenia s operaˇcným systémom Windows Pocket PC 2002/Mobile 2003.
•
MetaTrader 4 Server predstavuje jadro systému na serverovej cˇ asti. Spracováva požiadavky užívatel’ov, zasiela cenové kotácie, správy a predpovede, uchováva archívy. Pracuje ako služba. 7
3. D OSTUPNÝ SOFTVÉR A JEHO PROGRAMOVÉ ROZHRANIE •
MetaTrader 4 Administrator je urˇcený pre vzdialenú prácu s nastavením servera.
•
MetaTrader 4 Manager spracováva dotazy obchodníkov, poskytuje rozhranie pre správu klientských úˇctov.
•
MetaTrader 4 Data Center je vo svojej podstate proxy server, ktorého úlohou je zvýšenie škálovatel’nosti, stability a odolnosti voˇci DoS útokmi.
Obr. 3.2: Užívatel’ské rozhranie platformy MetaTrader 4
My budeme pracovat’ výhradne s klientským terminálom (prvá komponenta z predošlého výˇctu), ktorý je dostupný na stiahnutie na oficiálnej stránke [5]. Klientský terminál poskytuje grafické užívatel’ské rozhranie, ktorého ovládanie je pomerne jednoduchá záležitost’. Jednotlivé prvky rozhrania komunikujú s užívatel’om. Graf 8
3. D OSTUPNÝ SOFTVÉR A JEHO PROGRAMOVÉ ROZHRANIE (vpravo) zobrazuje aktuálne dostupné ceny, terminál (dolu) slúži k zobrazeniu objednávok, histórie, správ a iných doplnkových informácií. Navigátor (vl’avo) slúži k správe úˇctov a práci s programami. Panel trh (v strede) zobrazuje aktuálne ceny ponúkaných inštrumentov a umožnuje ˇ rýchle otváranie obchodov.
3.2.1 Klient-server architektúra Na vytváraní obchodov sa podiel’ajú tri zložky: server, klientský terminál a MQL4 Program alebo užívatel’. Požiadavky k obchodu (od užívatel’a alebo z programu) sú adresované klientskému terminálu, ktorý ich d’alej posiela na server. Na strane servera dôjde bud’ k prijatí objednávky alebo k jej zamietnutí. Informácia o (ne)vykonaní je odoslaná spät’ na klientský terminál, kde je zobrazená užívatel’ovi alebo spracovaná programom.
Obr. 3.3: Klient-server architektúra, prebrané z [6]
Serverová cˇ ast’ poskytuje službu vykonania objednávky. Forma a spôsob práce na klientskej strane budú popísané v d’alších kapitolách.
3.3 Koncept obchodovania Skôr ako sa dostaneme k samotnému programovaniu, je nevyhnutné osvojit’ si elementárne znalosti, terminológiu a pochopit’ súvislosti v kontexte konceptu obchodovania. 9
3. D OSTUPNÝ SOFTVÉR A JEHO PROGRAMOVÉ ROZHRANIE 3.3.1 Informácie o trhu Meny sa štandardne obchodujú v kontrakte nazývanom lot. Jeden lot zodpovedá objemu 100 000 jednotiek danej meny (napríklad $ 100 000). So zvyšovaním prístupnosti pre malých obchodníkov sa zo strany brokerov pristúpilo ku kompromisu, kedy je umožnené obchodovat’ i s menším objemom. Typicky sa v ponuke brokerov objavuje možnost’ obchodovat’ mini kontrakty (mini loty) s vel’kost’ou 10 000 jednotiek. Obchodovanie je realizované ako výmena daného poˇctu jednotiek jednej meny za urˇcený poˇcet jednotiek druhej meny. Prvá mena sa nazýva základná mena, druhá mena sa nazýva kótovacia mena. Pomer, podl’a ktorého je urˇcený poˇcet jednotiek kótovacej meny sa nazýva kotácia. Kotácia sa vždy vzt’ahuje na dvojicu mien. Potom dvojica euro a americký dolár sa oznaˇcuje ako EUR/USD a výmenný pomer je uvedený desatinným cˇ íslom štandardne s presnost’ou na štyri desatinné miesta (napr. 1.3123). Výnimku tvoria menové páry kótované voˇci japonskému jenu (JPY), ktoré su kótované na dve desatinné miesta. Kotácia je vo svojej podstate cena, ktorá je determinovaná ako stret medzi ponukou a dopytom úˇcastníkov trhu. Ak sa zvýši dopyt, cena rastie. Naopak pri zvýšení ponuky cena klesá. Úrovenˇ dopytu a ponuky je ovplyvnená mnohými ekonomickými, hospodárskymi a politickými faktormi. Vo všeobecnosti sa v prostredí obchodovania na finanˇcných a komoditných trhoch stanovujú dve ceny pre každý obchodný inštrument: •
cena ponuky (ask) udáva najlepšiu dostupnú cenu pre nákup aktíva [7]. Ask urˇcuje cenu, za ktorú sú ostatní úˇcastníci ochotní aktívum predat’.
•
cena dopytu (bid) je urˇcená ako najlepšia cena, za ktorú je možné v danom okamihu inštrument predat’ [7]. Bid urˇcuje cenu, za ktorú sú ostatní úˇcastníci ochotní aktívum kúpit’.
Pip (alebo aj bod) je jednotka pre oznaˇcenie najmenššej zmeny ceny menového páru. Štandardne sa velkost’ jedného pipu oznaˇcuje ako zmena ceny na štvrtom desatinnom mieste, respektíve na druhom desatinnom mieste pre meny kótované voˇci japonskému jenu (JPY). Hodnota pipu (vyjadrená v peniazoch) je pre každý menový pár iná. 10
3. D OSTUPNÝ SOFTVÉR A JEHO PROGRAMOVÉ ROZHRANIE Udalost’ zmena ceny aktíva je tik (tick). Pre každy tik je vytvorený záznam do histórie cien, ktorý si uchováva informácie o presnom cˇ ase a aktuálnej cene. Cenové rozpätie medzi cenami ask a bid sa nazýva spred (spread) a je vyjadrené jednotkou pip. Tento údaj je odlišný pre každý menový pár a jeho vel’kost’ je cˇ asto odvodená od výšky likvidity daného páru. Pre bežné, majoritné menové páry je vel’kost’ cenového rozpätia približne 3 pipy. Platí, že likvidnejší pár by mal mat’ menší spread. Význam tohoto rozdielu spoˇcíva vo vytvorení poplatku za zrealizovaný obchod. V prípade, že obchodník zrealizuje nákup a predaj rovnakého množstva pre daný menový pár a nedôjde k zmene kotácie, jeho strata bude rovná vel’kosti spredu pre daný menový pár. Páka (margin) je pomocný prostriedok zavedený za úˇcelom sprístupnenia obchodovania širšej verejnosti. Maržovný úˇcet poskytuje pákový efekt, ktorý podl’a zvoleného pomeru definuje akou cˇ iastkou je potrebné disponovat’ na otvorenie kontraktu vzhl’adom na samotnú vel’kost’ kontraktu. Štandardne by bolo potrebné pre otvorenie nákupného kontraktu vel’kosti 1 lot, na menovom páre EUR/USD a pri cene ask na úrovni 1.2348 disponovat’ výškou úˇctu približne $ 123 480. Pri páke 1/100 (1%) je pre zrealizovanie toho istého obchodu za zhodných podmienok potrebné disponovat’ vel’kost’ou úˇctu $1 234.8. V prípade, že otvorený obchod vykazuje stratu, ktorá sa blíži vel’kosti marže, broker vyzve obchodníka formou maržovej výzvy (margin call) aby vložil na úˇcet peniaze, ktoré by pokryli prípadné d’alšie straty. Nasledujúca tabul’ka ilustruje hodnoty vybraných premenných pre maržovný úˇcet s pákou 1%. Typ
Pár
V
Ask
Bid
pip
marža
Buy
EUR/USD
1
1.2348
1.2345
$ 30
$ 1 234.8
Buy
EUR/USD
0.2
1.2348
1.2345
$6
$ 246.96
Buy
GBP/USD
1
1.6185
1.6182
$ 30
$ 1 618.5
Buy
EUR/GBP
1
0.8125
0.8122
$ 48.546
$ 1 314.7875
Výber formátu zobrazovaných historických dát je možné zvolit’ ˇ prostredníctvom parametru cˇ asový rámec (time frame). Casový rámec udáva cˇ asový úsek, pre ktorý sú zlúˇcené dáta záznamov o cenách. 11
3. D OSTUPNÝ SOFTVÉR A JEHO PROGRAMOVÉ ROZHRANIE V ukážkovom príklade si zvolíme hodinový cˇ asový rámec. Pre každú hodinu (typicky 00:00 – 1:00, 1:00 – 2:00, analogicky d’alej) sa potom vypoˇcítajú informácie o štyroch cenách: •
otváracia cena (open price) reprezentuje hladinu ceny na zaˇciatku periódy podl’a zvoleného cˇ asového rámca
•
zatváracia cena (close price) predstavuje hodnotu ceny na konci periódy podl’a zvoleného cˇ asového rámca
•
najvyššia cena (high price) je najvyššia cena, ktorá bola podl’a zvoleného cˇ asového rámca poˇcas periódy dosiahnutá
•
najnižšia cena (low price) je najnižšia cena, ktorá bola podl’a zvoleného cˇ asového rámca poˇcas periódy dosiahnutá
Súbor informácií o cenových úrovniach je na užívatel’ovu obrazovku zobrazovaný vo forme dvojrozmerného grafu. Graf je jedného typu z: •
cˇ iarový graf (line chart) je najjednoduchší typ grafu, ktorý spája zatváracie ceny pre zvolený cˇ asový rámec primitívnym grafickým prvkom - cˇ iarou (Line).
•
svieˇckový graf (candlestick chart) využíva k zobrazeniu dát grafický prvok - sviecu (Candlestick). Svieˇcka je schopná vizuálne rozlíšit’ štyri úrovne cien (otváraciu, zatváraciu, najvyššiu a najnižšiu).
•
cˇ iarkový graf (open-high-low-close chart, bar chart) je vykreslený pomocou série vertikálnych cˇ iarok (OHLC lines), priˇcom každá cˇ iarka disponuje schopnost’ou vizuálne rozlíšit’ štyri úrovne cien (otváraciu, zatváraciu, najvyššiu a najnižšiu).
Svieˇckový a cˇ iarkový graf poskytujú informácie o štyroch cenách ˇ pre každý zobrazený grafický objekt. Ciarový graf je vykreslený na základe spojenia zatváracich cien, poskytuje teda menej informácií.
12
3. D OSTUPNÝ SOFTVÉR A JEHO PROGRAMOVÉ ROZHRANIE
ˇ Obr. 3.4: Ciarový, svieˇckový a cˇ iarkový graf (odhora dolu)
3.3.2 Operácie Z dôvodu lepšej orientácie si analogicky zavedieme základnú terminológiu pre operácie nad trhom. Nákup (buy) je otvorenie pozície, pri ktorej nakupujeme inštrument. Otvorenie pozície, pri ktorej predávame inštrument je predaj (sell). Pozícia (position) oznaˇcuje množstvo vlastneného alebo požiˇcaného inštrumentu, inými slovami je tak nazývaný každý otvorený obchod. Pri kúpe inštrumentu je otvorená dlhá pozícia (long position, going long), naopak pri predaji sa otvára krátka pozícia (short position, going short). Ak sme otvorili pozíciu, stali sme sa úˇcastníkom trhu tým, že sme kúpili alebo predali inštrument. Zisk alebo strata pozície sa v cˇ asovom horizonte mení v závislosti od pohybu ceny. Odoslaním okamžitej objednávky (market order) je vytvorená požiadavka na okamžité otvorenie novej pozície za najlepšiu dostupnú cenu (cena s minimálnym rozdielom voˇci cene zobrazenej v platforme). Implementácia v platforme MetaTrader 4 umožnuje ˇ nastavit’ maximálnu odchylku (maximum deviation) od požadovanej (zobrazenej) 13
3. D OSTUPNÝ SOFTVÉR A JEHO PROGRAMOVÉ ROZHRANIE ceny, alebo odchylku úplne zakázat’. Zadaním cˇ akajúcej objednávky (pending order) nie je otvorená nová pozícia pokial’ nie sú splnené dané podmienky, ktoré sú definoˇ vané ako dosiahnutie danej cenovej hladiny. Cakajúca objednávka sa môže splnením podmienok stat’ okamžitou objednávkou (dôjde k otvoreniu pozície), alebo môže prejst’ do stavu zmazaná. Obchodný príkaz typu stop (stop) vytvorí cˇ akajúcu objednávku s podmienkou otvorenia za cenu rovnú alebo horšiu ako je jej aktuálna hodnota. Tento typ príkazu nachádza použitie v situácii, ked’ chce obchodník vstúpit’ do pozície na stanovenej cenovej úrovni. Predpokladá dosiahnutie úrovne a následne pokraˇcovanie vývoja ceny v tom istom smere. Obchodný príkaz typu limit (limit) vytvorí cˇ akajúcu objednávku s podmienkou otvorenia za cenu rovnú alebo lepšiu ako je jej aktuálna hodnota. Používa sa v prípade, ked’ obchodník oˇcakáva menší pohyb proti smere akým sa neskôr trh vydá.
Obr. 3.5: Typy cˇ akajúcich objednávok, prebrané z [8]
14
4 Programovací jazyk MetaQuotes Language 4 MetaQuotes Language 4 (MQL4) je zabudovaný procedurálny programovací jazyk platformy MetaTrader 4. Jazyk MQL4 je podobný jazyku C, z ktorého preberá syntax a väˇcšinu základných charakteristických vlastností. Jazyk je kompilovaný a pri používaní záleží na vel’kosti písmen (case sensitive). MQL4 umožnuje ˇ naprogramovanie skriptu (script), indikátoru (indicator), expertného poradcu (expert advisor) alebo vytvorenie vlastnej knižnice (library). Výsledný program prispieva k automatizácii jednotlivých krokov obchodovania.
4.1 Typy súborov V prostredí jazyka MQL4 existujú tri typy súborov. Súbor s koncovkou .mq4 uchováva zdrojový kód pre každý typ programu (expertný poradca, skript a indikátor). Pre spustenie samotného programu v platforme je potrebné tento súbor skompilovat’ do súboru s rovnakým názvom a koncovkou .ex4. Súbory s koncovkou .mqh sú primárne urˇcené pre zápis cˇ asto používaných cˇ asti kódu, typicky unifikované funkcie, konštanty alebo premenné.
4.2 Súborový systém Klientský terminál rozoznáva typ programu podl’a umiestnenia programu v adresárovej štruktúre. Všetky programy zdiel’ajú spoloˇcnú zložku MetaTrader4\experts, kde sú d’alej rozdelené podl’a typu programu. Expertní poradcovia sa nachádzajú priamo v tomto adresári, skripty sú uložené v podadresári scripts a indikátory v podadresári indicators. Adresárová štruktúra poskytuje vývojárovi d’alšie dve zložky: include a libraries, do ktorých je možné ukladat’ pomocné súbory. Programy uložené v týchto adresároch nie je povolené spustit’ v klientskom termináli. Súbory nachádzajúce sa v zložke include sú do zdrojoveho kódu zahrnuté v cˇ ase kompilácie. Knižnice zo zložky libraries nie sú zahrnuté do zdrojového kódu programu v cˇ ase kompilácie, z cˇ oho plynie zvýšená réžia pri ich používaní. 15
4. P ROGRAMOVACÍ JAZYK M ETA Q UOTES L ANGUAGE 4
Obr. 4.1: Súborový systém platformy MT4
4.3 Premenné V procedurálnom programovaní je nevyhnutným prostriedkom pri ukladaní medzivýpoˇctov premenná. Premenná môže poˇcas svojej existencie menit’ uchovávanú hodnotu, takže cˇ asto slúži ako doˇcasné úložisko informácií. 4.3.1 Užívatel’ské premenné Jazyk umožnuje ˇ deklarovanie a používanie vlastných premenných. Podl’a rozsahu pôsobnosti sa premenné rozdel’ujú na dva typy: •
lokálna premenná je deklarovaná vo vnútri funkcie a jej rozsah pôsobnosti sa vzt’ahuje len v rámci danej funkcie. Po ukonˇcení behu funkcie premenná zaniká.
•
globálna premenná je deklarovaná mimo, respektíve nad všetkými funkciami a premenná je potom dostupná v rámci a poˇcas celého programu. Premenná zaniká ukonˇcením programu. 16
4. P ROGRAMOVACÍ JAZYK M ETA Q UOTES L ANGUAGE 4 Tieto dva základné typy premenných môžu byt’ rozšírené o d’alšie vlastnosti. Pomocou kl’úˇcového slova static deklarujeme statickú premennú, ktorá rozširuje lokálnu premennú. Používa sa v tele funkcie podobne ako lokálna premenná, avšak statická premenná nezaniká ukonˇcením funkcie. Premenná je inicializovaná len jedenkrát (pri prvom volaní funkcie) a ostáva v pamäti nad’alej alokovaná, cˇ ím sa zachováva jej hodnota a je možné s nou ˇ pracovat’ pri d’alšom volaní funkcie. Externá premenná je globálna premenná, ktorá slúži k uloženiu vstupných nastavení užívatel’a pre daný program. Uvádza sa kl’úˇcovým slovom extern. Užívatel’ pri spustení programu nastavuje hodnotu externej premennej v dialógovom okne platformy.
4.3.2 Preddefinované premenné Užitoˇcnou súˇcast’ou jazyka je sada preddefinovaných premenných, ktoré vystupujú ako read-only 1 rozhranie jazyka a reflektujú aktuálny stav trhu. Preddefinované premenné v praktickom použití predovšetkým urýchl’ujú prácu a udávajú jednotný formát kódu. Premenné sa vždy vzt’ahujú k aktuálnemu grafu, respektíve k aktuálnemu menovému páru. Zoznam premenných je rozdelený do dvoch skupín: •
premenné primitívneho datového typu cˇ íselne reprezentujú danú veliˇcinu: Ask (cena ask), Bid (cena bid), Bars (poˇcet sviec na grafe), Point (hodnota jedného pipu), Digits (poˇcet desatinných miest ceny)
•
premenné typu pole uchovávajú informácie o sviecach grafu. Najnovšia svieca (na grafe úplne vpravo) je indexovaná cˇ íslom nula. Najstaršia svieca na grafe má potom index Bars - 1. Zoznam obsahuje premenné: Time (ˇcas sviece), Open (otváracia cena), Close (zatváracia cena), High (najvyššia cena), Low (najnižšia cena), Volume (poˇcet tikov).
1. právo cˇ ítat’ obsah premennej, zápis do premennej nie je povolený
17
4. P ROGRAMOVACÍ JAZYK M ETA Q UOTES L ANGUAGE 4
4.4 Dátové typy Jazyk MQL4 je typovaný jazyk, v ktorom má každá premenná pevne urˇcený dátový typ. Do premennej môže byt’ uložená akákol’vek hodnota z oboru hodnôt odpovedajúceho dátového typu. Jazyk MQL4 disponuje primitívnymi dátovými typmi, ktoré reprezentujú elementárne údaje. Nasledujúca tabul’ka uvádza prehl’ad dátových typov a ich vlastností. typ
hodnota
vel’kost’
min. hodnota
max. hodnota
int
celé cˇ íslo
4 bajty
-2 147 483 648
2 147 483 647
double
reálne cˇ íslo
8 bajtov
-1.7e - 308
1 .7e + 308
bool
logická
4 bajty
-
-
string
text
8 bajtov
-
-
color
farba
4 bajty
0
255
datetime
dátum
4 bajty
1.1.1970
31.12.2037
Hodnoty celoˇcíselnej premennej typu int môžu byt’ reprezentované decimálne alebo hexadecimálne. Vo všeobecnosti pre MQL4 platí, že hexadecimálny zápis zaˇcína prefixom 0x (podobne ako v jazyku C). Hodnoty premennej typu double reprezentujú reálne cˇ íslo s presnost’ou na pät’nást’ desatinných miest. Premenná typu bool môže nadobúdat’ dve hodnoty: true (True, TRUE, 1) alebo false (False, FALSE, 0). Textový ret’azec typu string je reprezentovaný ako ret’azec znakov, ktorého d´lžka leží v intervale od 0 do 255. Na prekroˇcenie maximálnej povolenej d´lžky ret’azca reaguje kompilátor varovnou hláškou. Hodnoty premennej typu color môžu byt’ reprezentované tromi spôsobmi a to literálom, cˇ íselne alebo slovne. Reprezentácia literálom pozostáva z troch cˇ astí, kde každá cˇ ast’ cˇ íselne vyjadruje intezitu jednej z troch základných farieb modelu RGB 2 . Hodnota je uvádzaná prefixom C, za ktorým nasleduje trojica cˇ ísel (decimálne alebo hexadecimálne) uzavretá v jednoduchých úvodzovkách. Prevod z decimálneho zápisu na hexadecimálny (a naopak) prebieha pre každú cˇ ast’ zvlášt’. 2. farebný model Red Green Blue založený na aditívnom miešaní farieb
18
4. P ROGRAMOVACÍ JAZYK M ETA Q UOTES L ANGUAGE 4 ˇ Císelná reprezentácia je založená na podobnom princípe, priˇcom farba ˇ je kódovaná jedným cˇ íslom decimálne alebo hexadecimálne. Císlo re3 ˇ prezentované hexadecimálne má tvar 0xRRGGBB . Císlo v decimálnom tvare neodráža priamo zápis RGB, ale predstavuje decimálny zápis hexadecimálneho cˇ ísla farby. Posledný spôsob zápisu farby je prostredníctvom mena farby. Kompletný zoznam definovaných farieb je možné nájst’ na [9]. Premenná typu datetime reprezentuje dátum a cˇ as. Hodnota premennej má šest’ cˇ astí, ktoré cˇ íselne reprezentujú rok, mesiac, denˇ (alebo naopak den, ˇ mesiac, rok), hodina, minúta, sekunda. Vnútorná reprezentácia tohoto typu je poˇcet sekúnd od 00:00 1.1.1970. Hodnota je uvádzaná prefixom D, za ktorým nasleduje cˇ asový údaj uzavretý v jednoduchých úvodzovkách.
4.5 Operátori a výrazy Nevyhnutnou súˇcast’ou každého programovacieho jazyka je dostupnost’ operátorov, z ktorých je možné spolu s operandmi vytvorit’ výraz. Jazyk MQL4 v tomto ohl’ade neprináša niˇc nové (napríklad v porovnaní s jazykom C), preto sa odkazujem na zdroje [10] a [11], ktoré poskytujú podrobnejší náhl’ad do tejto tematiky.
4.6 Funkcie Funkcia je vo všeobecnosti považovaná za základný prvok každého programovacieho jazyka. Význam fukncie spoˇcíva v parametrizovaní výpoˇctu a uzavretí funkˇcnosti do logického i fyzického celku. Vedl’ajším prínosom je zprehl’adnenie kódu, cˇ o prispieva k jeho trvalej udržatel’nosti. Funkcia je jednoznaˇcne urˇcená svojou deklaráciou a definíciou. 4.6.1 Užívatel’ské funkcie Užívatel’ská funkcia sa skladá z deklarácie (hlaviˇcky) a definície (tela). Deklarácia definuje návratový typ funkcie. V prípade, že úlohou fun3. RR je intenzita cˇ ervenej farby, GG je intenzita zelenej farby a BB je intenzita modrej farby
19
4. P ROGRAMOVACÍ JAZYK M ETA Q UOTES L ANGUAGE 4 kcie nie je poskytovat’ návratovú hodnotu, udáva sa typ void. Návratový typ je nasledovaný unikátnym názvom funkcie a poslednou cˇ ast’ou deklarácie je n-tica vstupných parametrov. V zložených zátvorkách nasleduje definícia funkcie, ktorá obsahuje kód zodpovedný za funkcionalitu. Telo funkcie je ukonˇcené príkazom return(výraz), kde výraz je rovnakého dátového typu ako návratový typ funkcie. V prípade návratového typu void sa klauzula return(výraz) nepoužíva. Ako vhodný materiál k ozrejmeniu úplných základov programovania funkcií môže poslúžit’ l’ubovol’ná uˇcebnica jazyka C. 4.6.2 Špeciálne funkcie Charakteristickým rysom programov urˇcených pre beh v klientskom terminále je ich práca s pravidelne sa meniacimi informáciami. V jazyku MQL4 je toto špecifikum zachytené v podobe špeciálnych funkcií [12]. Špeciálna funkcia (special function) je volaná klientským terminálom, explicitne jej volanie v programe nie je potrebné. Volanie špeciálnej funkcie v kóde nie je zakázané, je to však považované za nesprávne využitie navrhnutej architektúry. Špeciálne funkcie sú tri s nasledujúcou preddefinovanou signatúrou: •
int init() je vykonaná najviac jedenkrát pri inicializácii programu.
•
int start() je vykonaná n-krát pri každom novom tiku.
•
int deinit() je vykonaná najviac jedenkrát pri deinicializácii programu.
Hore uvedené identifikátory sú rezervované a nesmú byt’ použité pre názvy iných funkcií. Špeciálne funkcie init() a deinit() su volané len v prípade ak sa v kóde nachádza ich definícia s vykonávaným kódom. Podmienky volania špeciálnych funkcií sú popísané osobitne pre každý druh programu v príslušnej kapitole. 4.6.3 Preddefinované funkcie Súˇcast’ou jazyka sú preddefinované funkcie, ktoré podobne ako preddefinované premenné prispievajú v prvom rade k efektívnejšiemu vý20
4. P ROGRAMOVACÍ JAZYK M ETA Q UOTES L ANGUAGE 4 voju. Vývojármi cˇ asto požadované funkcionality sú štandardizované, atomizované a dostupné ako súˇcast’ jazyka. Kompletný zoznam funkcií je dostupný na [13].
4.7 Štruktúra programu a priebeh vykonávania Typický program v jazyku MQL4 je logicky rozˇclenený do niekol’kých cˇ astí: hlaviˇcka programu obsahuje klauzule pre zahrnutie knižníc, deklaráciu a inicializáciu globálnych premenných a dolnujúce ˇ informácie o programe (autor, autorské práva, odkaz na webovú stránku). Nasleduje blok tvorený trojkombináciou špeciálnych funkcií init(), start() a deinit(). Posledný blok tvoria definície vlastných funkcií, ktoré sú volané špeciálnymi funkciami. Poradie všetkých funkcií je volitel’né podobne ako poradie samotných špeciálnych funkcií. Potom dodržiavanie pravidla druhého a tretieho bloku nie je povinné, avšak je to vhodné pre prehl’adnost’ a dlhodobú udržatel’nost’ kódu. Od momentu spustenia program v grafe je ako prvý vykonaný kód hlaviˇcky. Akonáhle sú vykonané úvodné riadky, klientský terminál odovzdá riadenie funkcii init(). Funkcia je terminálom volaná len raz a mala by obsahovat’ kód, ktorý je potrebné vykonat’ pri štarte programu (inicializaˇcné výpoˇcty, rozmiestnenie grafických objektov v okne grafu). Po ukonˇcení vykonávania funkcie init() je riadenie opät’ vrátené klientskému terminálu. Vo funkcii start() sa program nachádza po väˇcšinu cˇ asu svojho behu. Terminál odovzdá riadenie funkcii start(). Výpoˇcty vo vnútri funkcie môže byt’ závislé na hodnotách preddefinovaných premenných. Oˇcakávaný dôsledok spustenia funkcie je vykonanie akcie, ktorá býva najˇcastejšie implementovaná ako manipulácia s objednávkami, prípadne aktualizovanie grafických objektov. Po ukonˇcení funkcie je riadenie vrátené terminálu. Terminál je držitel’om riadenia, pokial’ nie je detekovaný nový tik. Tento moment sa navonok javí ako prestávka, kedy program nepracuje. Po vzniku nového tiku je kontrola opät’ posunutá funkcii start(), ktorá je opätovne vykonaná a následne je riadenie vrátené terminálu. Každým novým tikom sa celý proces opakuje. Klientský terminál po ukonˇcení behu programu zavolá a vykoná 21
4. P ROGRAMOVACÍ JAZYK M ETA Q UOTES L ANGUAGE 4 funkciu deinit(), ktorej odovzdá riadenie. Vykonanie funkcie je potrebné pre korektné ukonˇcenie behu programu a korektné ukonˇcenie jeho operácií (uzavretie alebo zmazanie objednávok, odstránenie grafických objektov z okna grafu). Po ukonˇcení vykonávania funkcie deinit() je kontrola opät’ vrátená klientskému terminálu. V prípade volania užívatel’skej funkcie je riadenie posunuté volanej funkcie. Po ukonˇcení behu vráti funkcia riadenie naspät’ funkcii, od ktorej ho dostala.
Obr. 4.2: Schéma znázornuje ˇ priebeh vykonávania programu, prebrané z [14]
Žlté hrubé šípky ilustrujú samotný priebeh programu. Udávajú poradie, v akom sa vykonávajú jednotlivé cˇ asti programu. Modré šípky znázornujú ˇ cˇ ítanie hodnôt z preddefinovaných premenných. Žlté tenké 22
4. P ROGRAMOVACÍ JAZYK M ETA Q UOTES L ANGUAGE 4 šípky vpravo zobrazujú volanie užívatel’ských funkcií špeciálnymi funˇ kciami. Cervené šípky reprezentujú akciu (manipulácia s objednávkami). Žlté tenké šípky vl’avo znázornujú ˇ posúvanie riadenia medzi funkciami.
23
5 Skript Skript je jednoduchý program urˇcený k jednorázovému použitiu. Po spustení prebehne vykonanie len jedenkrát. V skripte je špeciálna funkcia init() volaná a vykonaná najviac jedenkrát a to bezprostredne po tom ako je skript pripojený ku grafu. Špeciálna funkcia start() je volaná práve jedenkrát, ihned’ po inicializácii programu vo funkcii init(). Špeciálna funkcia deinit() je volaná najviac jedenkrát pri ukonˇcení programu (odobraním z grafu) alebo pri nahradení programu novou inštanciou toho istého programu. [12]
5.1 Jednoduchá ukážka Nasledujúci príklad demonštruje uˇcebnicové použitie skriptu SimpleScript, ktorý do dialógového okna vypíše aktuálnu cenu ask pre daný menovy pár.
Obr. 5.1: Zdrojový kód skriptu SimpleScript
24
5. S KRIPT
5.2 Praktická ukážka Okrem hore uvedeného príkladu obsahuje príloha d’alšie dva skripty. Skript s názvom DeletePendingOrders zmaže všetky cˇ akajúce objednávky. Tento skript je výborne uplatnitel’ný v reálnom prostredí, kde obchodník plánuje svoje obchody dopredu na stanovených cenových hladinách. V prípade, že sa jeho predpoklady nenaplnia, skript zmaže všetky plánované obchody. Pre potreby rýchleho otestovania správnej funkˇcnosti skriptu na mazanie objednávok bol vytvorený skript s názvom CreatePendingOrders. Tento program vytvorí cˇ akajúcu objednávku každého typu (sell stop, buy stop, sell limit, buy limit) vo vzdialenosti 200 bodov od aktuálnej ceny ask, respektíve bid.
25
6 Indikátor Vo všeobecnosti platí, že indikátor je matematický výpoˇcet aplikovaný na cenu alebo objem obchodov daného aktíva. Jeho výsledkom je hodnota, ktorá sa používa k odhadu budúcich zmien ceny [1]. V prostredí jazyka MQL4 indikátor predstavuje program reflektujúci stav trhu, prípadne závislosti jednotlivých veliˇcín. Indikátor je vo väˇcšine prípadov reprezentovaný aktualizujúcim sa grafickým objektom. Princíp jeho práce spoˇcíva v pravidelnom odosielaní údajov klientskému terminálu prostredníctvom zásobníkov, ktoré predstavujú komunikaˇcný kanál. Z pohl’adu programátora ide o miesto v pamäti uchovávajúce cˇ iselné informácie o indikátore [15]. Priebeh výpoˇctu indikátoru, komunikácia s terminálom a zobrazenie informácií majú nasledujúci sled: 1. výpoˇcet prebieha v kóde a výsledná cˇ iselná hodnota je priradená na odpovedajúce miesto v poli indikátora 2. hodnoty prvkov pol’a sú odoslané terminálu prostredníctvom zásobníka 3. terminál premietne hodnoty zo zásobníka do grafickej reprezentácie na grafe Poˇcet zásobníkov pre jeden indikátor je obmedzený na osem, pricˇ om indexovanie zaˇcína od nuly. Každý grafický objekt (napríklad cˇ iara, histogram) by mal mat’ pridelený vlastný zásobník, ktorému odpovedá práve jedno pole s výpoˇctom. V indikátore je špeciálna funkcia init() volaná a vykonaná bezprostredne po tom ako je spustený klientský terminál (za predpokladu, že je zobrazený graf s indikátorom), po zmene menového páru alebo cˇ asového rámca, po opätovnej kompilácii kódu v MetaEditore alebo po zmene vstupných parametrov pre nastavenie indikátora. Špeciálna funkcia start() je volaná a vykonaná ihned’ po vzniku nového tiku, po spustení programu, po zmene vel’kosti okna grafu, po zmene menového páru, po štarte klientského terminálu (za predpokladu, že je zobrazený graf s indikátorom) alebo po zmene cˇ asového rámca. Špeciálna funkcia deinit() je volaná a vykonaná po ukonˇcení programu (odobratí z okna grafu). Funkcia nie je volaná v prípade, 26
6. I NDIKÁTOR že do grafu je pridaný iný indikátor. V jednom okne môže koexistovat’ viacero indikátorov [12].
6.1 Praktická ukážka Na priloženom kompaktnom disku sa nachádza jedna ukážka užívatel’ského indikátora. Indikátor s názvom BasicLineIndicator vykreslí do grafu cˇ iaru, kde hodnota pre každú sviecu je vypoˇcítaná ako vážený priemer jej štyroch cien (otváracia, zatváracia, najvyššia, najnižšia).
27
7 Expertný poradca Expertný poradca je automatický obchodný systém, ktorý umožnuje ˇ plnú automatizáciu obchodovania, cˇ ím sa stáva užitoˇcným pomocníkom pri zostavení obchodnej stratégie. V expertnom poradcovi je špeciálna funkcia init() volaná a vykonaná bezprostredne po tom ako je spustený klientský terminál, po zmene symbolu, po zmene cˇ asového rámca, po opätovnej kompilácii kódu v MetaEditore, po zmene vstupných parametrov pre nastavenie EA alebo po prihlásení na iný úˇcet. Špeciálna funkcia start() je volaná a vykonaná ihned’ po vzniku nového tiku. Pre zachovanie atomickosti funkcie je poˇcas jej vykonávania ignorovaný každý nový tik. Po ukonˇcení funkcie a odovzdaní riadenia terminálu je funkcia pripravená na opätovné spustenie. Funkcia nie je spustená ak je otvorené okno pre nastavenie parametrov programu. Podobne okno môže byt’ otvorené len v prípade, ak nie je funkcia momentálne spustená, inými slovami cˇ aká na nový tik. Špeciálna funkcia deinit() je volaná najviac jedenkrát pri ukonˇcení programu (odobraním z grafu) alebo pri nahradení programu novou inštanciou toho istého programu. Platforma MetaTrader 4 obsahuje tlaˇcítko pre zakázanie použitia expertného poradcu. Funkcia je volaná len v prípade, že je povolené používanie poradcu. Ak je poˇcas behu funkcie zakázané použitie poradcu, funkcia nie je prerušená, jej beh je dokonˇcený. [12]
7.1 Praktická ukážka Pravidlá obchodovania pre expertného poradcu LemmaEA nachádzajúceho sa v prílohe boli zostavené následovne: •
vždy je otvorený len jeden obchod. Ochoduje sa každý (obchodný) den. ˇ
•
cˇ as obchodovania je možné nastavit’ pri spustení poradcu. Nastavuje sa hodina pre spustenie (parameter startHour) a hodina pre ukonˇcenie (parameter stopHour) behu. Poradca spracuje i nastavenie cˇ asu, ktoré zah´rna ˇ zaˇciatok nového dna ˇ (prechod cez polnoc). 28
7. E XPERTNÝ PORADCA •
poradca umožnuje ˇ predˇcasné uzavretie pozície, ak pozícia dosiahla cielený zisk (parameter TakeProfitPips) alebo stratu (parameter StopLossPips). V prípade nastavenia parametrov na nulové hodnoty je pozícia uzavretá na základe signálu z indikátora.
•
signál k otvoreniu obchodu je urˇcený ako zmena znamienka hodnoty indikátoru OSMA1 . Indikátor plní úlohu ukazovatel’a smeru trendu. Ak prejde OSMA nad nulu, ide o signál k nákupu. Ak prejde OSMA pod nulu, ide o signál k predaju. Indikátor má štandardné nastavenie periód 12, 26, 9. Nastavenie periód je možné menit’ (parametre FastEma, SlowEma, Signal) .
•
sgnál k uzavretiu obchodu je urˇcený ako zmena znamienka hodnoty indikátoru opaˇcným smerom. Potom každý signál k otvoreniu novej pozície znamená uzavretie predošlej otvorenej pozície (ak existuje).
•
nastavenie objemu je možné menit’ (parameter VolumeLots), východiskové nastavenie je jeden lot.
7.2 Spustenie testu Ked’že dáta od rôznych brokerov sa môžu od seba odlišovat’, existuje urˇcitá pravdepodobnost’, že dáta nie sú korektné. Chyby sa môžu prejavit’ ako nepresnost’ v cenách, cˇ o okrem skreslenia výsledku nie je zásadný problém. Závažným problémom sú dáta nespojité alebo inak poškodené. Preto je doporuˇcené test spustit’ na viacerých dostupných inštanciách platformy MetaTrader 4. Každá inštancia je poskytovaná poskytovaná iným brokerom, ktorý disponuje vlastnými dátami. V cˇ ase testovania poradcu (máj 2012) nebolo možné zaistit’ správne fungovanie poradcu nad dátami platformy zo zdroja [5]. Pozitívne výsledky boli dosiahnuté na platforme zo zdroja [16].
1.
je skratkou pre Oscillator of Moving Average
29
8 Záver Ciel’om bakalárskej práce bolo preskúmat’ a popísat’ dostupné riešenia pre algoritmické obchodovanie na medzinárodnom menovom trhu. Za týmto úˇcelom je práca rozdelená do dvoch logických celkov, teoretickej a praktickej. V rámci teoretickej cˇ asti práce som cˇ itatel’ovi ozrejmil základné vlastnosti a princípy fungovania menového trhu. Súˇcast’ou teoretickej cˇ asti je porovnanie platforiem a výklad je sprevádzaný názornými ukážkami na vybranej platforme MetaTrader 4. Na základe nadobudnutých teoretických poznatkov sú v praktickej cˇ asti popísané a implementované možnosti programového spracovania.
8.1 Prínos a využitie práce Kompletné zhrnutie problematiky v jednej práci považujem za najväˇcší prínos práce. Relevantné zdroje informácií sú dostupné väˇcšinou v anglickom jazyku. Dostupná literatúra v cˇ eskom alebo slovenskom jazyku zväˇcša nepokrýva požadovaný rozsah, prípadne je ponúkaná ako komerˇcný produkt, respektíve školenie. Predložená práca tak môže poslúžit’ ako vhodný sprievodca pri samoštúdiu tejto sféry. Demonštrácia vybraných vlastností je funkˇcná, zdrojové kódy sú obsiahnuté v prílohe a môžu teda poslúžit’ ako inšpirácia pre vlastné programy.
8.2 Možnosti nadviazania Na bakalársku prácu je možné nadviazat’ niekol’kými d’alšími krokmi. Prvou z možností je vytvorit’ obdobný dokument pre novšiu verziu platformy MetaTrader vo verzii 5, ktorá už podporuje možnost’ ladenia (debugging) programov pomocou umiestnenia záchytných bodov (breakpoint) priamo v zdrojom kóde. Táto technika podstatne zefektívnuje ˇ proces vývoja programu. Platforma MetaTrader 5 disponuje novým jazykom MetaQuotes Language vo verzii 5, ktorý vychádza z jazyka C++. MQL5 je objektovo orientovaný jazyk a spolu s novou verziou platformy môže znamenat’ výrazný posun v metodike vývoja. Nároˇcnejšia, avšak zaujímavejšia možnost’ nadviazania na nado30
8. Z ÁVER budnuté znalosti by sa mohla zaoberat’ oblast’ou realizovania obchodov s vysokou frekvenciou (high-frequency trading). Pre reálne nasadenie a úˇcinnost’ HFT stratégie je potrebné zaistit’ použitie výkonnej výpoˇcetnej infraštruktúry, cˇ o by z finanˇcného hl’adiska mohla byt’ nákladná položka. Zostavenie vhodného matematického modelu je predmetom preukázania hlbokých matematických znalostí, cˇ o by mohlo byt’ zaujímavé predovšetkým pre študentov matematických programov.
31
Literatúra [1] L. Hartman, O. Turek. První kroky na FOREXu. Computer Press, 2009. [2] Wikipedia Authors. Foreign exchange market. [cit. 18. apríla 2012], dostupné na:
. [3] Ronald Izip. Obchodovanie na forexe ii., 2010. [cit. 18. apríla 2012], dostupné na: . [4] L. Turek. První kroky na burze. Computer Press, 2008. [5] Metatrader 4. [cit. 18. apríla 2012], dostupné na: . [6] S Kovalyov. [cit. 10. apríla 2012], dostupné na: . [7] Metatrader 4 user guide, 2011. [cit. 12. apríla 2012], dostupné na: . [8] Pending orders. [cit. 20. apríla 2012], dostupné na: . [9] S Kovalyov. [cit. 12. apríla 2012], dostupné na: . [10] S Kovalyov. [cit. 23. apríla 2012], dostupné na: . [11] S Kovalyov. [cit. 25. apríla 2012], dostupné na: . 32
8. Z ÁVER [12] S Kovalyov. [cit. 16. apríla 2012], dostupné na: . [13] S Kovalyov. [cit. 28. apríla 2012], dostupné na: . [14] S Kovalyov. [cit. 18. apríla 2012], dostupné na: . [15] S Kovalyov. [cit. 29. apríla 2012], dostupné na: . [16] Metatrader 4. [cit. 10. mája 2012], dostupné na: .
33
A Obsah priloženého CD Príloha na kompaktnom disku je súˇcast’ou práce a obsahuje nasledujúce adresáre: •
thesis - Zložka obsahuje text práce vo formáte PDF.
•
thesisSrc - V adresári sa nachádza zdrojový text práce v LATEXu.
•
src - Adresár obsahuje zdrojové kódy scriptov, indikátoru a expertného poradcu.
34