Pátek 06. prosinec 2019 03:42
reklama
Globtrex
reklama
RoboMarkets AOS
reklama
RoboMarkets

MQL4 - Tipy a triky - MarketZones

Napsal:   Sekce: MQL4 - Tipy a triky

Dnes jsem si pro ty, co se zajímají o jazyk MQL4, připravil jednoduchý indikátor, který nemá za úkol analyzovat cenu, ale zobrazit obchodní hodiny jednotlivých marketů. Pro ty, co je programování spíše utrpením, nebudou ošiděni a mohou si na konci článku stáhnout již hotový indikátor.

Proč jsem pro zobrazení obchodních hodin vybral zrovna indikátor? MetaTrader zpracovává obchodní strategie, skripty a indikátory. Obchodní strategie je pro tento účel nevhodná, jelikož můžu do grafu vložit pouze jednu strategii a tím bych sebral prostor pro smysluplnou strategii. Skript se spouští jenom jednou, což by mému záměru nevyhovovalo. Chci si zobrazit obchodní hodiny jednotlivých marketů pro aktuální den, takže očekávám, že příští den se zobrazení překreslí, tak jak má, nechci se o to starat. Z toho vyplývá, že indikátor je nejvhodnější.

Postup

Otevřete si editor jazyka MQL a založte nový souboru typu Custom indikator. V dalším kroku si pojmenujte indikátor např. MarketZones. Vyplňte následující vstupní parametry (Název, Typ, Hodnota), (viz obr):

London_Show, bool, true
London_Color, color, Blue
London_Text, string, London


Nyní pokračujte v průvodci a v dalším kroku ponechte vše, tak jak je a dokončete průvodce.

Průvodce vygeneroval kód skriptu, kód jsem lehce upravil (viz kód).

Nyní si v kódu za vstupní parametry přidáme následujcí proměnnou, kterou použijeme pro pojmenování grafických objektů (viz kód):

//---- základní názvy objektů
string London_BaseName = "MZLondon";


Dále si vytvoříme pomocné metody, které nám vytvoří grafické objekty, které se budou zobrazovat na time-framech od M1 až po H1. Pro náš účel použijeme vertikální čáru pro zobrazení otevírací a zavírací doby, a text pro popis otevírací doby (viz kód):

// vytvoří vertikální linii
// name = název linie
// c = barva linie
void createVLine(string name, color c)
{
   // kontrola, zda objekt neexistuje
   if(ObjectFind(name) < 0)
   {
      // pokud se podařilo objekt vytvořit, můžeme nastavit vlastnosti
      if(ObjectCreate(name, OBJ_VLINE, 0, 0, 0))
      {
         ObjectSet(name, OBJPROP_COLOR, c);
         ObjectSet(name, OBJPROP_STYLE, STYLE_DOT);
         ObjectSet(name, OBJPROP_BACK, true);
         ObjectSet(name, OBJPROP_TIMEFRAMES,
 OBJ_PERIOD_M1|OBJ_PERIOD_M5|OBJ_PERIOD_M15|OBJ_PERIOD_M30|OBJ_PERIOD_H1);
      }
   }
}

// vytvoří textový objekt
// name = název textového objektu
// text = zobrazovaný text
// c = barva textu
void createText(string name, string text, color c)
{
   // kontrola, zda objekt neexistuje
   if(ObjectFind(name) < 0)
   {
      // pokud se podařilo objekt vytvořit, můžeme nastavit vlastnosti
      if(ObjectCreate(name, OBJ_TEXT, 0, 0, 0))
      {
         ObjectSetText(name, text, 8, "Arial", c);
         ObjectSet(name, OBJPROP_ANGLE, 90);
         ObjectSet(name, OBJPROP_TIMEFRAMES, 
OBJ_PERIOD_M1|OBJ_PERIOD_M5|OBJ_PERIOD_M15|OBJ_PERIOD_M30|OBJ_PERIOD_H1);
      }
   }
}


