MQL4 COURSE. By Coders guru Váš první Expert Advisor - Část 2

Podobné dokumenty
MQL 4 COURSE. By Coders guru -15 Váš první Expert Advisor - Část 3

MQL4 COURSE. By Coders guru Váš první Expert Advisor - část 1

MQL4 COURSE. By Coders guru (Dodatek 2) Obchodní Funkce

MQL4 COURSE. V tomto dodatku je obsažen popis 25 obchodních funkcí jazyka MQL4. Rozhodl jsem se napsat

MQL4 COURSE. By Coders guru Váš první indikátor Část 1

MQL4 COURSE. By Coders guru -12 Váš první indikátor Část 3

MQL4 COURSE. By Coders guru Váš první indikátor - část 2

MQL4 COURSE. By Coders guru -8- Proměnné

MQL4 COURSE. By Coders guru -5 Smyčky & Rozhodnutí Part 1

MQL4 COURSE. By Coders guru -5 Smyčky & Rozhodnutí Část 2

MQL4 COURSE. By Coders guru -3 DATA TYPES. Doufám, že předchozí lekce SYNTAX se vám líbila. V té jsme se pokoušeli zodpovědět:

Channel EA: Nastavitelné hodnoty: Take Profit, SL, počet bodů, o které má být trend proražen, Lot size

8 Třídy, objekty, metody, předávání argumentů metod

MetaTrader 4 Builder. X-Trade Brokers DM S.A., organizační složka. Vzorové strategie. X-Trade Brokers DM S.A., organizační složka 1/9

MQL4 COURSE. By Coders guru -4 Operace & Výrazy

6. blok část C Množinové operátory

Obchodujeme systém. RSIcross. Martin Kysela

Nyní, namísto monstrózního zápisu hodnoty imacd(null,0,12,26,9,price_close,mode_main,0), můžete ve zdrojovém kódu použít MacdCurrent.

MIDAM Simulátor Verze 1.5

Programy zapsané v jazyku MetaQuotes Language mají čtvero různých vlastností a určení:

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Obsah TradeMaster. Obchodování...2. Analyzer Automatické strategie Další možnosti Kontaktní údaje...30

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

CBR Test dimenzač ní čh parametrů vozovek

Výčtový typ strana 67

MetaTrader 4 Builder. X-Trade Brokers DM S.A., organizační složka. Manuál k základnímu ovládání. X-Trade Brokers DM S.A., organizační složka 1/26

DUM 06 téma: Tvorba makra pomocí VBA

Soukromá střední odborná škola Frýdek-Místek, s.r.o. VY_32_INOVACE_49_IVT_MSOFFICE_05_Word

Text úlohy. Systémový katalog (DICTIONARY):

Step 7 test Programu pomocí online spojení s CPU

Textové popisky. Typ dat

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

1. Programování proti rozhraní

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

MySQLi (objektově) Příklad vytvoření instance třídy včetně parametrů pro připojení: $mysqli = new mysqli('localhost', 'login', 'heslo', 'databaze');

Návod uživatele. Obchodní platformy BOSSAFX Multiterminál. Dom Maklerski Banku Ochrony Środowiska S.A.

Úvod do programovacích jazyků (Java)

Instrukce pro zprovoznění FXstreet.cz VIP Exit Managera

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

6 Příkazy řízení toku

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

E-book Magazínu FOREX

METATRADER 4 PRŮVODCE ZAČÁTEČNÍKA

Základní nastavení systému Windows 7

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

typová konverze typová inference

7. Datové typy v Javě

1. Téma 03 - Rozhodování

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

Microsoft Office. Word vzhled dokumentu

2

xmobile Operační systém Andorid Uživatelský manuál X-Trade Brokers DM S.A., organizační složka 1/12

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

PREZENTACE 1.22 HYPERTEXTOVÉ ODKAZY

PŘETĚŽOVÁNÍ OPERÁTORŮ

MetaTrader Mobile Uživatelský manuál Operační systém Andorid HIGHSKY.CZ

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Postup instalace ČSOB BusinessBanking pro MS SQL 2005/2008

