\chapter{Úvod}
Obchodování na finančních trzích je pro mnohé investory možností jak zhodnocovat své jmění a pro obchodníky může být zaměstnáním na plný úvazek. V dnešní době k obchodování stačí, kromě vstupního kapitálu, pouze osobní počítač, přístup k internetu a základní znalosti jak obchodovat. Ovšem k úspěšnému obchodování je zapotřebí navíc velké množství znalostí, zkušeností a někdy i velká dávka štěstí. Štěstí ani zkušenosti se simulovat nedají, ale znalosti mohou být algoritmizovány v podobě pravidel pro uskutečňování obchodů a tím zaneseny do strategií obchodních systémů. Automatické obchodní systémy jsou kvůli rychlosti výpočtů a absenci omezení pracovní doby čím dál tím více populární. 

Strojové učení se v dnešní době úspěšně využívá při řešení řady různých problémů, kterými jsou například rozpoznávání řeči a obrazu, datová analýza, vyhledávání pomocí webových vyhledávačů a další. Schopnost algoritmů strojového učení rozpoznávat vzory v datech se začalo přenášet do analýzy finančních časových řad. 

V této práci popisuji analýzu a implementaci automatického obchodního systému, který je řízený rozhodnutími založenými na analýze pomocí strojového učení. Pro analýzu finančních řad pomocí strojového učení jsem vybral metodu podpůrných vektorů SVM.

V druhé kapitole budou uvedeny cíle této práce. Dále zde budou popsány metody a postupy, jak budu tyto cíle plnit. 

Ve třetí kapitole budou popsána teoretická východiska potřebná pro pochopení tématu práce. V první podkapitole se zabývám popisem a dělením finančních trhů. Další část je zaměřená na devizový trh, ve které popisuji základní principy a názvosloví. Porovnávám měnové páry a trhy, na kterých se měnové páry obchodují. V další části popisuji možnosti analýzy trhů z hlediska fundamentálních faktorů, psychologie a technických ukazatelů. V konceptu technické analýzy představuji několik indikátorů a jejich aplikaci. V poslední podkapitole se zabývám základními koncepty strojového učení a popisem metody podpůrných vektorů.

V následující kapitole je uvedena analýza řešeného problému, ve které se zabývám rozborem technik používaných pro tvorbu modelů, jejich optimalizací a evaluací. Dále budu popisovat způsoby úpravy dat, která SVM analyzují. V poslední části budu probírat způsob testování a optimalizace obchodních systémů.

V páté kapitole se budu zabývat implementací a tvorbou modelů pro predikci budoucích hodnot finančních řad. Modely budu následně testovat na historických datech a ověřovat jejich schopnost předpovídat budoucí hodnoty, které budou využity pro rozhodování při obchodech. V dalších podkapitolách budu popisovat implementaci obchodovacího systému s využitím předpovědí z minulé části. V poslední části budu hodnotit výkon výsledné strategie z hlediska generovaného zisku.

\chapter{Cíle práce, metody a postupy}
Cílem této práce je návrh a implementace automatického obchodního systému operujícího nad měnovými trhy, který bude generovat zisk. Systém bude svá rozhodnutí řídit na základě predikcí vytvořeného modelu, který využívá techniku strojového učení Support vector machines (SVM, metoda podpůrných vektorů). 

Dílčí cíle jsou:
\begin{itemize}
\item{Výběr metody}, která určí, jakou hodnotu bude model SVM predikovat.
\item{Výběr modelu}, který bude mít nejlepší výkon mezi ostatními porovnávanými modely z hlediska přesnosti predikce.
\item{Implementace obchodovacího systému}, který využívá dříve zvolený model pro uskutečňování obchodů.
\item{Optimalizace a testování obchodovacího systému,} při nichž vyberu systém s nejvyšším výkonem z hlediska maximalizace zisku.
\end{itemize}

Z metod strojového učení jsem pro predikci vývoje finančních řad použil metodu podpůrných vektorů SVM. Metodu využívám pro vytváření modelu, u kterého budu testovat jeho schopnost predikovat spojité hodnoty nebo klasifikovat budoucí směry trendů měnových kurzů. V případě určování spojitých hodnot kurzu budu analyzovat schopnosti predikce modelu pomocí měření velikosti odchylky predikovaných hodnot od reálných hodnot. Při klasifikaci používám pro měření úspěšnosti hodnotu přesnosti a velikost chyby. Parametry modelu budu optimalizovat na množině trénovacích dat. Poté budu vyhodnocovat úspěšnost predikce na množině trénovacích a testovacích dat.

Pro modelování klasifikátoru jsem použil statistický program R Project s balíky \emph{e1071} a \emph{caret} podporující výpočet SVM. Dále jsem využil balík \emph{TTR}, který obsahuje výpočty základních technických indikátorů a nástroje na práci s časovými rámci. 

Pro implementaci, optimalizaci a testování automatického obchodního systému používám platformu Metatrader 4. Strategie je zapsána v programovacím jazyku MetaQuotes Language 4 (MQL4). Optimalizace a testování probíhá na vzorku historických dat. Pro optimalizaci používám dvě třetiny z celkových dat a pro testování zbylou třetinu. 

Parametry obchodovacího systému budu optimalizovat na části historických dat určených pro backtesting. Dále budu hodnotit výkon obchodovacího systému podle generovaného zisku a podle relativního poklesu zůstatku. Zisk se pokouším maximalizovat a pokles minimalizovat. 

V poslední fázi budu testovat výkon obchodovacího systému na množině historických dat, která je určená pro Walk-forward analýzu. Budu ověřovat výkon systému na několika měnových párech a budu hodnotit výkon obchodovacího systému z hlediska generovaného zisku.

\chapter{Teoretická východiska práce}
V této kapitole jsou probírány použité metody a postupy z teoretického hlediska. 
\bigskip
\section{Finanční trhy}
Trhy jako takové slouží ke směně mezi poptávajícími a nabízejícími. Na finančních trzích jsou směňovány volné finanční prostředky. Subjekty s přebytkem disponibilních finančních prostředků je nabízejí těm, kteří potřebují kapitál.

\subsection{Základní členění finančních trhů}
Finanční trh lze dělit několika způsoby. Členění, které je zde uvedeno vychází z jednotlivých finančních investičních instrumentů, které jsou obchodovány na příslušných obchodních segmentech. 
Základní dělení podle~\cite{rejnus}:
\begin{itemize}
\item{Peněžní trh} je takový, na kterém se setkávají subjekty s přebytkem peněžních prostředků s těmi, kteří jich mají nedostatek. Typickou vlastností tohoto trhu je krátká doba splatnosti při obchodování. Obvykle do jednoho roku.
\item{Kapitálový trh} je typický dlouhodobými investicemi při obchodování s finančními instrumenty, kterými jsou dlouhodobé úvěry a dlouhodobé cenné papíry.
\item{Trhy s cizími měnami} jsou zaměřeny na směňování různých konvertibilních měn.
\item{Trhy drahých kovů} lze v podstatě zařadit mezi komoditní trhy, ale z historického hlediska se kovy jako zlato a stříbro považují za finanční instrumenty.
\end{itemize}

\subsection{Devizové trhy s cizími měnami}
Trhy s cizími měnami se dále dělí na trhy valutové a devizové. Valutové trhy používají jako finanční instrumenty hotovostní formy cizích měn a obchoduje se zde s valutovými kurzy.
Na devizových trzích dochází ke směnám bezhotovostních forem konvertibilních cizích měn, čímž dochází k ovlivňování jejich kurzů. Působí zde dealeři obchodních a centrálních bank a makléři. 
Makléři neboli brokeři, fungují jako zprostředkovatelé mezi těmi co poptávají a těmi co nabízejí~\cite{rejnus}.

\bigskip
\section{Forex}
Slovo Forex pochází z anglického Foreign Exchange, což lze přeložit jako směna zahraničních měn. Jedná se o celosvětový devizový trh, který je decentralizovaný, největší a je otevřen 24 hodin pět dní v týdnu. Obchodníci na Forexu mohou dosahovat zisků při růstu i poklesu trhu. V této podkapitole jsou uvedeni účastníci trhu, názvosloví používané při uzavírání obchodů a podmínky obchodování z hlediska vybraných měnových párů a výběru času kdy a jak dlouho obchodovat~\cite{lien2008day}.

\subsection{Účastníci trhu}
Subjekty účastnící se obchodů na Forexu je možné dělit mnoha způsoby. Jestliže je budeme rozlišovat podle jejich zájmů, bude dělení podle ~\cite{rejnus} takové:
\begin{itemize}
\item{Centrální banky} jsou instituce, které pomocí obchodování na Forexu prosazují měnovou politiku. Nejde jim primárně o vykazování zisků, ale o stabilizaci, oslabování nebo posilování tuzemské měny formou devizových intervencí.
\item{Obchodní banky} jsou nejvýznamnějšími účastníky na Forexu. Do této kategorie také řadíme pojišťovny, investiční společnosti a investiční fondy, penzijní společnosti a další. Základním motivem těchto institucí je dosahování zisků na devizovém trhu pomocí rozdílů z prodejních a kupních cen daných měnových párů. 
\item{Brokerské společnosti} zprostředkovávají obchody a pro své klienty poskytují služby za provizi.
\item{Individuální obchodníci} jsou drobní investoři, kteří obchodují, aby dosahovali zisků. 
\end{itemize}

\subsection{Názvosloví Forexu}
Základní názvosloví týkající se kurzů~\cite{rejnus}: 
\begin{itemize}
\item{Lot} je standardní množstevní jednotka. Standardní lot odpovídá 100 000 jednotek hlavní měny měnového páru. Jednotlivý brokeři umožňují svým zákazníkům uzavírat obchody i s menším objemem, na základě individuálního smluvního usnesení.
\item{Bod, pip a tick} jsou názvy, které odkazují na změnu kurzu. Bod je z nich největší a určuje nejmenší možnou změnu ceny nalevo od desetinné čárky. Pip a tick jsou nejmenší možná změna napravo od desetinné čárky. Pip a tick jsou v podstatě totéž, s tím rozdílem, že pojem pip se užívá ve Forexu, zatímco tick na jakémkoliv trhu~\cite{1_milton_2016}.
\item{Ask a bid} jsou hodnoty kurzu pro prodej a nákup stanovené tvůrci měnového trhu. 
\item{Spread} popisuje rozdíl mezi nákupním a prodejním kurzem. Jeho rozpětí určuje náklady obchodníků a zisky pro dealery. Spread se odvíjí od likvidity měny, objemu obchodů a konkurence. U měnového páru s největším množstvím obchodů bývá nejmenší, zatímco u exotických měn je nejvyšší.
\item{Margin} je v podstatě dluh, který slouží k vyrovnání ztrát při provádění obchodů.
\item{Leverage}, neboli páka, udává poměr mezi obchodovaným množstvím a množstvím finančních prostředků, které obchodník do transakce vložil. Margin a leverage jsou provázané a platí mezi nimi nepřímá úměrnost.
\end{itemize}

\subsection{Typy brokerů}
Výběr vhodného brokera je zásadní z několika hledisek. Jelikož na obchodech brokerské společnosti vydělávají, tak je možné setkat se i s případy, které jsou svým způsobem podvodné a poptávají nepřiměřeně vysoké poplatky za své služby, nebo využívají jiné praktiky, které jsou v rozporu s etikou. Před zvolením brokera je vhodné zaměřit se na následující kritéria~\cite{2011forex}:
\begin{itemize}
\item{Bezpečnost a likvidita} se značně liší podle toho, v které zemi je broker registrován. Společnosti, které nejsou regulovány orgány z Evropy nebo Spojených států nejsou příliš důvěryhodné a nemusí být pojištěné proti úpadku. Důvěryhodní brokeři navíc zaručují likviditu a naplnění objednávek bývá bezproblémové.
\item{Obchodní platforma} je důležitá z hlediska spolehlivosti a přehlednosti programu.
\item{Garance stop a limit objednávky} se liší mezi společnostmi. Někteří brokeři garanci neposkytují a přeposílají transakce na mezibankovní trh. Vyznačují se tím, že po zadání příkazu dělají rekotaci ceny, to znamená, že znemožňují vstup za cenu, kterou jsme si zvolili, ale za horší.
\item{Minimální slippage} je rozdíl mezi cenou deklarovanou brokerem a reálnou cenou při vstupu do obchodu. 
\item{Minimální vklad a zůstatek} je vhodné vybírat tak, aby splňoval potřeby vybrané strategie.
\item{Poplatky} ve formě spreadu se u různých brokerů liší jak ve velikosti, tak ve stálosti. Mohou být fixní, nebo proměnné a měly by se pohybovat od 2 do 5 pipů.
\item{Pákový poměr} je určujícím kritériem pro stanovení rizika. Vyšší pákové efekty mohou přinést vyšší zisky, ale současně i vyšší ztráty.
\item{Obchodní politika} ve smyslu půjčování na marži a velikosti úroků.
\item{Poctivé a průhledné transakce} pomohou odhalit, za co se ve skutečnosti platí a tím zaručit, že si makléř neúčtuje víc, než je nutné.
\item{Podpora} od společnosti ve formě telefonické, on-line a e-mailů pro rychlé řešení problémů.
\end{itemize}

Jednotlivé brokery je možné dělit podle toho, jestli jsou tvůrci trhu, nebo nemají dealing desk do čtyř hlavních tříd: Dealing Desk, No Dealing Desk, Straight Through Processing a Electronic Communications Network~\cite{2011forex}:

\subsubsection{Dealing Desk broker}
Dealing Desk broker je broker, který je tvůrce trhu ve smyslu, že vytváří podmínky pro své klienty. Jestliže chce obchodník nakupovat, tak mu broker prodává a naopak. Broker vydělává na spreadech a ještě v situacích, kdy klient prodělává. Jelikož Dealing Desk brokeři mohou manipulovat své nabídky a transakce nejsou zcela průhledné, může být tento koncept u nedůvěryhodného brokera problematický.

\subsubsection{No Dealing Desk broker}
NDD broker umožňuje vstup na trh bez potvrzování příkazů. Jestliže je broker poctivý, tak záměrně neprodlužuje potvrzování příkazů a nedělá rekótování cen. Vydělává buď na provizi z obchodu, nebo navyšováním spreadu. 

\subsubsection{Straight Through Processing broker}
Podmnožinou No Dealing Desk konceptu jsou Straight Through Processing brokeři, kteří zadávají klientovy příkazy přímo bance a slouží tak jako prostředníci. Vydělávají na přirážkách na spreadu, který poskytuje banka. Tím, že příkazy předávají bankám okamžitě, umožňují zákazníkům obchodovat na reálném trhu.

\subsubsection{Electronic Communications Network broker}
ECN brokeři nevydělávají na spreadech, ale na provizích z obchodů. ECN spadá pod kategorii No Dealing Desk brokerů, proto zprostředkovává klientům přístup na reálný trh. Umožňuje obchodníkům komunikovat uvnitř systému s ostatními účastníky trhu. Díky tomu, že ECN brokeři vydělávají na provizích, tak je v jejich zájmu, aby jejich klienti vydělávali.

\subsection{Typy obchodních příkazů}
Při vstupu na Forex je možné využít různé typy obchodních příkazů podle potřeb naší strategie. Základní výčet je zde:
\begin{itemize}
\item{Buy/sell} slouží pro okamžitý nákup/prodej za danou současnou tržní cenu.
\item{Buy/sell stop} je čekající pokyn, který se provede, pokud cena prorazí zadanou hodnotu. Jeho využití spočívá v tom, že předpokládáme, že se zvyšující, resp. snižující trend udrží, jestliže se cena dostane na danou úroveň.
\item{Buy/sell limit} je typ čekajícího pokynu, který se využívá v případě, když očekáváme, že se vývoj ceny obrátí po dosažení určité úrovně. 
\end{itemize}

Další důležitou složkou obchodních příkazů jsou hodnoty Take Profit (TP) a Stop Loss (SL). TP slouží k ukončení obchodu, jestliže dosáhne určitého zisku a SL, jestliže transakce dosáhne dané ztráty. SL může také ve výsledku generovat zisk, jestliže se posouvá při ziskovém obchodu~\cite{hartman2013}. 

\subsection{Měnové páry}
Při vzájemném obchodování dvou různých měn vznikají měnové páry. Symbol měny je tvořen dvěma písmeny, vyjadřujícími název státu a třetím písmenem pro název měny. Podle významnosti můžeme měny rozdělit do tří skupin:

\subsubsection{Hlavní měny}
Tyto měny jsou nejvíce obchodovány. S jejich likviditou souvisí velikost spreadu, která je u měnových párů tvořených kombinací hlavních měn nejnižší. 
\begin{itemize}
\item{USD} - Americký dolar
\item{EUR} - Euro
\item{GBP} - Britská libra šterlinků
\item{JPY} - Japonský jen
\item{CHF} - Švýcarský jen
\end{itemize}

\subsubsection{Vedlejší měny}
Vedlejší měny mají nižší likviditu, proto i v kombinaci s hlavní měnou bývá spread vyšší.
\begin{itemize}
\item{AUD} - Australský dolar 
\item{CAD} - Kanadský dolar 
\item{SEK} - Švédská koruna
\item{DKK} - Dánská koruna
\item{NZD} - Novozélandský dolar
\item{RUB} - Ruský rubl
\item{HKD} - Hongkongský dolar
\end{itemize}

\subsubsection{Exotické měny}
Měny s nízkou významností, o které není velký zájem, a proto se málo obchodují. S tím souvisí také spread, který je u těchto měn nejvyšší.
\begin{itemize}
\item{SGD} - Singapurský dolar 
\item{CZK} - Česká koruna
\item{ZAR} - Jihoafrický rand
\end{itemize}

Pro měnové páry je potřeba určit kurz tím, že vyjádříme poměr jedné měny k druhé. První měnu nazýváme základní a druhou denominační. Kurz nám poté udává, kolik potřebujeme zaplatit denominační měny, abychom dostali jednotku základní měny. 
Z uvedených hlavních měn je nejvýznamnější americký dolar, který tvoří hlavní měnové páry (angl. majors), kterými jsou EUR/USD, GBP/USD, USD/CHF a USD/JPY.
Další jsou křížové páry (angl. cross), pro které je charakteristické, že neobsahují americký dolar. U nich bývá obvyklá dvojitá konverze, kdy se základní měna převede na americký dolar a poté se USD mění na denominační měnu. To může způsobovat větší transakční náklady a tím i růst spreadu~\cite{rejnus}.

\subsection{Obchodní hodiny Forexu}
Obchod s cizími měnami probíhá 24 hodin denně 5 dní v týdnu. Důležitým specifikem Forexu je různé rozpětí pohybu měny v průběhu dne, které se odvíjí od toho, kdy jsou jednotlivé světové burzy otevřené. Znalost, ve které době v průběhu dne je pohyb kurzu dané měny nejvyšší anebo nejnižší dokáže obchodníkům pomoci zlepšit rozhodnutí, jak a kdy úspěšně investovat~\cite{lien2008day}.
Doby, ve kterých jsou burzy otevřené, se nazývají seance (angl. sessions) a jsou uvedeny v grafu \ref{fig: FXclock}. V následujícím rozdělení jsou uvedeny vlivy otevíracích časů jednotlivých burz na volatilitu hlavních měnových párů.

\bigskip
\begin{figure}[h]
\begin{center}
\scalebox{0.7}{\includegraphics{obrazky/forex_hours.eps}}
\caption[Obchodní hodiny Forexu]{\emph{Obchodní hodiny Forexu. } Na grafu jsou zobrazeny otevírací doby trhů podle Středoevropského času. Zdroj: Vlastní tvorba. }\label{fig: FXclock}
\end{center}
\end{figure}

\subsubsection{Asijská seance}
V průběhu asijské seance zabírá největší podíl obchodů Tokijská burza. Rozpětí kurzů bývá poměrně malé, přesto lze nalézt měnové páry s vyšší volatilitou vhodné pro krátkodobé obchody. Patří mezi ně především USD/JPY, GBP/CHF a GBP/JPY, které mají potenciál poměrně velkých zisků průměrně okolo 90 pipsů. Pro obchodníky s averzí k riziku jsou vhodné měnové páry AUD/JPY, GBP/USD a USD/CHF, které jsou vhodné pro středně až dlouhodobé obchody a k rozhodování o vstupu mohou pomoci faktory fundamentální analýzy. Zároveň nižší volatilita pomáhá udržovat kurz méně náchylný k nepravidelným pohybům způsobeným intradenními spekulativními obchody~\cite{lien2008day}.

\subsubsection{Americká seance}
Burza v New Yorku je se svými objemy obchodů druhá největší na světě. Měny vhodné pro obchodníky, kteří preferují obchody s vyšší mírou rizika, jsou GBP/USD, USD/CHF, GBP/JPY a GBP/CHF. Rozpětí kurzů těchto měn se pohybuje okolo 120 pipsů a je způsobeno přítomností dolaru v párech a to buď přímou, nebo na principu dvojité konverze. Pro obchody s nižší mírou rizika a dlouhodobé obchody je lepší vybrat páry s nižší volatilitou a současně vysokou likviditou, kterými obvykle bývají v průběhu americké seance USD/JPY, EUR/USD a CAD/JPY~\cite{lien2008day}. 

\subsubsection{Evropská seance}
Londýn je považován za největší a nejvýznamnější obchodní centrum světa. Vysoká likvidita a efektivnost během evropské seance přitahuje velké množství obchodníků a peněz na trh, proto je kurz velmi volatilní. Měnové páry s rozpětím průměrně 140 pipů jsou GBP/JPY a GBP/CHF. Další páry pro obchodníky s preferencí vyššího rizika jsou EUR/USD, USD/CAD, GBP/USD a USD/CHF s pohyby okolo 100 pipů. Nižší riziko při průměrném rozpětí 50 pipů přináší obchodování s NZD/USD, AUD/USD, EUR/CHF a AUD/JPY~\cite{lien2008day}.

\subsubsection{Překrytí evropské a americké seance}
Současné otevření trhů ve Spojených státech a v Evropě je spojené s vysokými pohyby kurzů všech párů obchodovaných v obou seancích. Doba jejich překrytí je proto vhodná pro intradenní obchodníky, kteří nemají čas obchodovat celý den~\cite{lien2008day}.

\subsubsection{Překrytí asijské a evropské seance}
V době, kdy se překrývají evropská a asijská seance, neprobíhá tak velké množství obchodů, proto je vhodná pro obchodníky s averzí k riziku, nebo k plánování strategie, než se otevřou jiné trhy~\cite{lien2008day}.

\subsection{Časové rámce obchodování}
Volba časového rámce je pro strategii obchodování určující. Platformy pro obchodování na Forexu zpravidla poskytují rámce od jedné minuty až po měsíc. Styly obchodování můžeme podle preferovaných délek časových úseků rozdělit do tří základních skupin: dlouhodobé, krátkodobé a intradenní obchodování~\cite{2011forex}.

\subsubsection{Dlouhodobé obchodování}
Dlouhodobé, neboli poziční obchodování vychází obvykle z denních nebo týdenních grafů a obchody trvají často několik měsíců nebo let. Výhody tohoto konceptu jsou takové, že nemusíme trh sledovat během dne a náklady plynoucí ze spreadů jsou vzhledem k obchodovaným částkám zanedbatelné. Na druhou stranu je potřeba zadat vysoké hodnoty StopLossu, aby nebyly obchody ukončované předčasně kvůli vysoké volatilitě kurzu. Další nevýhodou je nízký počet obchodů.

\subsubsection{Krátkodobé obchodování}
Obchodníci, kteří preferují krátkodobé obchodování, používají hodinové rámce a obchody trvají zpravidla několik hodin nebo dní. Oproti dlouhodobému obchodování je možné provádět více obchodů, což ale přináší nutnost častěji platit náklady v podobě spreadu. 

\subsubsection{Intradenní obchodování}
Při tomto obchodování je doba obchodů omezená jedním dnem, čili příkazy obchodníci nedrží přes noc. Časové rámce jsou obvykle minutové nebo pětiminutové. Intradenní obchodování má potenciálně mnoho příležitostí pro obchody a na trh můžeme vstupovat, i když máme malý účet. Nevýhodami jsou spready, které tvoří poměrně velkou část potenciálních výdělků a vysoká psychická náročnost spojená s velkým počtem výkyvů kurzu.
Speciálním případem intradenního obchodování je tzv. scalping, při kterém obchodníci využívají malých pohybů kurzu za velmi krátké časové období, obvykle v řádu několika minut.  

\bigskip
\section{Analýza trhu}
Pomocí zkoumání trhu z různých hledisek je možné odhadovat budoucí vývoj kurzů. Z toho je možné určit klíčové okamžiky pro uskutečnění obchodu. V této podkapitole je probírána fundamentální, psychologická a technická analýza trhu. 

\subsection{Fundamentální analýza}
Fundamentální analýza je velmi komplexní druh analýzy, podle kterého se někteří obchodníci řídí. Je založena na studiu ekonomického, politického a sociálního stavu dané země. Zkoumá především makroekonomické ukazatele jako inflace, nezaměstnanost, úrokové sazby, mezinárodní toky investic a obchodů, měnovou politiku státu atd. Podle těchto ukazatelů se fundamentální analýza pokouší určit současný a budoucí vývoj trhu.
Vývoj trhu a pohyby kurzu měny jsou primárně určovány nabídkou a poptávkou. Nabídka, která převyšuje poptávku, bude snižovat hodnotu dané měny a stejně tak to platí i naopak~\cite{lien2008day}.
 
\subsection{Psychologická analýza}
Základním předpokladem psychologické analýzy je vliv masové psychologie na trh, který působí na účastníky trhu a tím ovlivňuje vývoj kurzu. Mezi nejvýznamnější teoretické koncepce psychologické analýzy jsou považovány Keynesova spekulativní rovnovážná hypotéza, Kostolanyho burzovní psychologie, Drasnarova koncepce psychologické analýzy a teorie spekulativních bublin. 

Keynesova hypotéza je založena na předpokladech, že narůstá podíl akcí vlastněných nezkušenými investory a reakce akciových trhů na události jsou nepřiměřené. Současně zmiňuje, že kolektivní psychologie velkého množství neinformovaných investorů ovlivňuje ceny akcií. Z těchto předpokladů vyplývá, že cenu a volatilitu vytváří spíš investoři, než fundamentální vlivy. Pokud bude chtít investor dosahovat zisk v krátkém období, bude se muset pokusit odhadovat reakce ostatních investorů.

Podle Kostolanyho jsou kurzy akcií v krátkém období ovlivňovány psychologií investičního publika a v dlouhém období se vývoj kurzu řídí fundamentálními faktory. Kostolany dělí účastníky na hráče, kteří usilují o co nejrychlejší zisk a jednají emocionálně a řídí se rozhodnutím většiny, a na spekulanty, kteří naopak cílí na dlouhodobé transakce podložené fundamentální analýzou a argumenty.

Drasnarova koncepce vychází z protichůdného působení dvou lidských vlastností, chamtivosti a strachu na akciový trh. Pokud převládá chamtivost, tak stoupá poptávka a s ní rostou ceny akcí. S rostoucími cenami přichází strach ze ztráty nabytého zisku a investoři začnou akcie ve velkém prodávat. Tím se zvýší nabídka a ceny akcií začnou klesat. 

Teorie spekulativních bublin popisuje situace, kdy kurz klesá nebo stoupá, aniž by k tomu existovalo rozumné vysvětlení na úrovni fundamentálních faktorů. V těchto situacích dochází k nečekanému a prudkému obratu směru pohybu kurzu. Spekulativní bubliny vznikají při nepřiměřené reakci na nějakou událost ovlivňující rozhodování investorů~\cite{rejnus}.

V zahraniční literatuře se v souvislosti vlivu psychologie na trh často vyskytuje termín analýza sentimentu. Sentiment popisuje názory, emoce a náhledy společné pro skupinu investorů. Jako určující faktor může být sentiment užitečný zvláště při krátkodobých obchodech, kde může optimismus nebo pesimismus investorů výrazně hýbat s cenou a vytvářet trend, aniž by pohyb měl racionální důvody vycházející z jiných druhů analýz~\cite{2_thorp_2004}.

\subsection{Technická analýza}
Technická analýza se zaměřuje na studium historie pohybů ceny. Predikce je založená na hypotéze, že se tendence v historických cenách opakují, a proto se budou vyskytovat i v budoucích datech. Dalším předpokladem je, že vývoj ceny odráží všechny aspekty trhu, tím pádem jediné co je potřeba pro učinění obchodního rozhodnutí, je studium ceny~\cite{lien2008day}. 
Cílem technické analýzy je analyzovat vývoj kurzu, předpovídat směr tohoto vývoje a určit co nejlepší načasování k provedení obchodu. Tato analýza je krátko až střednědobá. Jako nástroje slouží především grafická analýza a indikátory~\cite{rejnus}.

\subsection{Grafy}
Jedním ze základních nástrojů technické analýzy jsou grafy, které znázorňují pohyby cen. Ze směru, kterým se trh ubírá, můžeme určit vzestupný nebo sestupný trend. Bývá obvyklé, že čím se trend déle drží, tím je silnější. Kromě trendu můžeme z grafu určovat podporu (angl. support) a odpor (angl. resistance), které slouží k určení hladiny, na které má cena tendenci se zastavit a obrátit vývoj opačným směrem. Rozlišujeme tři základní typy grafů: sloupcové, svíčkové a čárové. U sloupcových a svíčkových grafů můžeme v jednotlivých časových úsecích zobrazit 4 ceny: Open, High, Low a Close (viz \ref{fig:grafy}
). Open je cena, která platila při vstupu a Close při uzavírání časového úseku. High a Low jsou nejvyšší a nejnižší cena, kterou trh v daném úseku dosáhnul~\cite{hartman2013}.

\bigskip
\begin{figure}[h]
\begin{subfigure}[b]{0.5\textwidth}
\centering
\scalebox{0.4}{\includegraphics{obrazky/candle_sticks.eps}}
\caption{Svíčkový graf} 
\end{subfigure}
\begin{subfigure}[b]{0.5\textwidth}
\centering
\scalebox{0.4}{\includegraphics{obrazky/bar_chart.eps}}
\caption{Sloupcový graf} 
\end{subfigure}
\caption[Svíčkový a sloupcový graf]{\emph{Svíčkový a sloupcový graf.} Na obrázku a) je svíčkový graf se znázorněnými hodnotami Open, High, Low a Close. Obrázku b) je stejně označený sloupcový graf. Zdroj: Vlastní zpracování}\label{fig:grafy}
\end{figure}

\subsection{Indikátory sledující trend}
Pro sledování trendu se používají převážně klouzavé průměry, nebo jejich kombinace a různé variace. Tyto indikátory nejsou schopny předpovídat začátek, nebo konec trendu, protože se počítají z aktuální ceny a reagují na její změnu. Díky zpoždění proto není vhodné je používat pro signalizaci vstupu do obchodu, ale pouze jako podpůrný prostředek k určení trendu. Variací a typů indikátorů existuje velké množství, zde je uvedeno několik z nich~\cite{hartman2013}:

\subsubsection{Klouzavé průměry}
Zprůměrováním určitého počtu za sebou jdoucích období dostaneme klouzavý průměr. K výpočtu můžeme využívat Open, High, Low, Close nebo jejich průměr. Klouzavé průměry se dělí do dalších skupin~\cite{hartman2013, rejnus}:
\begin{itemize}
\item{SMA} je jednoduchý klouzavý průměr (viz Obr.~\ref{fig: SMA}). Výpočet SMA je nejjednodušší z klouzavých průměrů, počítá se jako aritmetický průměr za dané období. Nerozlišují se starší a novější hodnoty, tudíž jsou váhy všech cen stejné.
\item{WMA} je vážený klouzavý průměr. Výpočet WMA je podobný jako u jednoduchého klouzavého průměru s tím rozdílem, že se novějším kurzům přidělují vyšší váhy. Váhami se poté vynásobí příslušné kurzy a suma se vydělí součtem vah.
\item{EMA} je exponenciální klouzavý průměr a v dané periodě přikládá vyšší hodnotu posledním časovým úsekům. Jedná se o vážený průměr, který má váhy rozdělené exponenciálně. 
\item{SSMA} je vyhlazený klouzavý průměr
\item{LWMA} je lineární vážený klouzavý průměr.
\end{itemize}

\bigskip
\begin{figure}[h]
\begin{center}
\scalebox{0.6}{\includegraphics{obrazky/blackSMA.png}}
\caption[Klouzavý průměr]{\emph{Klouzavý průměr. } Na obrázku je znázorněn jednoduchý klouzavý průměr s periodou 14 na čtyřhodinovém grafu. Zdroj: Metatrader}\label{fig: SMA}
\end{center}
\end{figure}

Při obchodování se v praxi nejčastěji používají klouzavé průměry v kombinaci s kurzem nebo s dalšími klouzavými průměry. Pro variantu kombinace klouzavého průměru s kurzem se sledují momenty, kdy se vzájemně protnou. Pro nákupní signál platí, že křivka kurzu protne klouzavý průměr zdola nahoru, pro prodejní signál křivka kurzu protne průměr směrem shora dolů. Kombinace dvou klouzavých průměrů, jednoho s delší a jednoho s kratší periodou, je založená na podobném principu. Sleduje se jejich protnutí a generují se obchodní signály. Signál pro nákup nastává, když krátkodobý klouzavý průměr protne dlouhodobý ve směru vzhůru. Prodejní signál se generuje, když je protnutí v opačném směru~\cite{hartman2013, rejnus}.

\subsection{Oscilátory}
Oscilátory sledují aktuální překoupenost a přeprodanost trhu a tím nám mohou pomoci určit moment, kdy vstoupit do obchodu. Obecně oscilátory kmitají mezi dvěma limitními body nebo stavy. 

\subsubsection{RSI}
Index relativní síly měří vnitřní sílu měnového páru a jeho hodnoty se pohybují v rozmezí od 0 do 100. Vzorec pro výpočet je následující:
\begin{equation}
RSI = 100 - 100/(1 + RS)
\end{equation}
RS je poměr součtu kladných cenových změn za dané časové období k součtu záporných cenových změn za dané časové období. Nejčastěji používaným časovým rozpětím je 14, potom 9 a 26, přičemž platí, že čím kratší je rozpětí, tím víc ukazatel osciluje. Pro určování přeprodanosti uvažujeme hodnoty oscilátoru nižší než 30 a překoupenost indikují hodnoty vyšší než 70. Další možností indikace pro změnu na trhu je divergence mezi oscilátorem a cenovým grafem~\cite{hartman2013}.

\subsubsection{CCI}
CCI je zkratka z anglického Commodity Chanel Index a popisuje oscilátor, který měří pohyby ceny okolo statistického průměru. Jestliže se hodnoty pohybují nad hodnotami 100 tak to znamená, že ceny jsou neobvykle vysoko a hodnoty nad 200 značí překoupenost trhu. Naopak hodnoty pod -100 znamenají nízkou cenu a pod -200 je přeprodanost trhu. Vzorec pro výpočet je 
\begin{equation}
CCI = (cena - MA/(0,015 * D))
\end{equation}
MA je klouzavý průměr a D je normální odchylka. Další možností využití CCI je sledovat divergenci oproti cenovému grafu~\cite{hartman2013}.

\subsubsection{Williams Percent Range}
Williams \%R určuje přeprodanost, která je signalizována hodnotami od -100 do -80, a překoupenost pro hodnoty od -20 do 0. Při využití tohoto indikátoru hledáme divergence a optimalizujeme vstup do obchodu podle překoupenosti nebo přeprodanosti trhu. Vzorec pro výpočet je: 
\begin{equation}
\%R = (Max(n) - Close * (Max(n) - Min(n) * 100)) 
\end{equation}
Max(n) je maximum, Min(n) je minimum za n předchozích časových period a Close je uzavírací cena rámce~\cite{hartman2013}.

\subsubsection{Stochastic}
Oscilátor Stochastic se skládá z pomalé \%D a rychlé \%K křivky. Pro výpočet křivek se používají vzorce: 
\begin{equation}
\%D = 100 * (H_n / L_n)
\end{equation}
\begin{equation}
\%K = 100 * ((C - L) / (H - L)) 
\end{equation}
$C$ je zavírací cena, $H$ je nejvyšší a $L$ nejnižší cena v daném časovém úseku, $H_n$ je součet $(C - L)$ a $L_n$ je součet $(H - C)$ za n časových period. Pomalá křivka se používá při určování stavu trhu. Hodnoty pod 30 \% znamenají přeprodanost a nad 70 \% překoupenost trhu. V kombinaci krátké a pomalé křivky se sleduje jejich vzájemné překřížení. Při překřížení křivky \%K ve směru nahoru nad \%D se doporučuje zadat příkaz pro nákup a v opačném případě pro prodej~\cite{hartman2013}.

\subsubsection{MACD}
MACD je zkratka z anglického Moving Average Convergence Divergence. Jedná se o oscilátor vytvořený rozdílem dlouhodobého a krátkodobého exponenciálního klouzavého průměru. Do grafu s MACD je zanesena nulová linie, která je vyjádřením dlouhodobého klouzavého průměru a spouštěcí linie (angl. trigger), která je tvořená klouzavým průměrem s periodou 9 dní. Jestliže MACD překříží spouštěcí linii ze spodu, tak je to signál pro nákup, v opačném případě pro prodej. Poloha MACD vzhledem k nulové linii určuje trend, jestliže je nižší než nula, tak je trend klesající a pro hodnoty vyšší než nula je rostoucí~\cite{rejnus}.

\subsubsection{Risk management}
Riskem obecně rozumíme závislost budoucích zisků nebo ztrát na externích faktorech, které není možné přesně předpovědět a kontrolovat. Hlavním úkolem řízení rizik je odhalit veškerá rizika, která jsou schopna ohrozit cíl. Aby mohla být rizika kontrolována, tak je potřeba je pochopit a následně měřit~\cite{witzany2013financial}. 
Risk management v kontextu obchodování na Forexu lze podle K. Lien zjednodušeně formulovat jako znalost toho, kolik je obchodník ochoten prodělat a kolik plánuje vydělat. Je potřeba si zvolit poměr risku a zisku (angl. Risk-Reward ratio), které by mělo být minimálně 1:2 ve prospěch zisku. Dalším nástrojem risk managementu je příkaz Stop Loss, díky kterému je možné zastavit ztrátový obchod okamžitě, kdy cena narazí na stanovenou hranici nebo Trailing Stop~\cite{lien2008day}.

\paragraph{Trailing Stop}
Princip Trailing Stop lze popsat jako posouvání hranice Stop Loss hodnoty, při které se obchod ukončí. Tato hranice se posouvá ve směru obchodu, tedy při nákupu jde nahoru, pokud i hodnota kurzu stoupá, tato situace je uvedena na obrázku \ref{fig: TrailingStop}. V případě prodeje následuje hranice Stop Loss kurz směrem dolů. Idea tohoto přístupu je, že místo aby se určoval výstup z obchodu, tak se jednoduše čeká, dokud ziskový obchod neobrátí směr vývoje a neukončí se pomocí Stop Loss hodnoty. Pro určování hodnoty Trailing Stop se používají různé přístupy včetně metod na monetární a procentuální bázi~\cite{lien2008day}.


\bigskip
\begin{figure}[h]
\begin{center}
\scalebox{0.6}{\includegraphics{obrazky/TrailingStop.png}}
\caption[Ilustrace provedení Trailing Stop]{\emph{ Ilustrace provedení Trailing Stop.} Na obrázku můžeme pozorovat pohyb hranice ztráty Stop Loss následující směr obchodu po signálu pro nákup. Příkaz Stop Loss se vykoná ve  chvíli, kdy se směr kurzu otočí v neprospěch kurzu. Zdroj: Vlastní zpracování, Metatrader 4 }\label{fig: TrailingStop}
\end{center}
\end{figure}


\bigskip
\section{Strojové učení}
Základní myšlenkou strojového učení je vytvoření systému, který bude schopný adaptovat se na měnící se prostředí a učit se ze zkušeností. Dokáže modelovat a chápat vazby mezi množinami proměnných popisujících objekty v nějakém určitém kontextu.
Takovéto systémy se využívají k rozpoznávání vzorů a dolování z dat. Mezi možnosti aplikace patří rozpoznávání řeči a rukopisů, analýza sekvencí ve vzorku DNA, finanční analýza, hledání vzorů v obraze a mnoho dalších.
Podle způsobu učení se algoritmy dělí na ty, které jsou bez učitele, s učitelem nebo kombinace obojího. 
Algoritmy bez učitele se snaží problém pochopit, aniž by věděli, zda jsou nalezené vazby správné. Systémům učení s učitelem říkáme, které vstupy co znamenají a tudíž jaké mají být výstupy~\cite{cristianini2000introduction}.

\subsection{Strojové učení s učitelem}
Systémy založené na principu učení s učitelem získávají zkušenosti z příkladů, na kterých jim ukazujeme vazby mezi vstupem a výstupem. Tyto příklady se nazývají trénovací data. Na základě získaných zkušeností systém u nových případů predikuje mapování vstupních dat na výstupní~\cite{cristianini2000introduction}. 
Postup pro učení je takový, že z testovacích dat a známých odpovědí vytvoříme model založený na trénovacích datech. Ten potom generuje rozumné predikce jako odpovědi na nová data.
Učení s učitelem se dělí na dvě rozsáhlé kategorie: regrese a klasifikace. Regrese se používá, pokud predikujeme spojitou hodnotu. Klasifikace slouží k rozdělování výsledků do tříd~\cite{3_supervised}.

\subsection{Lineární klasifikace}
Binární klasifikace se provádí užitím funkce $f(x)$, která pracuje s reálnými čísly. Pro vstupní data je výsledek přiřazen do positivní třídy, jestliže je výsledek funkce $f(x)$ větší nebo roven nule, v opačném případě je v negativní třídě. Předpokládejme, že funkce $f(x)$ je lineární a výsledek rozhodnutí je upravován pomocí funkce $sgn$, čili výsledné hodnoty budou -1, 0, 1. Jestliže funkci $f(x)$ položíme rovnu nule, získáme tím hranici rozdělující prostor vstupních hodnot na dvě části. Tuto hranici můžeme popsat vztahem $wx + b = 0$, kde parametr $w$ definuje směr a $b$ pohybuje hranicí rovnoběžně se sebou.
Princip klasifikace můžeme vidět na \ref{fig: SVMbas}, kde rozhodnutí -1 odpovídá všem hodnotám nalevo a 1 napravo od rozhodovací hranice~\cite{cristianini2000introduction}.
Překážkou tohoto konceptu je, že data musí být lineárně oddělitelná. To znamená, že prvky jedné třídy neleží v prostoru druhé. Navíc může být takto vytvořených hranic potenciálně nekonečně mnoho, ale optimální je jen jedna. K nalezení optimální hranice slouží SVM~\cite{scholkopf2002learning}.

\subsection{Lineární regrese}
Výstupem lineární regrese by měla být přímka, která nejlépe interpoluje danou množinu trénovacích dat. Nejznámější řešením problému nalezení přímky je metoda nejmenších čtverců, při které je volena přímka, která minimalizuje součet druhých mocnin (tj. čtverců) vzdáleností od trénovacích dat. Tato technika volby minimalizace vzdáleností čtverců je analogická k hledání oddělující nadroviny v případě klasifikace~\cite{cristianini2000introduction}. 

\bigskip
\section{Support Vector Machine}
Algoritmus podpůrných vektorů (SVM) je lineární klasifikátor, který převádí vstupní data do více-dimensionálního prostoru příznaků a vytváří oddělovací nadrovinu, která je umístěna tak, aby vzdálenost příznaků byla co největší (viz Obr.~\ref{fig: SVMbas}). Tím vytváří nelineární rozdělující hranici v prostoru vstupních dat. Příznak je atribut, který popisuje instanci. Při použití jádrové funkce můžeme jednoznačně určit oddělovací nadrovinu, aniž bychom ji museli určovat pro neupravená vstupní data (viz podkapitola~\ref{sec:kernel})~\cite{scholkopf2002learning}.

\bigskip
\begin{figure}[h!]
\begin{center}
\scalebox{0.6}{\includegraphics{obrazky/svmBasic.eps}}
\caption[Support Vector Machine]{\emph{Support Vector Machine. } Na obrázku je znázorněn rozdělený prostor příznaků pomocí SVM. Plnou čarou je znázorněna nalezená hranice a čárkovaně jsou linie popisující podpůrné vektory. Zdroj:~\cite{scholkopf2002learning} }\label{fig: SVMbas}
\end{center}
\end{figure}

\subsection{Jádrová funkce}
\label{sec:kernel}
Jádrová funkce (angl. kernel function) se používá při transformaci prostoru příznaků do prostoru transformovaných příznaků. Pro lineárně neoddělitelná data je možné převodem do prostoru o jiném počtu dimenzí nalézt lineární hranici, rozdělující je jednoznačně do dvou tříd (\ref{fig: SVMdim}). Přičemž počet dimenzí bývá často vyšší a může být teoreticky nekonečný. Transformovaná data je možné pomocí jádrové funkce převést zpět na nižší dimenzi, ve které již není nalezená hranice lineární. Jádra nejčastěji používaná pro transformaci jsou obvykle radiální (RBF), polynomické nebo sigmoida~\cite{4_skopal_2016}.  

\bigskip
\begin{figure}[h!]
\begin{center}
\scalebox{0.6}{\includegraphics{obrazky/prostorHighDim.eps}}
\caption[Jádrová transformace vstupního prostoru příznaků]{\emph{Jádrová transformace vstupního prostoru příznaků. } Vstupní data nejsou lineárně oddělitelná, proto se převedou pomocí jádrové funkce na vysoko-rozměrný prostor. V tomto upraveném prostoru příznaků je možné data oddělit lineární hranicí. Zdroj:~\cite{scholkopf2002learning} }\label{fig: SVMdim}
\end{center}
\end{figure}

\chapter{Analýza problému}
V předchozí kapitole byly popsány základy potřebné pro obchodování na měnových trzích, technická analýza vývoje finančních řad, teoretický úvod do klasifikace a regrese pomocí strojového učení a základy SVM. 
V této kapitole jsou popsány faktory, které mají vliv na vytváření predikčních modelů, jejich přesnost a výpočetní náročnost a jejich hodnocení.
Dále jsou zde rozebírány možnosti optimalizace obchodních systémů a jejich testování.

\bigskip
\section{Návrh predikčních modelů}
Tato podkapitola popisuje návrh vytvářených modelů pro predikci pohybů směnného kurzu. V první části je popsán výběr vstupních hodnot a jejich transformace a zpracování. Následuje výběr výstupních hodnot, které budou v trénovací fázi použity spolu se vstupy pro podporu učení modelu. V testovací fázi budou výstupy sloužit k vyhodnocení kvality predikce. Techniky pro hodnocení přesnosti předpovídaných hodnot budou popsány v poslední části.

\subsection{Zpracování vstupních hodnot} 
Volba vyhovujících vstupních hodnot je stěžejní pro většinu klasifikačních a regresních úloh. Správné zpracování dat může zlepšit výkon při řešení těchto úloh. 

\subsubsection{Normalizace dat}
Výkon lineárních klasifikátorů závisí na měřítku příznaků. Vstupní data mohou nabývat různých hodnot s rozdílným rozsahem. Z tohoto důvodu může být vhodné vstupní data pomocí normalizace transformovat do zvoleného obecného rozsahu. V závislosti na metodě normalizace je také možné odstranit hodnoty, které leží daleko mimo hranice ostatních hodnot.

Autoři Zhang a Hu ve své práci z roku 1993 uvádějí, že normalizace dat může být přínosná v některých případech. Na druhou stranu ve své studii také zmiňují, že v některých případech její přínos eliminuje fakt, že normalizace zpomaluje proces trénování~\cite{zhang1998forecasting}.


\subsubsection{Dělení dat}
Historických dat směnných kurzů je velké množství, sbírají se od roku 1971. Výpočet SVM je časově náročný a s rostoucím množstvím dat roste i potřebný čas. Pro účely trénování a testování je nutné data dělit na trénovací množinu a testovací množinu. Možností dělení je několik, mezi nejpoužívanější patří dělení na třetiny, kdy se dvě třetiny dat použijí na učení SVM a jedna třetina se použije na testování. Další možností je přidání množiny pro validaci a dělení dat na tři rovnoměrné části~\cite{cristianini2000introduction}. 

\subsubsection{Metoda klouzavého okna}
Další možností zpracování dat je metoda klouzavého okna. V tomto případě se pro trénovací data vybírá určitý počet posledních hodnot a predikuje se následující hodnota. Na obrázku \ref{fig:slidingWindow} můžeme vidět pohyb okna o velikosti 5, kde se použije posledních pět hodnot pro trénování a model se aplikuje na rámec v čase $t$. Výstupem je predikce hodnoty popisující následující rámec. Velikost okna může být fixní, nebo se může dynamicky měnit. Metoda klouzavých oken zajišťuje, že se model bude vytvářet pouze z několika posledních dat, což by mohlo zajistit učení modelu pouze aktuálních dat.

\bigskip
\begin{figure}[h]
\begin{center}
\scalebox{0.6}{\includegraphics{obrazky/slidingWindow.png}}
\caption[Metoda klouzavého okna]{\emph{Metoda klouzavého okna.} Obrázek znázorňuje průběh učení na vzorku posledních pěti historických dat. Vzorek je označen přerušovanou čárou. Zdroj:Vlastní tvorba}\label{fig:slidingWindow}
\end{center}
\end{figure}

\subsubsection{Výpočet relativních procentuálních změn}
\label{subsec:RPD}
Při studiu historických dat vývoje směnných kurzů můžeme vidět vysokou variabilitu výše cen. Například pro hodnoty měnového páru EUR/USD je od roku 1971 nejnižší hodnota 0,5365 a nejvyšší byla v době psaní této práce 1,599. Rozdíl těchto hodnot je v absolutní hodnotě 1,0625. Pro účely obchodování se používají hodnoty o velikosti pipu, tedy absolutní posun kurzu o 0,0001. Kvůli vysoké volatilitě by se model neměl řídit přímo historickými hodnotami kurzu, ale radši rozdílem mezi cenami. Díky tomu nebude trénování modelu ovlivněno konkrétními hodnotami kurzu, které se v čase mění. Autoři L. Cao a F. Tay ve své studii z roku 2003 pro tento účel využívají relativní procentuální změnu, kterou můžeme vypočítat pomocí vzorce:
\begin{equation}
f(RDP_{-k} = \frac{p_{i} - p_{i - k}}{p_{i - k}} * 100)
\end{equation}
$RDP_{-k}$ je relativní změna v procentech mezi současnou hodnotou a hodnotou v čase před $k$ periodami a $p_{n}$ je cena v čase $n$~\cite{cao2003support}. 

\subsubsection{Hodnocení důležitosti jednotlivých vstupních hodnot}
Programy pro vytváření SVM poskytují možnost testovat vliv jednotlivých vstupních hodnot na kvalitu predikce na testovacích datech. Fungují na principu, že zkoušejí úspěšnost předpovídaných hodnot podle trénovaní modelu na jednotlivých vstupech, místo toho, aby používali celou množinu příznaků. Výstupem této procedury je množina vstupních hodnot a k nim přiřazené velikosti vlivu na predikci. 

\subsection{Výběr výstupních hodnot}
SVM umožňují dvě obecné techniky: klasifikaci a regresi. Při klasifikaci se výstupní data zařadí do určité třídy podle naučeného třídění na trénovacích datech. V případě regrese je výstupem spojitá hodnota představující predikovanou veličinu.

\subsubsection{Klasifikace}
V případě dělení výstupních hodnot na třídy je třeba určit množinu možných oddělitelných výstupních hodnot. Podle počtu tříd se klasifikace dělí na binární a multi-class. Pro binární klasifikaci se jeví jako vhodný výstup směr vývoje směnného kurzu nadcházejícího časového rámce, tedy zda poroste nebo bude klesat. Pro multi-class třídění dat je možné zvolit jemnější hranice, například hodnoty: roste prudce, roste, stagnuje, klesá a klesá prudce. Problém u nastavování hranic je ten, že pro trénovací data je nutné zvolit hodnoty, při kterých výstup spadá do dané třídy. 

\subsubsection{Regrese}
Výstupní data v případě určování spojité hodnoty mohou být jednotlivé ceny OHLC (Open, High, Low, Close), hodnoty indexů technické analýzy nadcházejícího jednoho nebo více časových rámců, hodnoty relativních procentuálních změn a další. 
	
\subsection{Hodnocení kvality modelu}
Úspěšnost predikce modelu může být hodnocena mnoha způsoby a záleží, jestli je pro predikci použita klasifikace nebo regrese. V této podkapitole jsou uvedeny dvě metody na hodnocení kvality modelu. 

\subsubsection{Matice záměn}
Matice záměn (angl. Confusion matrix) se používá k sumarizaci výkonu klasifikátoru na trénovacích datech. Jedná se o dvourozměrnou matici, ve které se řádky matice vztahují k predikcím a sloupce se vztahují k reálným datům. 

\begin{table}[h!]
\catcode`\-=12
\centering
\begin{tabular}{l|ll}
  & 0  & 1  \\ \hline
0 & TN & FN \\
1 & FP & TP
\end{tabular}
\caption{Struktura matice záměn pro klasifikaci dvou tříd.}
\label{table:confusionMatrix}
\end{table}

V tabulce~\ref{table:confusionMatrix} je zobrazená podoba matice záměn. \emph{TN} (správně negativní) popisují počet správně klasifikovaných negativní vzorků a \emph{TP} (správně pozitivní) správně klasifikovaných pozitivních vzorků. \emph{FN} (falešně negativní) a \emph{FP} (falešně pozitivní) jsou počty chybně zařazených negativních a pozitivních vzorků. Tím pádem prvky na diagonále popisují správně zařazená data a prvky mimo diagonálu zobrazují chybu klasifikátoru.
Díky matici záměn můžeme určit následující výpočty: 

\begin{itemize}
\item{Chyba klasifikace (Error)} definovaná poměrem nesprávně zařazených instancí k počtu instancí. 
\begin{equation}
\frac{FN+FP}{TN+FN+TP+FP}
\end{equation}
\item{Celková správnost (Accuracy)} definovaná poměrem správně zařazených instancí k sumě všech instancí. 
\begin{equation}
\frac{TN+TP}{TN+FN+TP+FP}
\end{equation}
\item{Přesnost (Precision)} je poměr správně zařazených pozitivních ke všem klasifikovaným jako pozitivní. 
\begin{equation}
\frac{ TP}{ TP+FP}
\end{equation}
\item{Úplnost (Recall)} definovaná poměrem správně zařazených pozitivních instancí k sumě všech pozitivních instancí.
\begin{equation} 
\frac{ TP}{ FN+TP }
\end{equation}
\item{Senzitivita (Sensitivity)} definovaná poměrem falešně zařazených pozitivních instancí k součtu negativních instancí. 
\begin{equation}
\frac{FP}{ FN+TP }
\end{equation}
\item{Specificita (Specificity)} definovaná poměrem správně zařazených negativních instancí k sumě všech negativních instancí. 
\begin{equation}
\frac{TN}{TN+FP }
\end{equation}
\end{itemize}

Výše uvedené výpočty se používají ke komplexnímu hodnocení zařazení jednotlivých tříd. Používají se v případě, že potřebujeme znát úspěšnost zařazení do konkrétních tříd a mají využití například v oblasti vyhledávání informací nebo v medicíně~\cite{cichosz2015data}.
Určující v případě této práce bude chyba klasifikace a celková správnost, které jsou použity pro hodnocení úspěšnosti modelů v následující kapitole.

\subsubsection{Odchylka}
Problémy řešené pomocí regrese se hodnotí podle odchylky, kterou měla predikovaná hodnota od hodnoty reálné. V praxi se používají různé výpočty pro transformaci odchylky. Uvedu zde tři nejpoužívanější pro regresi podle~\cite{cichosz2015data}:

\begin{itemize}
\item{Střední absolutní chyba (Mean absolute error, MAE)} jejíž výpočet je ze všech nejpřímočařejší.
\begin{equation}
 mae_{f,S}(h) = \frac{1}{\left | S \right |}\sum_{x\in S}^{ } \left | f(x)-h(x) \right |
\end{equation}
\item{Střední čtvercová chyba (Mean square error, MSE)} je nejpoužívanější metrikou u regresních úloh. Počítá chybu jako průměr druhých mocnin odchylek. Díky tomu v porovnání s MAE penalizuje více velké odchylky. 
\begin{equation}
mse_{f,S}(h) = \frac{1}{\left | S \right |}\sum_{x\in S}^{ } (f(x)-h(x))^2 
\end{equation}
\item{Střední kvadratická chyba (Root mean squared error, RMSE)} se používá v případech, kdy výsledky záleží na měřítku. MSE totiž kvůli druhé mocnině ve výpočtu mění hodnoty.
\begin{equation}
 rmse_{f,S}(h) = \sqrt{\frac{1}{\left | S \right |}\sum_{x\in S}^{ } (f(x)-h(x))^2}
\end{equation}
\end{itemize}

\subsection{Optimalizace parametrů modelu}
\label{subsec:optimalParams}
Optimalizace SVM zahrnuje testování vstupních dat, výstupních dat, typu jádra a parametrů SVM vůči chybě vzniklé při trénování. 
Volba parametrů hraje důležitou roli při učení SVM na datech. Při špatné volbě parametrů může docházet k nedoučení (angl. underfitting) nebo k přeučení (angl. overfitting). Při přeučení je model příliš flexibilní a ve výsledku popisuje pouze šum v datech. Přeučení vede k poměrně vysoké přesnosti na trénovacích datech, která se v testovacích datech nepotvrdí. Nedoučení znamená, že model je příliš jednoduchý, než aby dokázal predikovaný problém dostatečně popsat, což vede k vysokým odchylkám na testovacích i trénovacích datech~\cite{scholkopf2002learning}.

Prvním parametrem je cena $C$ (angl. Cost), která se používá v případech, kdy data nejsou oddělitelná. Tato konstanta určuje penalizaci pro body ležící na špatné straně oddělovací hranice. Pokud je konstanta příliš vysoká, model bude uchovávat velké množství podpůrných vektorů a bude popisovat spíše trénovací data a šum než daný problém. Bude docházet k přeučování modelu. Pokud zvolíme konstantu moc nízkou, model najde oddělovací rovinu, která nebude správně popisovat problém a bude docházet k nedoučení. Parametr ceny se používá při klasifikačních i regresních úlohách.
Pro regresi se používá parametr $\varepsilon$, který určuje šířku pásma okolo reálného výstupu, ve kterém se při trénování ignoruje chyba. Body, které se nacházejí v tomto pásmu, nejsou penalizovány~\cite{shawe2004kernel}.

Další parametry, které lze optimalizovat závisí na použité jádrové funkci. Pro radiální jádro můžeme měnit hodnotu poloměru $\gamma$, který určuje, do jaké vzdálenosti sahá vliv jednotlivých trénovacích dat. Pro malé hodnoty $\gamma$ sahá vliv daleko. Při vysokých hodnotách končí vliv v blízkosti bodů. Velmi vysoké hodnoty $\gamma$ způsobí, že model popíše pouze trénovací data a dochází tak k přeučení. 
Sigmoidální jádro používá parametr posunu $r$, který určuje práh při mapování prostoru příznaků.

\section{Optimalizace a testování obchodovacího systému}
V této podkapitole jsou popsané možnosti řešení optimalizace a testování pomocí backtestingu a forward testingu (Walk-forward analýza)~\cite{6_folger_2010}. 

\subsection{Backtesting}
Backtesting slouží k vyhodnocování výsledků strategie na historických datech. Množině historických dat používaných při backtestingu se říká in-sample data. Obchodník takto může bez riskování svého kapitálu vyzkoušet, jestli strategie funguje na reálném trhu. Při backtestingu se také často optimalizují parametry, které ovlivňují rozhodování strategie o nákupu, prodeji a ukončení obchodu. Platformy pro obchodování často poskytují nástroje pro optimalizaci pomocí testování kombinací parametrů na výkon obchodovacího systému. Výkon může být hodnocený z různých hledisek, například velikost zisku, míra poklesu zůstatku, počet úspěšných obchodů a další. 

Problém backtestingu je ten, že strategie může po optimalizaci vykazovat skvělé výsledky v daném časovém období, ale při uvedení do reálného provozu je ztrátová a tak nepoužitelná. To se stane, pokud je strategie přeoptimalizovaná, což je ekvivalentní k přeučenému modelu, který byl zmíněn v podkapitole \ref{subsec:optimalParams}. Proto je nutné výsledky validovat na další sadě historických dat, kterým se říká out-of-sample data. 

\subsection{Forward testing}
Forwadr testing simuluje reálné obchodování, které přesně následuje strategii vybranou při backtestingu. Out-of-sample data jsou další množinou historických dat, která jsou odlišná od in-sample dat a tak nebyla použita při backtestingu. Výsledky forward testingu a výsledky backtestingu by se měly podobat. Čím podobnější bude vývoj v obou testech, tím vyšší je pravděpodobnost, že systém bude mít dobré výsledky i v reálném obchodování. Základním pravidlem pro forward testing je, že by se strategie neměla optimalizovat, ale pouze validovat. Všechna optimalizace by měla probíhat při backtestingu.

 \chapter{Vlastní návrhy řešení}
V této kapitole jsou popsány postupy modelováni SVM pro regresi hodnot změn kurzu a klasifikaci směrů trendu. Výstupem modelů jsou predikce, které následně porovnávám se skutečnými hodnotami. Z modelů se pomocí testování a optimalizace pokouším určit ty, které mají nejmenší odchylku mezi predikovanými a reálnými daty. 

V další části popisuji vývoj automatického obchodovacího systému řízeného predikcemi modelu SVM. Systém optimalizuji na části historických dat a na zbylé části jej testuji.

\section{Data pro vytváření modelu}	
Nezpracovaná data jsem získal pomocí Centra historie v programu MetaTrader 4. Pro vytváření a testování modelu SVM jsem použil data od 1. 1. 2014 do 1. 5. 2016. Data jsem rozdělil na trénovací a testovací části. Množina trénovacích dat je v intervalu od 1. 1. 2014 do 1. 9. 2015. Data použitá při testovací jsou od 2. 9. 2015 do 1. 5. 2016.

\subsubsection{Výběr vstupních hodnot}
Vstupních hodnot, které je možné použít pro modelování SVM na finančních trzích, je velké množství. Může se jednat o historické ceny, historické výnosy, indikátory technické a fundamentální analýzy a mnoho dalších. Ve velmi širokém pojetí může mít na výši budoucího kurzu vliv jakýkoliv údaj. V této práci jsem se omezil pouze na historické ceny a z nich vypočítané indikátory.
Výběr vstupních hodnot vychází ze studií A. Zinzaliana z roku 2009, který používal hybridní SVM k predikcím Forexu~\cite{zinzalian2009fx}, a z práce L. YU zabývající se určováním tendencí akciových trhů pomocí SVM v kombinaci s genetickými algoritmy~\cite{yu2005mining}. Seznam vstupních hodnot je uvedený v tabulce~\ref{tab:inputs}.

\begin{table}[h!]
\catcode`\-=12
\centering
\begin{tabular}{|l|l|}
\hline
\textbf{Označení }  & \textbf{Popis}                                                              \\ \hline
EMA50      & Vzálenost Close od dlouhodobého EMA s periodou 50                  \\ \hline
SMA3-      & Vzálenost Close od kátkodobého SMA s periodou 3                    \\ \hline
SMA5-      & Vzálenost Close od kátkodobého SMA s periodou 5                    \\ \hline
SMA5-1     & Vzálenost Close od kátkodobého SMA s periodou 5 opožděný o 1 rámec \\ \hline
SMA5-2     & Vzálenost Close od kátkodobého SMA s periodou 5 opožděný o 2 rámce \\ \hline
SMA5       & SMA s periodou 5                                                   \\ \hline
SMA10      & SMA s periodou 10                                                  \\ \hline
ROC1       & Rychlost změny aktualní Close vzhledem k opožděné Close            \\ \hline
ROC5       & Rychlost změny aktualní Close vzhledem k opožděné Close o 5 rámců  \\ \hline
ROC10      & Rychlost změny aktualní Close vzhledem k opožděné Close o 10 rámců \\ \hline
RSI        & RSI s periodou 14 aktuální                                         \\ \hline
RSI1       & RSI s periodou 14 opožděný o 1 rámec                               \\ \hline
RSI2       & RSI s periodou 14 opožděný o 2 rámce                               \\ \hline
OSCP       & Cenový oscilátor                                                   \\ \hline
MACD       & MACD s parametry EMA5 a EMA12                                      \\ \hline
MACD1      & MACD s parametry EMA5 a EMA12 opožděný o 1 rámec                   \\ \hline
MACD2      & MACD s parametry EMA5 a EMA12 opožděný o 2 rámce                   \\ \hline
Stochastic & Oscilátor Stochastic \%K 14 \%D 3 slow i fast                      \\ \hline
SMI        & Stochastic Momentum Index                                 \\  \hline
\end{tabular}
\caption{Seznam použitých vstupních hodnot pro učení SVM}
\label{tab:inputs}
\end{table}

Velké množství vybraných vstupních hodnot zvyšuje časovou a výpočetní náročnost trénování modelu. Některé vstupy mohou mít minimální nebo negativní vliv na úspěšnost predikce. Z těchto důvodů je vhodné vybrat ze vstupních hodnot jen ty nejvíce relevantní. Na výběr příznaků existuje mnoho technik. V případě SVM je možné testovat úspěšnost predikce pro různé proměnné a vybrat jen ty, které tuto úspěšnost zvyšují. Testování úspěšnosti predikce je iterativní metoda, ve které se přidávají jednotlivé příznaky, a vyhodnocuje se jejich vliv na velikost odchylky predikované hodnoty od skutečné hodnoty. Více k této metodě je napsáno u regrese a klasifikace.

\subsubsection{Nástroje na vytvoření modelu}
Model jsem vytvořil pomocí programu R Project a balíků \emph{e1071} a \emph{caret}, které obsahují algoritmy pro strojové učení. Modely SVM lze pomocí těchto balíků trénovat a testovat na datech. V programu R lze navíc optimalizovat parametry, kterými se řídí rozhodování modelu. Další možností je výběr množiny vhodných vstupních hodnot vedoucích ke zlepšení úspěšnosti predikce.

\bigskip
\section{Predikce pomocí regrese}
V této podkapitole je popsána predikce číselné hodnoty založené na regresi pomocí SVM. Při volbě výstupní hodnoty jsem se rozhodoval mezi určováním výše kurzu nebo určováním velikosti míry výnosů za určité období. Odhadování výše kurzů jsem zavrhnul, protože varianta s nejmenší chybou predikovala stejnou hodnotu, jako byla hodnota předchozího kurzu. Výsledkem byla tedy v podstatě opožděná cena. Část pokusu s predikcí ceny je zaznamenaná na Obr. \ref{fig:closeVsPredic}. Při tomto pokusu se podařilo natrénovat model, který predikoval s velmi nízkou střední čtvercovou chybou $5.29*10^-5$. Přesto, jak je možné pozorovat, tak hodnota predikce ceny je v podstatě o jeden rámec opožděná reálná hodnota ceny.

\bigskip
\begin{figure}[h]
\begin{center}
\scalebox{0.8}{\includegraphics{obrazky/closeVsPredic.png}}
\caption[Predikce ceny]{\emph{Predikce ceny zaznamenaná přerušovanou čárou pouze kopíruje reálnou hodnotu zobrazenou plnou čárou. } Zdroj: Vlastní tvorba, R Project. }\label{fig:closeVsPredic}
\end{center}
\end{figure}

Z důvodu špatných výsledků při určování výše kurzu jsem se rozhodl predikovat míru výnosů. Procentuální míra výnosů se počítá stejně jako relativní procentuální změna uvedená v podkapitole \ref{subsec:RPD}.

\subsection{Určování vstupních hodnot}
Z výše uvedených hodnot jsem vybíral vstupní hodnoty, které jsou schopné co nejlépe popsat hodnotu a jsou tak nejrelevantnější pro trénování modelu. K tomuto účelu jsem použil funkci měřící důležitost (angl. importance), kterou poskytuje Project R. Metoda určování důležitosti zkoumá vliv jednotlivých proměnných a vyhodnocuje pro ně koeficient determinace. Čím vyšší je hodnota tohoto koeficientu, tím bližší je predikovaná hodnota k reálné hodnotě. Funkce potřebuje referenční model SVM, aby na něm mohla zkoušet jednotlivé vstupní parametry. Jako referenční model je použitý SVM s radiální jádrovou funkcí. 

V grafu \ref{fig:importance1} můžeme vidět vývoj důležitosti znázorňující vliv vstupních hodnot na úspěšnost predikce. Vyhodnocení důležitosti vstupních hodnot se pohybuje v intervalu od nuly do jedné. Nejlepší možná hodnota dosahuje velikosti jedna, což znamená, že daná proměnná plně popisuje predikovanou veličinu. 

Celková úspěšnost určování důležitosti byla velmi nízká. Práh pro výběr indikátorů pomocí důležitosti jsem zvolil 0.003.
Z původních devatenácti vstupních hodnot jsem pomocí metody určování důležitosti vybral vstupy, pro které dosahovala hodnota koeficientu determinace hodnoty vyšší než 0.005. Konkrétně to jsou indikátory $SMA5$, $ROC1$, $SMA10$, $MACD1$, $MACD2$ a $SMA3-$.

\bigskip
\begin{figure}[h!]
\begin{center}
\scalebox{0.8}{\includegraphics{obrazky/importanceClass.png}}
\caption[Vliv jednotlivých příznaků na kvalitu predikce hodnocený pomocí RMSE]{\emph{Vliv jednotlivých příznaků na kvalitu predikce hodnocený pomocí RMSE} Zdroj: Vlastní tvorba, R Project. }\label{fig:importance1}
\end{center}
\end{figure}

\subsection{Optimalizace parametrů jádra}
Optimalizace je provedena pro sigmoidální, radiální a lineární jádrové funkce. V následujícím experimentu je iterativně spouštěno učení nad daty z trénovací množiny a je vyhodnocována velikost chyby. Pro všechny tři typy jádrové funkce je následně vybrán model s nejmenší chybou. 

Pro radiální jádro měl model SVM nejvyšší úspěšnost predikce s parametry $\gamma = 0,25$, $\varepsilon = 0,4$ a cena $C = 0,1$. Střední čtvercová chyba MSE byla 0.3147215. 

Pro sigmoidální jádro měl model hodnotu MSE 0,3124769 s parametry $\gamma = 0,015625$, cena $C = 1$ a koeficient posunu $r = 0$ . 

Model s lineární jádrovou funkcí měl nejnižší střední čtvercovou chybu 0,3126061 s parametrem ceny $C = 0,015625$.

\subsubsection{Optimalizace velikosti vzorku pro učení}
Z minulého experimentu byly vybrány modely s nejmenší chybou. Pro každý model byla iterativně vybírána velikost okna a vyhodnocena velikost chyby. Samotná velikost odchylky nemusí značit kvalitní model, proto byla navíc kontrolována správnost směru. 
Rozsah velikostí rámce byl zvolen na základě předpokladu, že minimální velikost pro odhalení vzoru je 10. Maximální hodnota byla kvůli výpočetní a časové náročnosti omezena na 250 vzorků.
V tabulce \ref{table:windowSizeReg} můžeme pozorovat vliv velikosti okna na velikost chyby vzniklé při predikci. 

\begin{table}[h!]
\catcode`\-=12
\centering
\resizebox{\textwidth}{!}{%
\begin{tabular}{|c|c|c|c|c|c|c}
\hline
                & \multicolumn{2}{c|}{\textbf{Radiální jádro}} & \multicolumn{2}{c|}{\textbf{Sigmoidální jádro}} & \multicolumn{2}{c|}{\textbf{Lineární jádro}}                 \\ \hline
Velikost vzorku & MSE        & Přesnost & MSE        & Přesnost & MSE        & \multicolumn{1}{c|}{ Přesnost } \\ \hline
10              & 0,34885    & 49,302\%      & 0,37034    & 47,829\%        & 0,37082 & \multicolumn{1}{c|}{47,907\%}     \\ \cline{2-7} 
25              & 0,32961    & 50,196\%      & 0,34942    & 50,667\%        & 0,34975 & \multicolumn{1}{c|}{50,431\%}     \\ \cline{2-7} 
50              & 0,32709    & 50,640\%      & 0,34052    & 51,360\%        & 0,34116 & \multicolumn{1}{c|}{51,440\%}     \\ \cline{2-7} 
75              & 0,32551    & 50,367\%      & 0,33942    & 49,633\%        & 0,3402  & \multicolumn{1}{c|}{49,796\%}     \\ \cline{2-7} 
100             & 0,32274    & 49,833\%      & 0,334      & 48,833\%        & 0,33467 & \multicolumn{1}{c|}{48,750\%}     \\ \cline{2-7} 
150             & 0,301394   & 49,391\%      & 0,30551    & 51,217\%        & 0,30562 & \multicolumn{1}{c|}{50,696\%}     \\ \cline{2-7} 
200             & 0,292248   & 49,545\%      & 0,29336    & 49,000\%        & 0,29348 & \multicolumn{1}{c|}{48,909\%}     \\ \cline{2-7} 
250             & 0,2893     & 47,333\%      & 0,28844    & 49,905\%        & 0,2885  & \multicolumn{1}{c|}{49,905\%}     \\ \hline
\end{tabular}%
}
\caption{\emph{Vliv velikosti vzorku na velikost chyby u trénovacích dat.} }
\label{table:windowSizeReg}
\end{table}

Přestože se odchylka s rostoucí velikostí vzorku zmenšovala, správné určení směru se nezlepšovalo. I přes špatné výsledky jsem se pokusil evaluovat modely, které prováděly nejpřesnější predikce, na testovacích datech. Vybral jsem modely s nejmenší odchylkou a modely s nejpřesnějším odhadem směru. Pro všechny jádrové funkce vyšly nejlepší modely se stejnou délkou vzorku. Při délce 50 byly modely schopné lépe určit směr. Učení s 250 vzorky dokázalo nejlépe minimalizovat chybu.

\subsection{Vyhodnocení modelu na testovacích datech}
Evaluace úspěšnosti predikce pomocí regrese byla provedena na testovacích datech. Stejně jako u trénovací množiny byla měřena kvalita predikce podle velikosti odchylky a správnosti určení směru. V tabulce \ref{table: windowSizeRegTest}
 jsou uvedeny výsledky učení SVM. Úspěšnost určování směrů je lepší ve všech případech, přesto není o moc lepší než náhoda.  

\begin{table}[h!]
\catcode`\-=12
\resizebox{\textwidth}{!}{%
\begin{tabular}{|c|c|c|c|c|c|c|}
\cline{1-7}
& \multicolumn{2}{ |c| }{ Radiální jádro }  & \multicolumn{2}{ c| }{ Sigmoidální jádro }  &
 \multicolumn{2}{ c| }{ Lineární jádro } \\ \cline{1-7} 
Velikost vzorku & MSE & Přesnost & MSE & Přesnost & MSE & Přesnost \\ \cline{1-7}
50 & 0,31037 & 52,922\% & 0, 31429 & 51,753\% & 0,32372 & 51,419\% \\ \cline{2-7}
250 & \ 0, 39215 & 50,376\% & 0, 39053 & 52,632\% & 0,39532 & 51,378\% \\ \cline{1-7}
\end{tabular}
}
\caption{\emph{Vliv velikosti vzorku na velikost chyby u testovacích dat.} }
\label{table: windowSizeRegTest}
\end{table}

\subsection{Zhodnocení regrese}
Pro nejlepší natrénované modely byla přesnost vyšší než 50 \%. Pokud by byla úvaha taková, že obchody vydělávají nebo prodělávají stejné množství peněz, tak by měla být strategie zisková. Přesto podle mého názoru nejsou výsledky předpovídání kurzu pomocí regrese pro obchodování použitelné. Chyba predikce hodnoty i směru je příliš vysoká. 

\bigskip
\section{Predikce pomocí klasifikace}
Pro predikování pomocí klasifikace jsem jako výstup zvolil směr vývoje kurzu. Model SVM měl za úkol určit, jestli kurz půjde směrem nahoru nebo dolů. Autoři studie z roku 2003 L. Cao a F. Tay uvádí, že distribuce vzdálenějších hodnot vývoje kurzu se více blíží normálnímu rozdělení a tudíž lze lépe predikovat. Konkrétně vybrali určování kurzu v čase $t+5$~\cite{cao2003support}. 
Predikce časového rámce na pět časových rámců dopředu může způsobit problém s určováním vstupu do a výstupu z obchodu. Obchodovací systém by musel přijmout další opatření, aby vyhodnocoval rozhodnutí ve správný čas. 
Kvůli možnosti rychle reagovat na vývoj kurzu jsem se pokusil predikovat i směr vývoje následujícího časového rámce, tedy v čase $t+1$.

\subsubsection{Určování vstupních hodnot}
Stejně jako v případě regrese jsem hledal množinu vstupů, která má na predikci největší vliv. V případě klasifikace směru jsem zvolil metodu rekurzivní eliminace příznaků (RFE), kterou používá autor Qiu ve své práci pro predikci směru trendu\cite{Li_combiningrecursive}. Metoda rekurzivní eliminace příznaků natrénuje klasifikátor, evaluuje hodnotící kritérium pro všechny příznaky a odstraní příznaky s nejmenším hodnocením. Výstupem této metody je seznam kombinací příznaků, které měly nejlepší výsledky z hlediska velikosti chyby při klasifikaci. 

Pomocí RFE jsem určil vliv hodnot na přesnost predikce směru trendu časových rámců v čase $t+1$ a $t+5$. Pro testování vstupních hodnot jsem použil množinu historických dat určených pro trénování modelu, tedy vývoj kurzu od 1. 1. 2013 do 1. 9. 2015 v denním časovém rámci. 

Na obrázku \ref{fig:plotRFE1} můžeme pozorovat hodnocení přesnosti predikce vzhledem k počtu vstupních proměnných.  Nejvyšší přesnost 53,14 \% pro odhadování směru trendu následujícího dne měla množina obsahující 12 proměnných. Konkrétně se jednalo o množinu indikátorů: $SMA3-$, $SMA5$, $ROC1$, $SMA10$, $RSI2$, $RSI$, $SMI$, $SMA5-$, $SMA5-1$, $ROC5$, $SMA5-2$ a $ROC10$. 

\bigskip
\begin{figure}[h]
\begin{subfigure}[b]{0.5\textwidth}
\centering
\scalebox{0.9}{\includegraphics{obrazky/plotRFE1.png}}
\caption{Predikce hodnoty $t+1$. } 
\label{fig:plotRFE1}
\end{subfigure}
\begin{subfigure}[b]{0.5\textwidth}
\centering
\scalebox{0.9}{\includegraphics{obrazky/plotRFE5.png}}
\caption{Predikce hodnoty $t+5$. } 
\label{fig:plotRFE5}
\end{subfigure}
\caption[Výsledek rekurzivní eliminace příznaků]{\emph{ Výsledek rekurzivní eliminace příznaků.} V grafu nalevo jsou zobrazeny výsledky vlivu proměnných na přesnost při určování směru v čase $t+1$ a napravo v čase $t+5$. Zdroj: Vlastní tvorba, R Project}
\end{figure}


Při testu predikce směru v čase $t+5$ se podařilo pomocí metody RFE najít množinu 6 vstupních hodnot, která na trénovacích datech dosahovala přesnosti 80,27 \%. Jednalo se o indikátory: $SMA10$, $SMA5$, $SMI$, $EMA50-$, $stochastic$ a $MACD$.

Z testů vstupních hodnot vyplynulo, že pro predikci rámce v čase $t+1$ nedokáže ani jedna množina proměnných určit vstup lépe než jakákoliv z množiny proměnných při předpovídání rámce v čase $t+5$. Z tohoto důvodu jsem se rozhodnul dále optimalizovat model pouze pro data odhadující směr v delším časovém rámci.

 \subsection{Optimalizace parametrů jádra}
Pro všechna tři jádra jsem pomocí iterativního testování dospěl k hodnotám, které vykazovaly nejmenší chybu na trénovacích datech. Pro radiální funkci měl model SVM nejvyšší úspěšnost s parametry $\gamma = 4$ a cena $C = 10$. Chyba klasifikace byla 0,171875.

Pro sigmoidální jádro byly nejlepší parametry $\gamma = 0,03125$ a koeficient posunu 
$r = -2$ s klasifikační chybou 0,4606895.
Lineární jádrová funkce měla nejnižší klasifikační chybu 0,460119 při použití parametru ceny $C = 0.01$.

Po optimalizaci parametrů můžeme pozorovat, že chyba klasifikace byla pro radiální jádrovou funkci nejnižší. To může znamenat, že radiální jádro je jediné, které dokáže efektivně převést příznaky do oddělitelné nadroviny. 