Když již máme napsané pomocné metody pro vytváření grafických objektů, můžeme si napsat metodu, která nám vytvoří komplet obchodních hodin daného marketu a rovnou si napíšeme ještě metodu, která po nás uklidí grafické objekty, pokud uživatel odebere tento indikátor ze svého grafu (viz kód):

// vytvoří MarketZone (MZ) linie
// baseName = základní název MZ
// c = barva MZ
// text = popisek MZ
void createMZ(string baseName, color c, string text)
{
   // název linie zobrazující otevření marketu
   string nameOpen = baseName + "Open";
   // název linie zobrazující zavření marketu
   string nameClose = baseName + "Close";
   // název textu zobrazující popis marketu
   string nameText = baseName + "Text";
   
   createVLine(nameOpen, c);
   createVLine(nameClose, c);
   createText(nameText, text, c);
}

// odstraní MarketZone linie
// baseName = základní název MZ
void deleteMZ(string baseName)
{
   ObjectDelete(baseName + "Open");
   ObjectDelete(baseName + "Close");
   ObjectDelete(baseName + "Text");
}

Nyní použijeme naše metody v kódu. Upravíme metody init() a deinit(). V metodě init() si vytvoříme MarketZone linii a v metodě deinit() provedeme smazání prvků (viz kód):


// inicializace
int init()
{
   // pokud se má zobrazit London, vytvoříme MZ
   if(London_Show)
   {
      createMZ(London_BaseName, London_Color, London_Text);
   }
   
   return(0);
}

// deinicializace
int deinit()
{
   // smazání MZ pro London
   deleteMZ(London_BaseName);
   
   return(0);
}


Teď jsme ve fázi, kdy náš skript (indikátor) je použitelný, ale pokud se změní den, nepřekreslí se obchodní hodiny na nový den, ale zůstanou tam, kde se vytvořili poprvé. Stejně tak popisek otevírací doby se nepřekreslí správně, pokud si v grafu začneme přepínat jednotlivé time-frames. K pokynu překreslení dojde, pokud se změní aktuální cena, na to mi můžeme reagovat. Proto si vytvoříme metody, které nám překreslí naše grafické prvky. Upravíme metodu start() a zareagujeme na změnu ceny a provedeme překreslení. Následující kód lze optimalizovat, aby nedocházelo k překreslování pokaždé, ale pouze, když potřebujeme. Přesto jej ponechám tak, jak je, kvůli jednoduchosti ukázky kódu. Vzhledem k malému počtu použitých grafických prvků, nám to nebude vadit (viz kód):

// překreslí vertikální linii
// name = název linie
// dt = datum umístění linie
void redrawVLine(string name, datetime dt)
{
   if(ObjectFind(name) > -1)
   {
      ObjectSet(name, OBJPROP_TIME1, dt);
   }
}

// překreslí textový objekt
// name = název textového objektu
// dt = datum umístění textového objektu
void redrawText(string name, datetime dt)
{
   if(ObjectFind(name) > -1)
   {
      ObjectSet(name, OBJPROP_TIME1, dt);
      ObjectSet(name, OBJPROP_PRICE1, (WindowPriceMax() - WindowPriceMin()) / 2 + WindowPriceMin());
   }
}

// překreslí MarketZone linii
// baseName = základní název MZ
// currentDate = řetězec aktuálního datumu (bez času)
// timeOpen = řetězec času otevření marketu
// timeClose = řetězec času zavření marketu
void redrawMZ(string baseName, string currentDate, string timeOpen, string timeClose)
{
   // název linie zobrazující otevření marketu
   string nameOpen = baseName + "Open";
   // název linie zobrazující zavření marketu
   string nameClose = baseName + "Close";
   // název textu zobrazující popis marketu
   string nameText = baseName + "Text";
   
   // vytvoření datumu pro otevírací a zavírací dobu
   datetime dtOpen = StrToTime(currentDate + " " + timeOpen);
   datetime dtClose = StrToTime(currentDate + " " + timeClose);
   
   redrawVLine(nameOpen, dtOpen);
   redrawVLine(nameClose, dtClose);
   redrawText(nameText, dtOpen);
   
   WindowRedraw();
}

