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

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

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

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

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

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

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

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:

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

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

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

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

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

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

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

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

Algoritmizace a programování

Třída DrawingTool. Obrázek 1: Prázdné okno připravené pro kreslení

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

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

Prezentace a vysvětlení programového prostředí NXC

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

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

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

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

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

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

Více o konstruktorech a destruktorech

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Sada 1 - PHP. 03. Proměnné, konstanty

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Sada 1 - Základy programování

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

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

6 Příkazy řízení toku

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Konstruktory a destruktory

Generické programování

DUM 06 téma: Tvorba makra pomocí VBA

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

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Pole a kolekce. v C#, Javě a C++

Stručný návod k programu Octave

Cvičení č. 2. Komunikace mezi procesy Program Hodiny. 4 body

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox

5 Přehled operátorů, příkazy, přetypování

Mgr. Vlastislav Kučera Header, footer, navv, article, section, boxy, margin, padding, border

Empty, Null, Nothing, Missing, prázdný řetězec a buňka

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

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

KAPITOLA 3 - ZPRACOVÁNÍ TEXTU

IUJCE 07/08 Přednáška č. 6

PREPROCESOR POKRAČOVÁNÍ

Objektově orientované programování

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

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Uživatelská příručka Autor: Martin Fiala

7. Datové typy v Javě

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

PREZENTACE 1.22 HYPERTEXTOVÉ ODKAZY

Algoritmizace a programování

MAXScript výukový kurz

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

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

Excel tabulkový procesor

Programovací jazyk Pascal

Komunikace modulu s procesorem SPI protokol

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

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

O CSS podrobněji. Box model Document flow Layout

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

František Hudek. květen 2012

VISUAL BASIC. Práce se soubory

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Algoritmizace a programování

UniLog-D. v1.01 návod k obsluze software. Strana 1

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

Kolekce, cyklus foreach

Úvod do programování - Java. Cvičení č.4

IRAE 07/08 Přednáška č. 1

Základy programování (IZP)

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Kapitola 11: Formuláře 151

2 Datové typy v jazyce C

Algoritmizace prostorových úloh

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

Projekt Obrázek strana 135

Výčtový typ strana 67

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Univerzální prohlížeč naměřených hodnot

Úvod do programovacích jazyků (Java)

VBA: VYTVOŘENÍ OBJEKTU GRAF (CHART) Deklarace proměnné typu Chart. Pro vytvoření nového grafu použijeme kolekci ChartObjects a její metodu Add.

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

SCIA.ESA PT. Export a import souborů DWG a DXF

8 Makra Příklad 4 Excel 2007

Kontingenční tabulky v MS Excel 2010

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

Knihovna EpsnetLib TXV první vydání září 2012 změny vyhrazeny

Transkript:

MQL4 COURSE By Coders guru www.forex-tsd.com -11 Váš první indikátor - část 2 Vítejte ve druhé části lekce Váš první indikátor. V předchozí lekci jsme nezapsali žádný řádek s kódem, to proto, že pomocník New Project Wizard celý kód zapsal za nás. Děkujeme! Dnes přidáme několik řádků ke kódu, který pro nás pomocník vygeneroval, aby byl pro nás program užitečnějším. Poté si celý kód vysvětlíme, řádek po řádku. Začněme tedy kódovat. Kódy, které jsme přidali: Kódy, které jsme přidali, jsou vyznačeny tučně tmavě modře k původnímu kódu: // My_First_Indicator.mq4 // Codersguru // http://www.forex-tsd.com #property copyright "Codersguru" #property link "http://www.forex-tsd.com" #property indicator_separate_window #property indicator_buffers 1

#property indicator_color1 Red //----vyrovnávací paměti double ExtMapBuffer1[]; // Custom indicator inicializační funkce int init() { //----indikátory //---- SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); string short_name = "Your first indicator is running!"; IndicatorShortName(short_name); return(1); } // Custom indicator deinicializační funkce int deinit() { //---- //---- return(0); } // Custom indicator funkce opakování int start() {

