Nejprve si otevřeme MetaEditor se strategií. Naším cílem bude tvorba proměnných, které budou zastupovat parametry, se kterými chceme v rámci optimalizace pracovat. Těmi mohou být např. úrovně stop lossu a take profitu, perioda klouzavého průměru či objem obchodů.
Můžeme začít například právě s objemem. Ten v našem kódu zadáváme v obchodní funkci OrderSend() jako třetí parametr a dříve jsme ho nastavili na výchozí hodnotu 1, tedy 1 lot.
OrderSend(Symbol(),OP_BUY,1,Ask,0,stoploss,takeprofit,NULL,0,0,clrNONE)
Místo pevně stanovené hodnoty však můžeme použít proměnnou. Pro objem zvolíme datový typ double a v hlavičce kódu si tak specifikujeme novou proměnnou. Důležitým krokem je přidání klíčového slovíčka extern před deklaraci. Díky tomu bude možné s proměnnou později pracovat v testeru strategií. Zároveň přiřadíme proměnné rovnou i výchozí hodnotu. Zápis bude vypadat následovně:
extern double objem=1;
Nyní můžeme do funkce OrderSend() místo pevné hodnoty 1 napsat název nově vytvořené proměnné – objem.
Č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
Tvorba vlastního AOS (4) – Struktura programu
Tvorba vlastního AOS (5) – Deklarace a výpočet proměnných
Tvorba vlastního AOS (6) – Nákupní podmínky a obchodní funkce
Tvorba vlastního AOS (7) – Ochrana proti opakovaným příkazům
Podobným způsobem budeme pokračovat i dále. Periodu klouzavého průměru specifikujeme ve funkci iMA v proměnné hodnota_MA jako třetí parametr. Můžeme si tak opět vytvořit novou proměnnou pro periodu klouzavého průměru například ve tvaru:
extern int perioda_MA=100;
Místo pevně stanovené hodnoty 100 tak vložíme pouze perioda_MA.
Zbývají nám ještě parametry stop loss a take profit. Úpravou v nastavení toho, jestli chceme na 1 obchod riskovat 2 % a cílovat zisk 4 % , nebo zvolit úplně jiné hodnoty, může být dosaženo výrazně odlišných výsledků. Z toho důvodu se nám tyto parametry budou při optimalizaci rozhodně hodit. Nestačilo by však nyní pouze využít stávající proměnné stoploss a takeprofit, jelikož v těch je uložena cenová úroveň odvíjející se od aktuální ceny při vstupu do obchodu. My chceme mít možnost manipulovat s výší procent. Aktuálně je hodnota proměnné počítána takto:
stoploss=Close[0]*0.98;
Tím je vypočítána úroveň stop lossu jako aktuální cena bez 2 %. Možnost měnit procentuální vyjádření můžeme však získat například následujícím zápisem s využitím nové proměnné (s názvem stoploss_procenta):
stoploss=Close[0]*(1-stoploss_procenta);
Jako menšenec od jedničky je použita nová proměnná, se kterou je v základním nastavení na 2 % dosaženo stejné hodnoty závorky jako původně (0.98). Nyní však můžeme měnit pouze hodnotu proměnné a tím upravovat velikost stop lossu v procentuálním vyjádření. Nezapomeňte na vytvoření samotné proměnné.
extern double stoploss_procenta=0.02;
Obdobný postup platí také pro take profit. Pevnou hodnotu 1.04 v jeho výpočtu nahradíme operací s novou proměnnou (takeprofit_procenta), která vyjadřuje procentuální hodnotu take profitu. Nový výpočet proměnné takeprofit bude tedy následovný:
takeprofit=Close[0]*(1+takeprofit_procenta);
Nezapomeňte, že zde musí být znaménko plus, jelikož úroveň takeprofit je vyšší než aktuální tržní cena a procenta k ní musí být tedy přičítána. V hlavičce kódu vznikne proměnná:
extern double takeprofit_procenta=0.04;
Pro kontrolu si můžete prohlédnout pozměněné a nové části kódu, tedy proměnné v hlavičce, výpočet hodnot proměnných ve funkci OnTick() a proměnnou s obchodní funkcí.
Proměnné v hlavičce:
Výpočet hodnot proměnných:
Obchodní funkce:
Nyní máme připraveny 4 parametry, se kterými lze dále pracovat v testeru strategií. Pokud kód zkompilujeme, otevřeme tester strategií a klikneme na tlačítko „Vlastnosti strategie“ zjistíme, že se objevila nová záložka s názvem „Vložit parametry“. V ní nalezneme námi nově vytvořené proměnné.
Jak s nimi pracovat při optimalizace strategie si ukážeme v příštím díle.