PREZENTACE ÚPRAVA POZADÍ SNÍMKU

JOE ROSS V ČR TRADERS UNIVERSITY

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Algoritmizace a programování

Střední odborná škola a Střední odborné učiliště, Hořovice

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Úvod do programování. Lekce 3

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

MetaTrader PRO. Mini terminal Trade terminal. X-Trade Brokers DM S.A., organizační složka 1/22

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 6. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.

MS Excel 2007 Kontingenční tabulky

GEOGRAFICKÉ INFORMAČNÍ SYSTÉMY CVIČENÍ 4

Z. Kotala, P. Toman: Java ( Obsah )

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

MS Excel makra a VBA

Cvičení 2. Přesměrování vstupu a výstupu. Posloupnost příkazů. Příkazy pro informaci o uživatelích

051.MT4.v Orientace v Platformě MT4

Plus500CY Ltd. Politika realizace příkazů

Postup pro vytvoření žádosti o digitální certifikát pro produkční prostředí Základních registrů

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Manuál k aplikaci FieldGIS v.2.27

Synco living. Ovládání Centrální jednotka. Srpen 2008 Strana1/12 Michal Bassy - Srpen 2008

Konstruktory a destruktory

Objektově orientované programování

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Více o konstruktorech a destruktorech

C# konzole Podíl dvou čísel, podmínka IF

PREPROCESOR POKRAČOVÁNÍ

Programování v C++ 2, 4. cvičení

SMTPServer - Příručka

Př. další použití pointerů

Paměť počítače. alg2 1

Transkript:

MQL4 COURSE By Coders guru www.forex-tsd.com -14 Váš první Expert Advisor - Část 2 Vítejte ve druhé části lekce vytváření vašeho prvního Expert Advisoru. V předchozí části jsme převzali kód, vygenerovaný pomocníkem new program wizard a přidali váš vlastní kód, který si dnes vysvětlíme řádek po řádku. Máte nasazeny kódovací rukavice? Pojďme tedy na to. Poznámka: Musím opakovat, že náš expert advisor slouží pouze k výukovým účelům a nebude nám přinášet žádný zisk (ani k tomu není stvořen). Kód, který máme: // My_First_EA.mq4 // Coders Guru // http://www.forex-tsd.com #property copyright "Coders Guru" #property link "http://www.forex-tsd.com" //----vstupní parametry TakeProfit=250.0; Lots=0.1; TrailingStop=35.0;

// expert inicializační funkce int init() //---- //---- // expert deinicializační funkce int deinit() //---- //---- int Crossed (double line1, double line2) static int last_direction = 0; static int current_direction = 0; if(line1>line2)current_direction = 1; //nahoru if(line1<line2)current_direction = 2; //dolů if(current_direction!= last_direction) //změněno last_direction = current_direction; return (last_direction); else

return (0); // expert spouštěcí funkce int start() //---- int cnt, ticket, total; double shortema, longema; if(bars<100) Print("bars less than 100"); if(takeprofit<10) Print("TakeProfit less than 10"); // kontrola - TakeProfit shortema = ima(null,0,8,0,mode_ema,price_close,0); longema = ima(null,0,13,0,mode_ema,price_close,0); int iscrossed = Crossed (shortema,longema); total = OrdersTotal(); if(total < 1) if(iscrossed == 1)

ticket=ordersend(symbol(),op_buy,lots,ask,3,0,ask+takeprofit*point, "My EA",12345,0,Green); if(ticket>0) if(orderselect(ticket,select_by_ticket,mode_trades)) Print("BUY order opened : ",OrderOpenPrice()); else Print("Error opening BUY order : ",GetLastError()); if(iscrossed == 2) ticket=ordersend(symbol(),op_sell,lots,bid,3,0, Bid-TakeProfit*Point,"My EA",12345,0,Red); if(ticket>0) if(orderselect(ticket,select_by_ticket,mode_trades)) Print("SELL order opened : ",OrderOpenPrice()); else Print("Error opening SELL order : ",GetLastError()); for(cnt=0;cnt<total;cnt++) OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(ordertype()<=op_sell && OrderSymbol()==Symbol()) // má být uzavřena? if(ordertype()==op_buy) // long position je otevřena

if(iscrossed == 2) //uzavření pozice OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // opuštění // kontrola - trailing stop else // přechod k short position // má být uzavřena? if(iscrossed == 1) if(trailingstop>0) if(bid-orderopenprice()>point*trailingstop) if(orderstoploss()<bid-point*trailingstop) OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Point*TrailingStop,OrderTakeProfit(),0,Green); // uzavření pozice OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // opuštění // kontrola - trailing stop if(trailingstop>0) if((orderopenprice()- Ask)>(Point*TrailingStop))

if((orderstoploss()>(ask+point*trailingst op)) (OrderStopLoss()==0)) OrderModify(OrderTicket(),Order OpenPrice(),Ask+Point*TrailingS top, OrderTakeProfit(),0,Red); Co se skrývá za funkcí expert advisor. Před zabořením se do objasňování našeho kódu si musíme vysvětlit, co stojí za myšlenkou funkce expert advisor. Každý expert advisor musí rozhodnout, kdy vstoupit na trh a kdy jej opustit. A podstatou každé funkce expert advisor je za jakých podmínek má vstupování a vystupování probíhat. Náš expert advisor patří k těm jednoduchým a jeho podstata je rovněž jednoduchá. Pojďme se tedy na ni podívat. Používáme dva EMA indikátory, 8 denní (short EMA) a druhý 13 denní (long EMA). Poznámka: Používání těchto EMA či jakékoliv jiné myšlenky v této lekci neslouží jako doporučení, nýbrž pouze ke studijním účelům. Vstup (Open): Náš expert advisor vstoupí na trh, když linie short EMA přetne linii long EMA, směr každé linie určí typ příkazu: Pokud je short EMA nad long EMA proběhne nákup (long). Pokud je short EMA pod long EMA proběhne prodej (short). Otevřeme pouze jeden příkaz najednou.

Opuštění (Close): Náš expert advisor uzavře příkaz buy, když short EMA přetne long EMA a short EMA je pod long EMA. A uzavře příkaz sell, pokud short EMA přetíná long EMA a short EMA je nad long EMA. Náš příkaz (nákup nebo prodej) bude rovněž automaticky uzavřen, když budou dosaženy body Take profit nebo Stop loss. Modifikace: Kromě vstupování (opening) a opouštění (closing) trhu (positions), náš expert advisor má schopnost modifikace existujících pozic na základě bodu Trailing stop. Jak implementovat tuto funkci se dozvíme dále v této lekci. Nyní budeme pokračovat v objasňování našeho kódu. //----vstupní parametry TakeProfit=250.0; Lots=0.1; TrailingStop=35.0; Ve výše uvedených řádcích jsme pomocníka požádali o deklarování 3 externích proměnných (které může uživatel nastavit z okna properties). Tyto tři proměnné jsou typu double. Inicializovali jsme je jako výchozí hodnoty (uživatel může změnit tyto hodnoty v okně properties, doporučuje se však jejich ponechání jako výchozích (defaults)). Nyní se na chvíli pozastavím, abych vám něco řekl o těchto proměnných. Stop loss: Je limitní bod, kterým nastavujete příkaz pro zastavení. Když je dosažena jeho hodnota, pozice bude uzavřena. To je užitečné pro minimalizaci vašich ztrát, když trh mluví proti vám. Body Stop loss jsou vždy nastaveny pod aktuální vyvolávací cenou při nákupu a nad aktuální nabízenou cenou při prodeji. Trailing Stop Je druhem příkazu stop loss, který je nastaven na určité procento pod (v případě long position) nebo nad (v případě short position) cenou trhu. Cena je nastavena podle její fluktuace. O tomto velmi důležitém konceptu budeme hovořit dále v této lekci. Take profit: Je podobný, jako příkaz stop loss, ve smyslu příkazu stanovení limitního bodu, kdy po jeho dosažení dojde k uzavření pozice.