int counted_bars=indicatorcounted(); //----kontrola možných chyb if (counted_bars<0) return(-1); //----naposled počítaná svíce bude opět přepočítána if (counted_bars>0) counted_bars--; int pos=bars-counted_bars; double dhigh, dlow, dresult; Comment("Hi! I'm here on the main chart windows!"); //----hlavní kalkulační smyčka //---- while(pos>=0) { } return(0); dhigh = High[pos]; dlow = Low[pos]; dresult = dhigh -dlow; ExtMapBuffer1[pos]= dresult ; pos--; } Jak to bude fungovat?

Zapíšeme řádek(ky) kódu, který si přejeme vyložit, ty budou vyloženy následovně, pokud se však nevyskytuje jiné téma, vysvětlíme řádky kódu přímo. Většinou se však budeme zastavovat, abychom si vysvětlovali některá obecná témata. Ohledně této metody bych rád slyšel vaše připomínky! Nyní si vysvětleme tento kód, řádek po řádku. // My_First_Indicator.mq4 // Codersguru // http://www.forex-tsd.com Komentáře: Prvních 5 řádků kódu (v šedé barvě) jsou komentáře. Komentáře používáte při zápisu řádků do vašeho kódu, které bude kompilátor ignorovat. Váš kód komentujete z mnoha důvodů: Pro objasnění K dokumentaci některých částí, jako např. copyrightu, vytvoření data apod. Aby byl srozumitelný. K vysvětlení, jak zapsaný kód pracuje. Komentáře můžete zapisovat dvěma způsoby: Jednořádkové komentáře: Jednořádkový komentář začíná s // a končí novým řádkem. Víceřádkové komentáře: Víceřádkové komentáře začínají s /* a končí s */ a můžete s nimi komentovat na více řádcích. Do programu MQL4 pomocník vygeneroval z dat, která jsme vložili, jméno programu, autora a odkaz a zapsal je jako komentáře do horní části programu. #property copyright "Codersguru" #property link "http://www.forex-tsd.com" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Red

