Začneme deklarací proměnných, o kterých již víme, že je budeme určitě potřebovat. Ze zadání víme, že si musíme spočítat úroveň pro vstup do trhu, do hlavičky (nad funkci OnTicket() ) tak napíšeme:
double uroven_vstupu;
Tímto jsme deklarovali novou proměnnou s názvem uroven_vstupu, která má datový typ double, jelikož její hodnota bude číslo s desetinným místem. Stejně tak budeme dál potřebovat proměnné pro určení maximálního risku a požadovaného profitu z daného obchodu. Ty si pojmenujeme jako stoploss a takeprofit a jelikož se bude jednat pouze o celá čísla, jako datový typ zvolíme integer.
int stoploss;
int takeprofit;
Poslední hodnotou, o které nyní víme, že ji budeme potřebovat je úroveň klouzavého průměru (Moving Average, MA), která bude sloužit k potvrzení obchodního signálu.
double hodnota_MA;
Kód nyní vypadá následovně:
Čtěte dále:
Tvorba vlastního AOS (1) – Úvod do problematiky a smysl využití obchodního robota
Tvorba vlastního AOS (2) – Seznámení s MetaEditorem
Tvorba vlastního AOS (3) – Základy programovacího jazyka MQL4
Dalším krokem bude výpočet proměnných. K výpočtu proměnných přejdeme do funkce OnTick(), jelikož chceme, aby se jejich hodnota přepočítala s každou novou změnou ceny (s každým tickem). Začneme proměnnou uroven_vstupu, která má najít úroveň pro vstup, jež se dle zadání nachází 1 % hodnoty indexu pod uzavírací cenou předchozího dne. Zápis vypadá následovně:
uroven_vstupu = Close[1] * 0.99;
Proměnná je již deklarována v hlavičce, lze tedy rovnou psát a přiřadit hodnotu. Hodnotu uzavírací ceny získáme z předdefinované proměnné Close[], kterou již známe. Index ve složené závorce určí, o jakou svíčku (v našem případě den, jelikož budeme strategii obchodovat na denním grafu) se jedná. Index je počítán od konce, poslední svíčka má tak index 0, předposlední 1 a tak dále. Nás zajímá předchozí den, tedy předchozí svíčka na grafu, použijeme tak index 1. O 1 % pod úroveň této hodnoty se lze dostat vynásobením uzavírací ceny číslem 0.99 (pozor na desetinnou tečku).
Výpočet proměnných stoploss (2 %) a takeprofit (4 %) se proveden podobně, akorát u nich chceme vycházet z hodnoty indexu v moment nákupu, použijeme tedy uzavírací cenu aktuální svíčky, na které provádíme nákup (Close[0]).
stoploss=Close[0] * 0.98;
takeprofit=Close[0] * 1.04;
Poslední proměnnou k výpočtu je klouzavý průměr, který je jakožto indikátor editoru dobře známý. Jeho hodnotu lze spočítat pomocí funkce iMA(), která má 7 parametrů a následující zápis:
double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
Parametr symbol specifikuje konkrétní trh, při zadání Symbol() bude pracovat s aktuálně zvoleným trhem.
Timeframe určuje časový rámec grafu. Při zadání 0 použije aktuální timeframe grafu.
Period specifikuje počet období určených k výpočtu klouzavého průměru. My chceme dle zadání periodu 100.
Ma_shift je posunutí linie grafu. To nevyužijeme, tedy 0.
Ma_method specifikuje metodu výpočtu klouzavého průměru, kterých je vícero. My chceme jednoduchý klouzavý průměr s kódem MODE_SMA.
Applied_price určuje typ ceny, ze které je MA počítán. Běžné se používá uzavírací cena, tedy PRICE_CLOSE.
Shift nabízí možný posun na jinou svíčku, pomocí indexu. Nevyužijeme, tedy 0.
Námi požadovaný zápis funkce, kterou umístíme do proměnné hodnota_MA tak bude vypadat následovně:
iMA(Symbol(),0,100,0,MODE_SMA,PRICE_CLOSE,0);
Podobným způsobem lze vypočítat také hodnoty ostatních technických indikátorů, které lze v MT4 nalézt. Lišit se budou pouze parametry, ty jsou však pro každý indikátor dostupné v oficiální dokumentaci.
Nyní máme vytvořených několik proměnných, které budeme dále potřebovat. Příště se již dostaneme k samotné nákupní funkci, která na základě stanovených pravidel provádí obchodní příkazy.