\subsection{Volba velikosti vzorku}
\label{subsec:wSize}
Pro vybrané parametry jádrových funkcí jsem testoval vliv velikosti vzorku, který se používá pro učení modelu. SVM potřebuje mít ve vzorku obsaženy situace, kdy trend rostl i klesal, aby se mohl učit z obou případů. Z tohoto důvodu jsem zvýšil minimální délku okna na 50 vzorků. Maximum jsem stejně jako u regrese zvolil 250. 
Výsledky testů jsou v tabulce \ref{table: windowSizeClasTrain}. 

\begin{table}[h!]
\catcode`\-=12
\resizebox{\textwidth}{!}{%
\begin{tabular}{|c|c|c|c|c|c|c|}
\cline{1-7}
& \multicolumn{2}{ |c| }{\textbf{Radiální jádro}}  & \multicolumn{2}{ c| }{\textbf{Sigmoidální jádro} }  &
 \multicolumn{2}{ c| }{ \textbf{Lineární jádro} } \\ \cline{1-7} 
Velikost vzorku & Chyba & Přesnost & Chyba & Přesnost & Chyba & Přesnost  \\ \cline{1-7}
50 & 22,813\% & 77,187\% & 39,108\% & 60,892\% & 38,765\% & 61,235\% \\ \cline{2-7}
75 & 24,014\% & 75,986\% & 39,247\% & 60,753\% & 37,276\% & \textbf{62,724\%} \\ \cline{2-7}
100 & 22,702\% & 77,298\% & 38,649\% & \textbf{61,351\%} & 38,837\% & 61,163\% \\ \cline{2-7}
150 & 24,017\% & 75,983\% & 40,580\% & 59,420\% & 40,166\% & 59,834\% \\ \cline{2-7}
200 & 22,633\% & 77,367\% & 41,339\% & 58,661\% & 42,263\% & 57,737\% \\ \cline{2-7}
250 & 21,671\% & \textbf{78,329\%} & 42,037\% & 57,963\% & 43,342\% & 56,658\% \\ \cline{1-7}
\end{tabular}
}
\caption{\emph{Vliv velikosti vzorku na velikost chyby u trénovacích dat.} }
\label{table: windowSizeClasTrain}
\end{table}

Podobně jako při optimalizaci parametrů vychází výsledky nejlépe pro radiální jádrovou funkci.

\subsection{Evaluace modelu na testovacích datech}
Modely byly prověřeny na testovacích datech, kvůli potvrzení kvality predikce a vyvrácení přeučení nebo nedoučení. 

V tabulce \ref{table: windowSizeClasTest} jsou uvedeny výsledky úspěšnosti predikcí. Z výsledků je patrné, že model používající radiální jádrovou funkci překonal ostatní modely a dosahuje úspěšnosti predikce větší než 75 \% pro všechny časové rámce, kromě nejdelšího. 

\begin{table}[h!]
\catcode`\-=12
\resizebox{\textwidth}{!}{%
\begin{tabular}{|c|c|c|c|c|c|c|}
\cline{1-7}
& \multicolumn{2}{ |c| }{\textbf{Radilální jádro}}  & \multicolumn{2}{ c| }{\textbf{Sigmoidální jádro}}  &
 \multicolumn{2}{ c| }{\textbf{Lineární jádro}} \\ \cline{1-7} 
Velikost vzorku & Chyba & Přesnost & Chyba & Přesnost & Chyba & Přesnost  \\ \cline{1-7}
50 & 24,060\% & 75,940\% & 40,978\% & \textbf{59,022\%} & 42,857\% & 57,143\%  \\ \cline{1-7} 
75 & 23,650\% & 76,350\% & 49,793\% & 50,207\% & 50,207\% & 49,793\% \\ \cline{1-7} 
100 & 21,759\% & \textbf{78,241\%} & 46,759\% & 53,241\% & 47,222\% & 52,778\% \\ \cline{1-7} 
150 & 24,096\% & 75,904\% & 48,795\% & 51,205\% & 53,012\% & 46,988\% \\ \cline{1-7} 
200 & 23,276\% & 76,724\% & 57,759\% & 42,241\% & 57,790\% & 42,210\% \\ \cline{2-7} 
250 & 27,273\% & 72,727\% & 59,091\% & 40,909\% & 33,333\% & \textbf{66,667\%} \\ \cline{1-7} 
\end{tabular}
}
\caption{\emph{Vliv velikosti vzorku na velikost chyby na testovacích datech.} }
\label{table: windowSizeClasTest}
\end{table}

\subsubsection{Zhodnocení klasifikace}
V této kapitole jsem testoval vlivy parametrů a velikosti vzorku na úspěšnost predikce SVM s použitím radiálního, lineárního a sigmoidálního jádra. Ve všech testech radiální jádro překonalo ostatní dvě jádrové funkce. Nejvyšší dosahovaná přesnost predikce byla 78,329 \% na trénovacích datech a 78,241 \% na testovacích datech. Takový výsledek je velmi dobrý a použitelný při obchodování.

\bigskip
\section{Obchodovací systém}
Obchodovací systém byl vytvořen pomocí jazyka MQL na platformě Metatrader 4 s rozhodovacím jádrem naprogramovaným pomocí programu R Project. V této podkapitole jsou popsány nástroje na tvorbu, architektura a implementace systému. Potom následuje popis optimalizací a testů obchodovacího systému na historických datech.

\subsubsection{R Project}
R je vývojové prostředí a jazyk určený pro statistické výpočty a grafiku. R poskytuje mnoho statistických technik, kterými jsou například analýzy časových řad, klasické statistické testy, lineární a nelineární modelování, klasifikace a další. Navíc umožňuje jednoduché rozšíření pomocí knihoven a balíků. 

Prostředí programovacího jazyka R poskytuje několik knihoven pro práci se Support Vector Machines. V této práci byla konkrétně použita kombinace knihovny \emph{e1071} a \emph{caret}. Pro výpočet indikátorů technické analýzy jsem využil knihovnu \emph{TTR} a \emph{quantmod}. 

\subsection{Architektura obchodovacího systému}
Běh obchodovacího systému začíná tím, že program Metatrader 4 shromáždí dané množství historických dat. Velikost vzorku závisí na požadované velikosti trénovacích dat, ke které je nutné přičíst data potřebná pro vytvoření indikátorů technické analýzy. Kvůli použití indikátoru EMA s periodou 50 je nutné odečíst padesát vzorků historických dat.

Metatrader 4 přepošle data pomocí knihovny $mt4R$ do programu R Project, ve kterém se z dat vypočítají indikátory technické analýzy. Indikátory se použijí jako příznaky pro modelování SVM. Následně se model SVM použije pro predikci hodnoty, která se vrací zpět do programu Metatrader 4. 
Vypočtená hodnota se použije pro rozhodování o vstupu, výstupu nebo pokračování v obchodu. 

\subsubsection{Propojení R a Metatraderu 4}
Knihovna $mt4r$, jejímž autorem je Bernd Kreuss, umožňuje spouštět instanci R Project a provádět tak příkazy R z Metatraderu 4. K přenosu dat se používají různé struktury od jednoduchých čísel a textových řetězců až po komplexní datové rámce. V programu R Project lze napsat skript a následně ho jedním příkazem spustit z Metatraderu 4. 

\subsubsection{Jádro obchodovacího systému v Metatraderu 4}
Na platformě Metatrader jsem vytvořil automatický obchodovací systém, který má za úkol sbírat historická data a transformovat je do vektoru hodnot. Obchodovací systém má externí proměnné, které se používají při optimalizaci. Externí hodnoty jsou velikost vzorku $windowSize$ a velikosti TakeProfit a StopLoss, které slouží k ukončení obchodu, pokud se kurz dotkne dané hranice.

\subsubsection{Jádro trénování SVM v R Project}
Při spuštění skriptu je nutné načíst balíky $TTR$, $e1071$, $gdata$ a $quantmod$, které implementují algoritmy SVM a podpůrné funkce.

Skript v programu R má za úkol vytvořit indikátory technické analýzy. Konkrétně indikátory $SMA10$, $SMA5$, $SMI$, $EMA50-$, $stochastic$ a $MACD$, které jsem určil v předchozí kapitole pomocí rekurzivní eliminace příznaků. Balík $TTR$ obsahuje všechny potřebné funkce pro výpočet indikátorů. 

V další fázi skript spustí proces učení s indikátory a s hodnotami historických pohybů kurzů. Natrénovaný model se použije pro predikci na datech s neznámými směry kurzů. V posledním kroku R vypočítá hodnotu z predikcí, která se uloží do proměnné přístupné z programu Metatrader.

\subsubsection{Měnový pár a časový rámec}
Pro obchodování jsem zvolil měnový pár EUR/USD, který jsem používal pro trénování modelu. EUR/USD je jedním z hlavních párů a je nejvíce likvidní na světě. Měnový pár by nemusel být určujícím faktorem pro úspěch. Strategie se učí z historických dat a pokud dokáže odhalit souvislosti mezi indikátory a vývojem kurzu i u jiných měn, tak bych mohl používat jiné měnové páry. 

Časový rámec jsem zvolil jeden den, kvůli obavám z časové náročnosti modelování SVM. Modelování a optimalizace parametrů je zdlouhavá práce a výpočetně velmi náročná. Proto je můj předpoklad takový, že bude SVM ke svému natrénování potřebovat více času, než aby mohl efektivně reagovat při použití kratších časových rámců. Dalším důvodem pro volbu denního rámce je jeho využití při optimalizaci parametrů SVM v předchozí kapitole.

\subsection{Model pro určování směru trendu kurzu}
V minulých podkapitolách jsem hledal model SVM, který by byl schopný co nejlépe určit budoucí pohyby cen. Testováním a optimalizacemi jsem dospěl k modelu, který určuje budoucí pohyby kurzu v časovém rámci pěti dní. SVM používal  radiální jádrovou funkci s parametry $\gamma = 4$ a cena $C = 10$ a dosahoval přesnosti až 78,241 \% na testovacích datech. 

\subsubsection{Výstup modelu}
Směr trendu model odhaduje na pět dní dopředu. To přináší problém, že při učení zná správné výstupy pouze pro historické časové rámce vzdálené 5 dní. Proto může pro trénování použít pouze data do rámce v čase $t-5$.

Model může predikovat neznámé hodnoty pro rámce v čase $t-4$, $t-3$, $t-2$, $t-1$ a $t$. Proto například predikce v čase $t-4$ určuje hodnotu posunu kurzu v čase $t+1$ vůči rámci $t-4$. Situace je naznačena na obrázku \ref{fig:frameConnection}, ve kterém je vazba mezi rámci označená plnou čárou pro ty rámce, u nichž je v čase $t$ známá predikce. Přerušovanou čárou je naznačená vazba mezi rámci, u kterých je potřebné predikovat hodnotu.

\bigskip
\begin{figure}[h]
\begin{center}
\scalebox{0.8}{\includegraphics{obrazky/framesConnection.eps}}
\caption[Vztah mezi časovými rámci]{\emph{Vztah mezi časovými rámci. } Na grafu jsou uvedeny vazby mezi historickými a budoucími časovými rámci v čase $t$. Plnou čárou je zobrazená vazba, pro kterou známe budoucí vývoj kurzu. Vazby, které jsou nakreslené přerušovanou čárou, znázorňují neznámé hodnoty, které je potřebné predikovat. Zdroj: Vlastní tvorba. }\label{fig:frameConnection}
\end{center}
\end{figure}

Z důvodu nutnosti předpovídat několik následujících rámců jsem se rozhodnul, že bude model SVM při každém kroku predikovat všech pět rámců. Z těchto předpovědí bude vytvořena konstanta, která bude nabývat hodnoty $-1$ pro klesající a hodnoty $1$ pro rostoucí trend. Model bude vracet hodnotu $-1$ nebo $1$, pokud budou předpovědi všech pěti rámců klesající, respektive rostoucí. V případě, že se jedna z pěti hodnot nebude shodovat s ostatními, tak model bude vracet $0$.

\subsection{Pravidla pro vstup a ukončení obchodu}
V prvotním návrhu byla pravidla pro vstup do a výstup z obchodu založena pouze na rozhodování klasifikátoru. Hodnota predikce určuje budoucí vývoj kurzu. Pro vstup do obchodu platí, že když je předpokládaný směr kurzu stoupající, tak se provede příkaz pro nákup. V případě klesajícího kurzu se zadá příkaz pro prodej. Predikovaný směr určí program R Project ve formátu $1$ pro rostoucí a $-1$ pro klesající kurz a hodnotu pošle do Metatraderu, který provede pokyn.

Ukončení obchodu se vykoná při změně směru kurzu. Tedy například, pokud je probíhající obchod typu BUY a program R vyhodnotí následující směr kurzu hodnotou $-1$, Metatrader vystoupí z předchozího obchodu a vstoupí do krátké pozice.

\subsection{Backtesting a optimalizace strategie SVM}
V této podkapitole jsou popsány pokusy s obchodovacím systémem na datech určených k optimalizaci modelu. 

\subsubsection{Experimenty s použitím samotného modelu SVM}
 V tomto experimentu jsem použil k určování vstupů do a výstupů z obchodů pouze predikce modelu SVM. V předešlé podkapitole \ref{subsec:wSize} jsem určoval vhodné velikosti vzorků historických dat používaných při učení modelu. Při optimalizaci a evaluaci měly modely pro všechny délky podobné úspěšnosti predikce. Přesnost na testovací množině dat se pohybovala v rozmezí od 72,727 \% do 78,241 \%. Z tohoto důvodu jsem se rozhodnul optimalizovat znovu délku vzorku na trénovacích datech od 1. 1. 2014 do 1. 9. 2015. Tentokrát jsem neměřil přesnost predikce, ale výši zisků a relativního poklesu zůstatku.

Spread při optimalizaci jsem použil aktuální, tedy 18 pipsů a vstup do obchodu byl velikosti jednoho lotu. Optimalizoval jsem interval velikostí vzorků od 50 do 250 při kroku o velikosti 10, tedy 21 iterací. 

Výsledek optimalizace na obrázku \ref{fig: optimalization1} znázorňuje vývoj zůstatků, ze kterých je možné pozorovat, že nejvyšší kumulovaný zisk 21193 dolarů při 59 provedených obchodech generovala strategie s velikostí vzorku 50. S prodlužováním úseku dat používaných pro modelování SVM se zisk zmenšoval a nejnižší hodnoty nabýval při použití nejdelšího vzorku 250 historických rámců. Z toho usuzuji, že nejlepších výsledků strategie dosahuje, pokud model používá k trénování nejvíce aktuální data. Starší data pravděpodobně zanášejí chybu do klasifikace.

\bigskip
\begin{figure}[h]
\begin{center}
\resizebox{\textwidth}{!}{%
\includegraphics{obrazky/optimalization1.png}}
\caption[Výsledek optimalizace délky vzroku]{\emph{Výsledek optimalizace délky vzroku. } }\label{fig: optimalization1}
\end{center}
\end{figure}

Po detailním prozkoumání jednotlivých obchodů je patrné, že přestože některé vstupy do obchodů byly provedeny ve správný okamžik, obchody byly ztrátové nebo s minimálním ziskem kvůli pozdnímu ukončení. Ukázka podobné situace je na obrázku \ref{fig: buyProblem }. Čas pro nákup označený $BUY 1$ je určený správně, ale vyhodnocení modelu o ukončení obchodu se provedlo později než by bylo optimální pro generování zisku. Na stejném obrázku je vidět další obchod označený $BUY 2$, který následoval trend a vykazoval zisk. 

\bigskip
\begin{figure}[h]
\begin{center}
\scalebox{0.7}{\includegraphics{obrazky/buyProblem.png}}
\caption[Uskutečněné obchody]{\emph{Uskutečněné obchody. } Na obrázku je uvedena situace, kdy obchodovací systém vstoupil do obchodu ve správný čas. Ukončení obchodu nebylo optimální a vedlo k minimálnímu zisku. Další obchod skončil ve správný moment a byl ziskový. Zdroj: Vlastní tvorba, Metatrader 4. }\label{fig: buyProblem }
\end{center}
\end{figure}

Možnosti jak eliminovat situace, při kterých se neuskuteční možný zisk, jsou například vhodně zvolená velikost Take Profit nebo technika Trailing Stop. Použití těchto technik samotných neřeší dříve uvedený problém s pozdním uzavřením obchodů ideálně. Obchod se sice ukončí se ziskem, ale následně znovu začíná a pokračuje ve špatném rozhodnutí, které vede ke ztrátě. Z tohoto důvodu jsem do strategie přidal pravidlo, které na určitý čas pozastaví rozhodování v případě, že předchozí obchod byl ukončen příkazem Stop Loss. Délku tohoto období jsem určil pomocí optimalizace na hodnotu sedm dní.

\subsubsection{Testování hranic ztráty a zisku}
Pro tento experiment jsem implementoval do obchodovacího systému možnost ukončovat obchod pomocí operace Trailing Stop. Trailing Stop může být implementován na straně serveru a zadává se jako typ obchodního příkazu. Provádění příkazu Trailing Stop na serveru má výhodu v tom, že ukončení obchodu není závislé na klientské platformě a vykonává se bez potřeby dohledu investora. Poskytovatel testovacího účtu pro Metatrader 4 nepodporuje Trailing Stop příkazy.
Další možností je vytvořit vlastní strategii pro Trailing Stop v obchodovacím systému. V tomto případě jsem se rozhodl postupovat stejně jako K. Lien, která ve své knize Day Trading and Swing Trading the Currency Market uvádí výpočet Trailing Stop hodnoty vzhledem k minimu z posledních dvou časových rámců\cite{lien2008day}. 

Na testovacím období jsem provedl optimalizaci velikostí Trailing Stop, Stop Loss a Take Profit. Hodnoty Stop Loss i Take Profit nižší než 1000 bodů způsobují, že jsou obchody ukončovány příliš brzo a strategie končí se ztrátou. Proto jsem se rozhodnul testovat hodnoty mezi 1000 a 5000 bodů. 

Pro hodnoty Stop Loss o velikosti 4000 bodů a víc dosahovaly strategie nejvyšší zisky. Z analýzy těchto strategií vyplývá, že se Stop Loss využívá minimálně a způsobuje častěji více ztrát než zisků. Z tohoto důvodu jsem se rozhodnul jej dále nepoužívat jako indikátor ukončování obchodů, ale pouze jako ochranu účtu pro mezní případy s hodnotou 5000 bodů.

Take Profit v hodnotách 1500 a 1750 se v žebříčku optimalizací vyskytoval mezi nejlepšími strategiemi z hlediska zisku, míry poklesu a ziskového faktoru.

Pro velikosti Trailing Stop se při optimalizaci ukázalo, že nižší hodnoty vedly k nižší procentuální míře poklesu, zatímco vyšší hodnoty vykazovaly vyšší zisky. Snažil jsem se vyhnout přeoptimalizování, proto jsem určil jako důležitější faktor procentuální pokles a vybral jsem hodnotu 50 pro Trailing Stop.

Strategii s optimalizovanými parametry jsem testoval na in-sample vzorku dat. Výsledná křivka vývoje zůstatku při testování strategie je na obrázku \ref{fig: svmOptim }. Zisk se z původních 21193 dolarů zvýšil na 21214 dolarů. To není mnoho, přínosem je, že se podařilo snížit relativní pokles z 32,5 \% na 25,9 \%. Další rozdíl je v počtu provedených transakcí. Původní strategie provedla 59 obchodů, zatímco tato optimalizovaná strategie s novými pravidly pro ukončení obchodu uskutečnila 84 obchodů. Celkový zisk se rozprostřel do více menších obchodů, které byly ve větším procentu ziskové.

\bigskip
\begin{figure}[h]
\begin{center}
\resizebox{\textwidth}{!}{%
\includegraphics{obrazky/TesterGraphOptimSVM.png}}
\caption[Kumulovaný zůstatek optimalizované strategie]{\emph{Kumulovaný zůstatek optimalizované strategie. } Na obrázku je uveden vývoj zisku v období určeném pro backtesting analýzu po optimalizaci parametrů strategie.  Zdroj: Vlastní tvorba, Metatrader 4. }\label{fig: svmOptim }
\end{center}
\end{figure}

\subsection{Walk-forward analýza SVM}
Pro testování optimalizované strategie jsem použil historická data od 2. 9. 2015 do 15. 5. 2016. Křivka majetku v tomto období je na obrázku \ref{fig: backTestEurUsd }, kde můžeme vidět, že strategie generovala zisk. Prvních osm obchodů střídalo zisk a ztrátu, takže se hodnota zůstatku držela okolo počátečních 10000 dolarů.  Výsledný zisk se v daném období po provedených 32 obchodech dostal na 4949 dolarů. 

\bigskip
\begin{figure}[h]
\begin{center}
\resizebox{\textwidth}{!}{%
\includegraphics{obrazky/TesterGraphOptimSVM.png}}
\caption[Kumulovaný zůstatek optimalizované strategie]{\emph{Kumulovaný zůstatek optimalizované strategie. } Na obrázku je uveden vývoj zisku v období určeném pro out of sample analýzu.  Zdroj: Vlastní tvorba, Metatrader 4. }\label{fig: backTestEurUsd }
\end{center}
\end{figure}

\subsubsection{Testování na dalších měnových párech}
Z hlediska povahy strategie, která je založená na principu strojového učení nic nebrání tomu, abych testoval obchodovací systém na dalších měnách. Zkusím proto testovat několik dalších měnových párů na období od 2. 9. 2015 do 15. 5. 2016.

\paragraph{USD/CHF}
Na měnovém páru amerického dolaru a švýcarského franku se strategie udržela. V průběhu dokonce i generovala zisk 5469 dolarů. Výsledná ztráta končila na hodnotě -344 dolarů.

\paragraph{GBP/USD}
Účet se spuštěnou strategií na měnovém páru GBP/USD skončil na nule po dvanácti obchodech. 

\paragraph{USD/JPY}
V případě japonského jenu a amerického dolaru strategie generovala zisk 4605 dolarů. Relativní pokles 27,5 \% byl podobný poklesu u EUR/USD měnového páru při backtesingu. 

\paragraph{CHF/JPY}
Relativní pokles u švýcarského franku a japonského jenu byl vysoký 42,21 \% a výsledný zisk jen 202 dolarů. Průběh všech obchodů je velmi nestabilní a zisk střídá ztráta.

\paragraph{EUR/CAD}
Test strategie spuštěné na euru a kanadském dolaru skončil ziskem 3693 dolarů. Relativní pokles byl 70 \%, což značí velmi nestabilní vývoj. 

\subsubsection{Shrnutí výsledků}
V této podkapitole jsem testoval výkon strategie na testovacím období od 2. 9. 2015 do 15. 5. 2016. V případě EUR/USD dopadly testy úspěšně a strategie generovala zisk. Zkoušel jsem také testovat dalších pět měnových párů. V tomto testu strategie někdy prospívala poměrně dobře, většinou u měnových párů tvořených s americkým dolarem. V jiných případech skončila bankrotem celého účtu. 

Po analýze grafů se zaznamenanými obchody se zdá, že strategie dokáže s poměrně velkou úspěšností předpovídat a držet své předpovědi, pokud se kurz drží v trendu. Pokud není žádný trend a cena jenom osciluje, tak často strategie produkuje falešné signály.

\chapter{Závěr}
Ve své práci jsem popisoval teoretická východiska obchodování na Forexu. Byly rozebrány koncepty fundamentální, psychologické a technické analýzy trhů. V části technické analýzy bylo uvedeno několik používaných indikátorů.
V další části byly popsány základní koncepty a druhy strojového učení. Dále jsem se zaměřil na Support Vector Machines. Popisoval jsem princip klasifikace a regrese pomocí metody podpůrných vektorů.

Dále jsem se zaměřil na analýzu problému. Popisoval jsem techniky využívané pro transformaci dat. Transformovaná data mohou pomoci při trénování modelů SVM z hlediska zvyšování přesnosti výpočtů i snižování výpočetní náročnosti. Dále jsem se v této kapitole zabýval výběrem výstupních hodnot z hlediska regrese a klasifikace. V další části jsem uvedl několik možností hodnocení kvality predikce s ohledem na regresní a klasifikační úlohy. V poslední podkapitole jsem se zabýval vlivem a optimalizací parametrů, které využívají SVM pro definování algoritmů při učení.

V rozboru vlastního řešení popisuji množinu indikátorů technické analýzy, kterou jsem používal pro trénování modelu SVM. Dále jsem se zaměřil na možnosti předpovídat hodnoty kurzu, nebo hodnoty změn kurzu. V tomto případě byly úspěšnosti predikcí směru trendu na úrovni pravděpodobnosti náhody. Odchylky predikovaných hodnot od hodnot reálných byly taky poměrně vysoké. Také jsem testoval predikci směrů, kterou jsem definoval jako binární klasifikační úlohu. Možnosti, které jsem predikoval, byly, že kurz poroste, nebo bude klesat. Experimentoval jsem s odhadováním směru kurzu na jeden a na pět časových rámců. V tomto případě byl jeden časový rámec jeden den. Už při výběru vstupních hodnot pomocí rekurzivní eliminace příznaků jsem zjistil, že odhadování změny kurzu na příští den nebude mít větší úspěšnost než regrese. Odhadování směru vývoje kurzu na pět dní dopředu mělo poměrně vysokou přesnost predikcí. Ve všech případech, kdy byla použitá radiální jádrová funkce pro trénování modelu SVM, přesnost dosahovala více než 72,7 \%. Nejvyšší dosažená přesnost byla 78,3 \%. Rozhodnul jsem se proto využít tohoto modelu pro tvorbu rozhodnutí pro obchodovací systém.

V další části vlastního řešení jsem popisoval implementaci obchodovacího systému. Systém využíval pro kontrolu obchodů pouze rozhodnutí klasifikátoru. Výsledný zisk po optimalizaci byl 21193 dolarů při 59 provedených obchodech. Přestože byla strategie zisková, obchody se často neukončovaly ve správný čas. Rozhodnul jsem se proto implementovat v systému Trailing Stop, který měl za úkol ukončovat obchody, dokud byly ziskové. Následně jsem optimalizoval parametry obchodovacího systému a evaluoval jsem jeho výkon na historických datech. To vedlo ke zvýšení zisku na 21214 dolarů a počtu obchodů na 84. Současně se snížila míra poklesu a docházelo častěji ke vstupu do obchodů s kratším trváním. Dále následoval test strategie na historických datech v období od 2. 9. 2015 do 15. 5. 2016, ve kterém jsem již neprováděl optimalizaci. V tomto testu měla strategie zisk 4949 dolarů při 32 obchodech.

Strategie, kterou jsem implementoval v této práci, je poměrně nestabilní a obchody zažívají velké výkyvy. Je to dáno tím, že strategie generuje zisky při následování trendů a k tomu potřebuje velkou volnost s ohledem na hranice ztráty Stop Loss a hranice zisku Take Profit. Přesto se podařilo na několika měnových párech generovat zisk jak ve fázi backtestingu, tak i ve fázi Walk-forward analýzy. 

Systém by podle mého názoru byl využitelný, ale nejspíš ne samostatně. Jako možnost rozšíření vidím použití s jinou strategií, která by pomáhala potvrzovat příkazy pro obchod a dokázala by ukončovat obchody s vyšším ziskem. 