Vyskytují se zde však dva rozdíly: Nevyskytuje se zde trailing point. Bod pro opuštění musí být nastaven nad aktuální cenou trhu, namísto pod ní. Obr. 1 Nastavení bodů Stop loss a Take profit int Crossed (double line1, double line2) static int last_direction = 0; static int current_direction = 0; if(line1>line2)current_direction = 1; //nahoru if(line1<line2)current_direction = 2; //dolů if(current_direction!= last_direction) //změněno last_direction = current_direction; return (last_direction); else return (0);

Jak jsem uvedl již dříve, podstatou funkce expert advisor je monitoring křížení linií short EMA a the long EMA. A udávání směru překřížení (která linie je nad a která pod), čímž bude určen typ příkazu (buy, sell, buy-close a sell-close). Za tímto účelem jsme vytvořili funkci Crossed. Funkce Crossed přebírá dvě hodnoty double a vrací hodnotu integer. První parametr je hodnota první linie, kterou si přejeme monitorovat (short EMA v našem případě) a druhý parametr je hodnota druhé linie (long EMA). Funkce bude monitorovat obě linie pokaždé, když ji vyvoláme uložením směrů obou linií ve statických proměnných k zapamatování jejich stavu mezi opakovaným vyvoláním. Vrátí hodnotu 0, pokud nedošlo k žádné změně v naposledy uloženém směru. Vrátí hodnotu 1, pokud došlo ke změně směru (linie se vzájemně protínají ) a první linie je nad druhou. Vrací hodnotu 2, pokud byl směr změněn (linie se vzájemně protínají) a první linie je pod druhou. Poznámka: tuto funkci můžete použít v dalším expert advisoru pro monitorování jakýchkoliv dvou linií a stanovení směru překřížení. Podívejme se, jak jsme jej zapsali Tento řádek je deklarování funkce, což znamená, že si přejeme vytvořit funkci Crossed, která přebírá dva parametry datového typu double a navrací integer. Když tuto funkci vyvoláte, musíte jí poskytnout dva parametry typu double a vrátí vám hodnotu celého čísla. Funkci musíte deklarovat před jejím používáním (voláním). Na umístění funkce nezáleží, já jsem ji umístil nad funkcí start(), vy ji však můžete umístit kdekoliv jinde. Zde jsme deklarovali dvě statické hodnoty integer k udržení posledního a aktuálního směru obou linií. Tyto proměnné použijeme (jedná se o statické proměnné, což znamená, že své hodnoty uloží mezi opakovaným voláním) pro kontrolu, zda došlo ke změně směru linií nebo nikoliv. My jsme ji inicializovali na 0, protože po nich nechceme, aby pracovaly při prvním vyvolání funkce

(kdyby pracovaly při prvním spuštění expert advisoru, otevřely by příkaz ihned po spuštění klientského terminálu). V tomto řádku srovnáváme dvě statické proměnné pro kontrolu změn mezi posledním voláním naší funkce a aktuální funkcí. Pokud se last_direction nerovná current_direction, znamená to, že se ve směru nevyskytla žádná změna. V tomto případě (last_direction není rovno current_direction) musím resetovat last_direction pomocí přiřazení hodnoty current_direction. A my vrátíme hodnotu posledního směru last_direction. Tato hodnota bude 1, pokud je první linie nad druhou a 2, pokud je pod druhou linií. Jinak (last_direction je rovno current_direction) nedojde k žádné změně směru linií a nám se vrátí 0. Náš program vyvolá tuto funkci při spuštění těla funkce start() a použije vrácenou hodnotu k určení odpovídající akce. V další části lekce se dozvíme, jak jsme vyvolali funkci a dozvíme se mnohé o velmi důležitých obchodních funkcích (trading). Pro dnešek vám přeji hodně štěstí. Velmi uvítám jakékoliv dotazy a návrhy. S pozdravem Coders Guru 01-12-2005