Příkaz Property: Jak jste zaznamenali, všechny tyto řádky začínají slovem (#property). To proto, že jsou druhem Preprocesorových příkazů nazývaných property directives. Preprocesors jsou instrukce, které dáváte kompilátoru k provedení před spuštěním (zpracováním) vašeho kódu. Příkazy property jsou předdefinované konstanty zvané Controlling Compilation zabudované v jazyce MQL4; jejich úkolem je nastavení vlastností vašeho programu. Např.: Vyobrazí se váš indikátor v hlavním okně grafu nebo v okně zvláštním? Kdo je autorem programu? Poznámka:Řádky preprocesorů končí prováděcím znakem return (nový řádek), nikoliv středníkem. Zde se pokusíme prodiskutovat příkazy property, které jsou k dispozici v MQL4. link: Je odkaz na vaše webové stránky, o který jste si požádali v kroku 2 pomocníka Expert Advisoru (nahlédněte do předchozí lekce). Datový typ této vlastnosti je string. copyright: Je jméno autora programu, které jste si vyžádali rovněž v kroku 2 pomocníka Expert Advisoru. Datový typ této vlastnosti je string. stacksize: Je hodnota celého čísla nastavená v paměti pro každý proces, výchozí hodnota je 16384. Datový typ této vlastnosti je integer. indicator_chart_window: Když nastavíte tuto funkci, váš indikátor bude vykreslen v hlavním okně grafu (obr. 1). Můžete si vybrat jednu ze dvou možných voleb pro vyobrazení vašich indikátorů, a to buď v hlavním okně grafu použitím této funkce, nebo vykreslením ve zvláštním okně volbou funkce the indicator_separate_window. Nemůžete použít oba dva najednou. Datový typ této vlastnosti je void, což znamená, že nevrací žádnou hodnotu.

indicator_separate_window: Pokud použijete tuto volbu, indikátor bude vykreslen v odděleném okně (obr.1). Rozměr pro toto okno můžete nastavit pomocí dvou funkcí indicator_minimum pro minimální hodnotu a indicator_maximum pro maximální hodnotu velikosti. Úroveň vašich indikátorů můžete nastavit prostřednictvím funkce indicator_leveln, kde N je číslem indikátoru. Obě funkce indicator_chart_window a indicator_separate_window jsou typu void, což znamená, že nevracejí hodnotu a pouze je zapíšete. V našem programu vykreslíme indikátor ve zvláštním okně: #property indicator_separate_window Figure 1 indicator_minimum: Za pomocí této funkce nastavíme minimální hodnotu velikosti odděleného okna, která se nachází v jeho spodní části. Např.: #propery indicator_minimum 0 #propery indicator_maximum 100 Zde jsme nastavili spodní ohraničení okna na 0 a vrchní ohraničení na hodnotu 100 (viz. indicator_ maximum), pak jsme nastavili hodnoty v rozmezí 0 až 100 v našem odděleném okně, ve kterém vykreslujeme náš indikátor. Datový typ této funkce je integer. indicator_maximum: Za pomocí této funkce nastavujeme maximální hodnotu velikosti oddělených oken, tedy jejich vrchní

ohraničení. Tato hodnota musí být vyšší než hodnota indicator_minimum. Datový typ této funkce je integer. indicator_leveln: Za pomocí této funkce nastavíme úroveň rozměru indikátoru, kterou jsme vytvořili ve funkcích indicator_minimum a indicator_maximum, tato hodnota musí být vyšší než indicator_minimum a nižší než indicator_maximum. N je číslo indikátoru, pro který nastavíme úroveň, jeho rozsah musí být v rozmezí 1 až 8 (protože máme k dispozici pro indikátory pouze 8 vyrovnávacích pamětí v programu, takže můžeme nastavit indicator_level pro každý z nich použitím jeho čísla).

Např.: #propery indicator_minimum 0 #propery indicator_maximum 100 #propery indicator_level1 10 //nastavení úrovně první vyrovnávací paměti indikátoru #propery indicator_level2 65.5 //nastavení druhé vyrovnávací paměti indikátoru Datový typ této funkce je double. indicator_buffers: Za pomocí této funkce nastavujeme počet míst (polí) v paměti, alokovaných pro vytvoření našeho řádku(ů). Při určení tohoto čísla (v rozsahu od 1 do 8) sdělujeme MQL4: Prosím o alokování prostoru v paměti pro mě k vykreslení řádku indikátoru. V našem programu jsme použili pouze jednu paměť. #property indicator_buffers 1 To proto, že vykreslujeme pouze jeden řádek. indicator_colorn: V indikátoru můžeme použít až 8 řádků, můžete nastavit barvu každého z nich použitím funkce indicator_colorn, přičemž N je číslo řádku, které je definováno pamětmi indicator_buffers. Uživatel vašeho indikátoru může měnit barvu z dialogu properties vašeho indikátoru (obr. 2). V našem programu bude barva řádku indikátoru červená. #property indicator_color1 Red Datový typ této funkce je color.

Obr. 2 double ExtMapBuffer1[]; Pole: Stejné předměty obvykle seskupujeme do jednotek, stejně tak je tomu u programování, kdy také potřebujeme seskupit dohromady data stejného typu. Pro tento účel používáme funkci Array (pole). Pole jsou velmi podobná tabulkám seznamů. Do tabulek seskupujete položky a přiřazujete jim číslo řady. Řady v polích se nazývají indexy. Pro deklarování pole se používá takovýto kód: int my_array[50]; Zde jste deklarovali pole typu integer, které může obsahovat až 50 položek. Zpřístupnit každou položku v poli můžete použitím jejího indexu, jak je tomu zde: My_array[10] = 500; Zde jste vložili položku číslo 500 do pole 10. Pole můžete inicializovat ve stejném řádku, v jakém bylo provedeno deklarování: int my_array[5] = {1,24,15,66,500}; V našem programu použijeme tento řádek kódu: double ExtMapBuffer1[];

Zde jsme deklarovali pole typu double. Pole použijeme pro výpočet našich hodnot, které vykreslíme v grafu. int init() { } Zvláštní funkce: Funkce jsou bloky kódů, které, stejně jako stroje, přijímají vstupy a vrací výstupy (viz. lekce 7 Funkce). V MQL4 se vyskytují 3 zvláštní funkce init(): Každý program spustí tuto funkci před jakoukoliv další funkcí, do níž vkládáte inicializační hodnoty vašich proměnných. start(): Zde probíhá většina práce. Pokaždé, když je přijata do vašeho programu nová cenová nabídka, je vyvolána tato funkce. deinit(): Tato poslední funkce programu bude vyvolána před jeho uzavřením, můžete zde vložit přesuny, jaké si přejete. SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); string short_name = "váš indikátor běží!"; IndicatorShortName(short_name); Custom indicator - funkce:

Nemůžu vám v této lekci popsat funkce všech indikátorů. Podrobněji se jim však budeme věnovat v dalších lekcích. Zde si tedy nastudujeme funkce, týkající se našeho programu. SetIndexStyle: Tato funkce nastaví styl vykreslení čáry. Index parametr této funkce se pohybuje v rozsahu od 0 do 7 (to proto, že indexování pole začíná hodnotou 0 a je omezeno na 8 řádků). A indikuje, u kterého řádku si přejeme styl nastavit. Typ parametru je typ vzhledu řádku a může odpovídat jedné z následujících typových konstant: DRAW_LINE (vykreslení čáry) DRAW_SECTION (vykreslení sekce) DRAW_HISTOGRAM (vykreslení histogramu) DRAW_ARROW (vykreslení ukazatele) DRAW_NONE (žádné vykreslení) Parametr style je styl vykreslování řádku a může být jednou z těchto konstant: STYLE_SOLID (použití pevného pera) STYLE_DASH (použití přerušovaných čar) STYLE_DOT (tečkování) STYLE_DASHDOT (čárkování a tečkování) STYLE_DASHDOTDOT (čárkování a dvojité tečkování) Nebo může být EMPTY (výchozí), což znamená, že ve vykreslení nebude provedena žádná změna. Parametr width je šířkou řádku a jeho rozsah se pohybuje v rozsahu hodnot 1 až 5. Případně může být EMPTY (výchozí), takže se šířka nemění. Clr parametr je barva řádku. Může to být jakákoliv proměnná typu color. Výchozí hodnota je CLR_NONE, což znamená, že stav barev je prázdný.

V našem řádku kódu: SetIndexStyle(0,DRAW_LINE); Nastavili jsme index na 0, což znamená, že budeme pracovat s první čárou (která je zároveň jedinou). Typ vzhledu jsme nastavili jako DRAW_LINE, protože si přejeme vykreslit čáru v grafu. U ostatních parametrů jsme ponechali výchozí hodnoty. SetIndexBuffer: Tato funkce nastaví pole, kde přiřadíme hodnotu našeho indikátoru k vyrovnávací paměti indikátoru, která bude vykreslena. Funkce přebere index vyrovnávací paměti, kde 0 je první vyrovnávací pamětí, 1 je druhou atd. Pak si přebere jméno pole. Pokud funkce uspěje, vrací hodnotu true, jinak vrací hodnotu false. V našem programu je pole, které obsahuje vypočtené hodnoty, ExtMapBuffer1. A máme zde pouze jednu vyrovnávací paměť indikátoru (#property indicator_buffers 1), takže jí bude vyrovnávací paměť přiřazena. IndicatorShortName: Tato funkce určuje text, který bude vyobrazen v levém horním rohu okna grafu (obr.3). V našem programu jsme deklarovali proměnnou string a přiřadili k ní hodnotu Váš první indikátor běží, kterou jsme poté předali funkci IndicatorShortName. string short_name = "Váš první indikátor běží!"; IndicatorShortName(short_name);

Figure 3 return(0); Toto je vratná hodnota funkce init(), která funkci ruší a předává program k provedení další funkce start(). int deinit() { //---- //---- } return(0); K funkci deinit() není nic nového, co by se dalo říct. Se zbytkem kódů budeme pokračovat v další lekci. Doufám, že se vám lekce líbila a uvítám jakékoliv otázky a připomínky. S pozdravem Coders Guru 06-11-2005