Tvorba systémů pro FOREX (díl 10.)

Dobrý obchodní systém, money management a psychologie jsou 3 věci nutné pro úspěšný trading na FOREXu.

Obchodní systém – je soubor pravidel na základě kterých obchodujete. Tento soubor pravidel zpravidla definuje: instrument (měnový pár), který budete obchodovat, timeframe na kterém budete obchodovat, definuje vstupní signál (např. splnění podmínek vybraných indikátorů, cenový pattern apod.), definuje také výstupní signály tzn. stanovuje SL a PT a případně jejich úpravy v závislosti na vývoji trhu atd.

Obchodní systémy můžeme dělit na tzv. diskreční a mechanické.

Diskreční obchodní systémy – jsou postaveny na „ručním“ obchodování. Trader monitoruje a analyzuje trh a na základě předem definovaných pravidel vstupuje do trhu. Neznamená to, že trader obchoduje „živelně“, i zde musí trader dodržovat pravidla svého obchodního systému. Oproti mechanickému systému však častěji přizpůsobuje SL či PT, více filtruje obchody apod. Diskreční obchodování je časově a psychicky náročnější.

Mechanické obchodní systémy – jsou postaveny na striktních pravidlech a často jsou programovány tak, že sami generují signály, které pak trader buď obchoduje ručně, nebo dokonce nechá program/software provádět i exekuci obchodů (obchoduje se plně automaticky). Největší výhodou je snížení vlivu psychologie.

Převážná většina traderů dnes obchoduje mechanické/automatické obchodní systémy. Mezi malými tradery je asi nejoblíbenější jazyk MQL4. Je zadarmo a bezproblémů přístupný všem. Jeho nevýhodou je větší složitost.

 

Ukažme si, jak vypadá jednoduchý obchodní systém a jak je možné ho vytvořit.

UPOZORNĚNÍ: Dále prezentovaný systém je pouze ukázkou, jak vytvářet obchodní systém. Nejedná se o důsledně otestovaný systém se zaručenou dlouhodobou ziskovostí.

Základní myšlenka: Podívejte se na následující graf.

Jedná se o denní graf EURUSD. Může se nám zdát, že dost často po proražení High či Low předchozí svíčky následuje velký pohyb, který by mohl přinést zajímavý zisk (červené šipky). Samozřejmě občas je proražení malé a trh se vrací zpět (modré šipky). Můžeme se tedy pokusit postavit obchod tak, že budeme vstupovat při proražení High či Low předchozí svíčky s malým SL a velkým PT. V případě, že se trh utrhne, vezmeme velký zisk, pokud je proražení malé a trh se vrátí zpět, nebude naše ztráta veliká, neboť máme malý SL.

Pravidla obchodního systému bychom si vždy měli zaznamenat písemně. Zkusme se podívat na to, jak by mohl jednoduchý zápis pravidel obchodní systému vypadat:

Název: DAILY EXTREME BREAKOUT

Instrument: EURUSD

Timeframe: 1D graf

Vstupy:

LONG: proražení včerejšího High o 2 pipy

SHORT: proražení včerejšího Low o 2 pipy

Výstupy:

Ziskové obchody: pevný profit target (PT = 150 pipů)

Ztrátové obchody: pevný stoploss (SL = 20 pipů)

Další pravidla:

1) v neděli neobchodujeme.

2) pokud je pondělní open vně range páteční svíčky, nebo je jakákoliv cena v průběhu neděle vně range páteční svíčky => v pondělí neobchodujeme (k proražení již došlo …)

3) obchodujeme jen první proražení. Pokud se trh po proražení vrátí a prorazí podruhé, již neobchodujeme

 

Takto by mohl vypadat zápis pravidel systému. Je to velice jednoduchý systém a nebude proto složité si ho naprogramovat. Nicméně to chce již trochu zkušeností (více o programování v MQL4 se dozvíte v seriálu o programování). Níže získáte zápis strategie, stačí ho zkopírovat do MT4 a můžete strategii zkusit otestovat.

//+---------------------------------------------------------------------+
//| Daily extreme breakout_XTB.mq4                                      |
//| Copyright (c) 2010                                                  |
//| verze: pro XTB Platform (s nedelni 1D svickou)                      |
//| --------------------------------------------------------------------|
//| nazev strategie: Daily extreme breakout                             |
//| princip: prorazeni high ci low predchozi denni svicky o x pipu      |
//| frame: 1D                                                           |
//| trh: majors                                                         |
//| posledni revize: 23.4.2010                                          |
//+---------------------------------------------------------------------+
#property copyright "Copyright (c) 2010, Forex pro zacatecniky"
//+---------------------------------------------------------------------+
//| externi vstupni parametry strategie                                 |
//+---------------------------------------------------------------------+
extern double StopLoss_v_bodech = 20;              // definice Stop lossu
extern double Profit_Target_v_bodech = 150;        // definice Profit targetu
extern double Pocatecni_objem_v_lotech = 0.1;      // definice objemu
extern double Velikost_prorazeni_v_bodech = 2;     // definice velikosti prorazeni extremu High ci Low
extern double Posun_na_BE = 50; 
extern string Ma_se_pricist_spread_u_longu = "Ano";// definuje, zda pricist spread u longu (Ano/Ne) 
//+---------------------------------------------------------------------+
//| expert initialization function                                      |
//+---------------------------------------------------------------------+
int init()
   {return(0);}
//+---------------------------------------------------------------------+
//| expert deinitialization function                                    |
//+---------------------------------------------------------------------+
int deinit()
   {return(0);}