// běh indikátoru
int start()
{
   string currentDate = TimeToStr(TimeCurrent(), TIME_DATE);
     
   // pokud se má vykreslit London, překreslíme MZ   
   if(London_Show)
   {
      redrawMZ(London_BaseName, currentDate, "09:00", "17:59");
   }      

   return(0);
}


Nyní, když zkompilujete bezchybný kód, můžete vyzkoušet indikátor v platformě. Měli byste vidět linie obchodních hodin londýnského marketu (viz obr); upozornění: na vyšších TF jak H1 se linie nezobrazují.

Samozřejmě, že se nabízí otázka, zda lze zobrazit obchodní hodiny jiného marketu? Ano, např. si přidáme MZ pro New York (viz obr). Stačí přidat nové vstupní parametry a proměnnou pro názvy grafických objektů:

extern bool      NewYork_Show = true;
extern color     NewYork_Color = Red;
extern string    NewYork_Text = "New York";

//---- základní názvy objektů
string NewYork_BaseName = "MZNewYork";


Upravíme metody init(), deinit() a start():

// inicializace
int init()
   // pokud se má zobrazit London, vytvoříme MZ
   if(London_Show)
   {
      createMZ(London_BaseName, London_Color, London_Text);
   }

   // pokud se má zobrazit New York, vytvoříme MZ  
   if(NewYork_Show)
   {
      createMZ(NewYork_BaseName, NewYork_Color, NewYork_Text);
   }
   
   return(0);
}

// deinicializace
int deinit()
{
   // smazání MZ pro London
   deleteMZ(London_BaseName);
   // smazání MZ pro New York
   deleteMZ(NewYork_BaseName);   
   
   return(0);
}

// běh indikátoru
int start()
{
   string currentDate = TimeToStr(TimeCurrent(), TIME_DATE);
     
   // pokud se má vykreslit London, překreslíme MZ  
   if(London_Show)
   {
      redrawMZ(London_BaseName, currentDate, "09:00", "17:59");
   }      
   
   // pokud se má vykreslit New York, překreslíme MZ
   if(NewYork_Show)
   {
      redrawMZ(NewYork_BaseName, currentDate, "14:00", "22:59");
   }

   return(0);
}


Pokud chcete vykreslit i jiné obchodní hodiny, tak to už zbývá na vás, jako samostatné cvičení. Postup je stejný jako u New Yorku.

Zde je kompletní kód ke stažení (obsahuje obchodní hodiny pro Londýn, New York, Sydney a Tokio).

Hodnocení článku:
Sdílení článku: 
   

Čtěte více

  • Môj výhľad na kryptomeny - trpezlivosť
    Bitcoin a kryptomeny.
  • Monetárna politika - Centrálni bankári ako bohovia trhu
    Či si to chceme priznať alebo nie centrálni bankári sú bohovia na finančnom trhu. Nie v tom zmysle, že by mohli všetko, ale ich rozhodnutia majú široké následky naprieč celým finančným sektorom. Nechcem hovoriť o tom či je to správne, že majú takú moc... Nechcem hovoriť ani o tom, že či je správne, že títo bohovia sú „nevolení“ ale iba „dosadení“... A nebudem ani rozoberať otázku, kto vlastne kontroluje tých, čo kontrolujú... Zaujíma ma to, čo je dôležité pre obchodníka. A to je silný dopad ich rozhodnutí na trh.
  • Money management - Na co by neměl žádný trader zapomenout
    Nedříve je důležité říci, co je to vlastně money management. Mnoho, nejen začínajících, traderů má spojen termín money management pouze s nastavováním SL a TP, to však není zdaleka úplně pravda.
  • Money-management pod novými pravidlami ESMA
    V posledných týždňoch sa čoraz viac stretávame s veľkými obavami, ktoré spôsobujú nové pravidlá obchodovania s derivátmi od európskeho regulátora ESMA. Najväčším strašiakom je pre väčšinu obchodníkov zníženie finančných pák, ktoré od 1.8.2018 nadobudnú nasledujúce hodnoty:
  • Money Management %R
    Zarobil som na danom obchode? OK. Prerobil som? Tiež OK!
  • Motivace nejen v tradingu
    Předpokládám, že všichni pravidelní návštěvníci, kteří vidí u článku moje jméno, respektive moji přezdívku, tak už dopředu tuší, že nepůjde o nějakou ohromující analýzu plnou tutovek, ale bude se jednat spíše o filozofickou úvahu nebo zamyšlení.
  • Možná i největší býci už vyhlížejí akciový pullback
    Zelená svíčka, jak jinak. Tentokrát americký akciový index S&P 500 posílil za týden o 2,23 % a od začátku roku již přidal přes 7 %.
  • Možná intervence na EURCHF
    Intervence SNB na páru EURCHF. Páteční výrazný pohyb.
  • Možný vývoj na akcivém indexu US30 - DJIA.
    Včera jsem se ve svém článku stručně zabýval úvahou o aktuální situaci v dolarovém indexu DXM10 kde jsem se velmi stručně zmínil i o akciových indexech. Dnes bych chtěl na tento článek navázat a věnovat se situaci v akciovém indexu US30 - DJIA. Jeho vliv na měnové páry a hlavně na JPY v posledních týdnech nabývá na síle.
  • Môžu niečo zmeniť americké dáta z trhu práce?
    Tak ako sa posledné týždne/mesiace približujeme k decembru (prosinci), pravdepodobnosť, že FED ešte raz zvýši sadzby tento rok, tak ako to anticipoval v poslednom Dot Plote, klesá stále viac a viac. Investori pokračujú vo výpredajoch USD z už chronicky známych ekonomických a politických dôvodov. To čo však môže rozhodnúť o ďalšom pohybe na USD je rast miezd v kontexte ostatných dát z trhu práce, ktoré budú dnes zverejnené.
  • MQL4 - Tipy a triky - Screenshot
    V tomto článku se podíváme, jak si vytvořit vlastní skript pro vytvoření screenshotu grafu.
  • MSJ 12.9.2011
    Market Structure Journal pro pondělí 12.9.2011, jak jsem si jej poznamenal...
  • MSJ 14.9.2011
    Market Structure Journal pro středu 14.9.2011, jak jsem si jej poznamenal...
  • MSJ 15.9.2011
    Market Structure Journal pro středu 15.9.2011, jak jsem si jej poznamenal...
  • MSJ 8.9.2011
    Toto je jeden ze záznamů mé knihy: Market Structure Journal.
  • MSJ 9.9.2011
    Market Structure Journal pro pátek 9.9.2011, jak jsem si jej poznamenal
  • MT4 - obchodování přímo z grafu
    Existují dvě skupiny lidí. Ti, kteří si na okno pokyn v MT4 již zvykli. A ti, kteří okno pokyn mají v takové neoblibě, že se vydali hledat jiné, lepší cesty k rychlejšímu a efektivnějšímu zadávání a modifikování pokynů a pozic.
  • MT4 Panel - nový dobrý sluha do platformy MT4
    Ve spolupráci s dalšími tradery byl vyvinut tento nový Panel do platformy MT4, který obsahuje velké množství užitečných funkcionalit, z kterých si každý Trader múže vybrat jen ty, které pro svůj osobní trading denně potřebuje.
  • „Můj“ eurodolar v uplynulém týdnu
    Minulý týden začal na měnovém páru EUR/USD velice klidně. Možná více, než by se nám mohlo líbit. Podle oscilátoru ATR, nastaveného na týdenní hodnotu, to až do čtvrtku vypadalo, že to bude nejméně volatilní týden za posledních několik let. Po větších pohybech na konci předcházejícího týdne, které zapříčinily zprávy a výsledky především z USA se trh rozmýšlel, jak s cenou naložit dál. Nenahrála mu ani skutečnost, že první polovina týdne byla bez jakýchkoliv zásadnějších dat a zpráv a současně se globálně neodehrálo nic tak významného, co by mohlo cenu ovlivnit.
  • Můj obchodní plán na další obchody
    Volatilní období na finančních trzích pokračuje, v týdnu byl k vidění výrazný růst amerického dolaru, silný pokles kanadského dolaru po sérii horších dat, propad eurodolaru na několikaměsíční minima, možný obrat na amerických indexech (horší globální makrodata a k tomu technika - pěkný kulatý vrchol) či dnešní větší pokles cen ropy (aktuálně již cena lehce koriguje nahoru).
  •  


    Diskuse ke článku

    Diskuse je přístupná pouze pro registrované uživatele.
    Přihlásit se | Nová registrace
Forex - doporučené články:

Co je FOREX?
Základní informace o finančním trhu FOREX. Forex je obchodování s cizími měnami (forex trading) a je zároveň největším a také nejlikvidnějším finančním trhem na světě.
Forex pro začátečníky
Forex je celosvětová burzovní síť, v jejímž rámci se obchoduje se všemi světovými měnami, včetně české koruny. Na forexu obchodují banky, fondy, pojišťovny, brokeři a podobné instituce, ale také jednotlivci, je otevřený všem.
1. část - Co to vlastně forex je?
FOREX = International Interbank FOReign EXchange. Mezinárodní devizový trh - jednoduše obchodování s cizími měnami - obchodování se směnnými kurzy.
VIP zóna - Forex Asistent
Nabízíme vám jedinečnou příležitost stát se součástí týmu elitních obchodníků FXstreet.cz. Ve spolupráci s předními úspěšnými obchodníky jsme pro vás připravili unikátní VIP skupinu, až doposud využívanou pouze několika profesionálními tradery, a k tomu i exkluzivní Price Action VIP indikátor, doposud úspěšně používaný pouze k soukromým účelům. Nyní se vám otevírá možnost stát se součástí této VIP skupiny, díky které získáte jedinečné know-how pro obchodování na forexu, výjimečný Price Action VIP indikátor, a tím také náskok před drtivou většinou ostatních účastníků trhu.
Forex brokeři - jak správně vybrat
V podstatě každého, kdo by chtěl obchodovat forex, čeká jednou rozhodování o tom, s jakým brokerem (přeloženo jako makléř/broker nebo zprostředkovatel) by chtěl mít co do činění a svěřil mu své finance určené k obchodování. Velmi rád bych vám přiblížil problematiku výběru brokera, rozdíl mezi jednotlivými typy brokerů a v neposlední řadě uvedu několik příkladů nejznámějších z nich.
Forex robot (AOS): Automatický obchodní systém
Snem některých obchodníků je obchodovat bez nutnosti jakéhokoliv zásahu do obchodu. Je to pouhá fikce nebo reálná záležitost? Kolik z nás věří, že "roboti" mohou profitabilně obchodovat? Na jakých principech fungují?
Forex volatilita
Forex volatilita, co je volatilita? Velmi užitečným nástrojem je ukazatel volatility na forexu. Grafy v této sekci ukazují volatilitu vybraného měnových párů v průběhu aktuální obchodní seance.
Forex zůstává největším trhem na světě
V dnešním článku se podíváme na nejnovější statistiky globálního obchodování na forexu. Banka pro mezinárodní vyrovnání plateb (BIS) totiž před pár týdny zveřejnila svůj pravidelný tříletý přehled, ve kterém detailně analyzuje vývoj na měnovém trhu. BIS je označována jako "centrální banka centrálních bank". Je nejstarší mezinárodní finanční organizací a hraje klíčovou roli při spolupráci centrálních bank a dalších institucí z finančního sektoru. Dnešní vzdělávací článek sice nebude zcela zaměřen na praktické informace z pohledu běžného tradera, ale i přesto přinese zajímavé a důležité poznatky.

Nejnovější články:


Naposledy čtené:

reklama
XTB ebook