//+---------------------------------------------------------------------+
//| expert start function                                               |
//+---------------------------------------------------------------------+
int start()
//+---------------------------------------------------------------------+
//| definice promennych                                                 |
//+---------------------------------------------------------------------+ 
{ int ticket, q=0, err;                                      
  int D=DayOfWeek();                               // zjisti den v tydnu (nedele=0 a� patek=5)
  double H = iHigh(NULL,PERIOD_D1,1);              // zjisti hodnotu vcerejsiho High
  double L = iLow(NULL,PERIOD_D1,1);               // zjisti hodnotu vcerejsiho Low
  double HN = iHigh(NULL,PERIOD_D1,2);             // zjisti hodnotu vcerejsiho High (pro pondelni obchod)
  double LN = iLow(NULL,PERIOD_D1,2);              // zjisti hodnotu vcerejsiho Low (pro pondelni obchod)  
  double O = iOpen(NULL,PERIOD_D1,0);              // zjisti hodnotu dnesniho Open
  double ON = iOpen(NULL,PERIOD_D1,1);             // zjisti hodnotu vcerejsiho Open (pro pondelni obchod)
  double SL = StopLoss_v_bodech*Point;             // prevod StopLossu v bodech na cenove vyjadreni 
  double PT = Profit_Target_v_bodech*Point;        // prevod Profit Targetu v bodech na cenove vyjadreni
  double Pr = Velikost_prorazeni_v_bodech *Point;  // prevod velikosti prorazeni v bodech na cenove vyjadreni
  double Spread=MarketInfo(Symbol(),MODE_SPREAD)*Point/2; //zjisti hodnotu spreadu 
  if (Ma_se_pricist_spread_u_longu!="Ano"){Spread=0;}
  double Objem = Pocatecni_objem_v_lotech, pozice, modify, BE=Posun_na_BE*Point;          
  int m = TimeMinute(TimeCurrent());               // vrati aktualni minutu
  int h = TimeHour(TimeCurrent());                 // vrati aktualni hodinu
  int Magic_number = 1001;                         // identifikacni cislo strategie
  string Text = Magic_number+"_DEB_"+Symbol()+"_XTB";
//+---------------------------------------------------------------------+
//| posun na BE                                                         |
//+---------------------------------------------------------------------+  
for (pozice=0;pozice<orderstotal();pozice++) bid="">= OrderOpenPrice()+BE)
    {modify=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+Spread,OrderTakeProfit(),0,Blue);
    if(modify==false){err=GetLastError(); Print("Modify error(",err,")_"+Text);}}
  if(OrderSelect(pozice, SELECT_BY_POS, MODE_TRADES)==true && OrderType()==OP_SELL && OrderMagicNumber()==Magic_number && Ask <= OrderOpenPrice()-BE)
    {modify=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-Spread,OrderTakeProfit(),0,Red);
    if(modify==false){err=GetLastError(); Print("Modify error(",err,")_"+Text);}}}
//+---------------------------------------------------------------------+
//| omezovac poctu vstupu                                               |
//+---------------------------------------------------------------------+ 
for(q=0;q<orderstotal();q++) buy="" hn="" if="" vstup="">O && LNON && LNH && LNH && LN<l) buy="" if="" vstup="" h="" az="" send="" ticket="OrderSend(Symbol(),OP_BUYSTOP,Objem,HN+Spread+Pr,0,HN+Spread+Pr-SL,HN+Spread+Pr+PT,Text," utery="">O && L1 && m<=5 && h==0)     
   {ticket=OrderSend(Symbol(),OP_BUYSTOP,Objem,H+Spread+Pr,0,H+Spread+Pr-SL,H+Spread+Pr+PT,Text,
    Magic_number,iTime(Symbol(),PERIOD_D1,0)+86400,Blue);
    if (ticket==-1){err=GetLastError();Print("Send error(",err,")_"+Text);}}   
//+---------------------------------------------------------------------+
//| vstup SELL (pondeli)                                                |
//+---------------------------------------------------------------------+ 
if (HN>O && LNON && LNH && LNH && LN<l) if="" vstup="" h="" az="" ticket="OrderSend(Symbol(),OP_SELLSTOP,Objem,LN-Pr,0,LN-Pr+SL,LN-Pr-PT,Text," utery="" sell="">O && L1 && m<=5 && h==0)  
   {ticket=OrderSend(Symbol(),OP_SELLSTOP,Objem,L-Pr,0,L-Pr+SL,L-Pr-PT,Text,
    Magic_number,iTime(Symbol(),PERIOD_D1,0)+86400,Red);
    if (ticket==-1){err=GetLastError();Print("Send error(",err,")_"+Text);}}   
return (0);}
//+---------------------------------------------------------------------+
//| konec                                                               |
//+---------------------------------------------------------------------+ 

Zkusíme tedy otestovat při SL 20 pipů a PT 150 pipů. Platné proražení je v případě, že High či Low je proraženo o více než 2 pipy. DO kódy jsem ještě zaimplementoval break-even na úrovni 50 pipů (jinak řečeno, pokud trh jde naším směrem a dosáhne již zisku 50 pipů, nechceme již přijít do ztráty -20 pipů a pokud se trh začne vyvíjet proti nám vystoupíme na vstupní ceně – tedy s nulovým ziskem)

Nastavení pro test je následující:

Při testu od 1.1.2010 do dneška vypadá výsledek následovně:

To nevypadá špatně! Myslíte, že tuto strategii můžeme začít obchodovat? Rozhodně ještě ne. Strategii je potřeba řádně otestovat a zanalyzovat, ale o tom si povíme až příště. V příštím díle seriálu se podíváme na testování v MT4 a jeho vyhodnocení.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *