Pondělí 21. říjen 2019 12:22
reklama
3cAnalysis
reklama
Purple trading VIP
reklama
Bernstein Bank - roadshow

Jak si usnadnit ruční backtest v MT4

Napsal:   Sekce: Backtesting

Dlouho jsem přemýšlel jaké bych si mohl zvolit téma pro můj druhý blog. Nyní se zrovna chystám na nějaké backtesty a tak jsem se rozhodl to skloubit dohromady. A aby toho nebylo málo, tak ten blog bude ještě o tom, jak si backtestovací EA naprogramuji. Co součástí blogu naopak nebude, tak žádná konkrétní strategie.

Na platformě MT4 se mi líbí, že se dá spustit backtest a zároveň můžu sledovat online, jak AOS otevírá jednotlivé pozice. A přesně toto se dá využít i při ručním backtestování. Jen to chce v testeru spustit EA, kterému za běhu sdělím, kdy a jak má otevřít obchod. Zkoušel jsem vykreslit tlačítka do grafu, která by měla tuto funkci, ale během backtestu nefunguje volání metody OnChartEvent. Touto cestou to tedy nevede. Další varianta je vykreslit horizontální linku do grafu, kterou si pak EA už přebere. Výhodou tohoto backtestu bude, že výsledek bude obsahovat všechny ty vychytávky, co backtester v MT4 dělá. Kdo by hledal na internetu, tak jistě takovýto obdobný nástroj najde. Ale kdybych si ho nenapsal sám, tak tady nebudu mít o čem psát Smile.

Tak tedy, než se pustím do samotného backtestování, tak si budu muset naprogramovat onen vytoužený nástroj, který mi backtesty usnadní. Pravděpodobně tento nástroj sám užívat stejně nebudu, protože budu backtesty dělat v cTraderu, ale třeba to někomu tady pomůže.

Jak jsem již psal, EA se bude ovládat pomocí horizontálních linek, které pojmenuju podle toho, co od ní čekám. Pro jednoduchost budu mít otevřený vždy jen jeden pokyn. Ovládání tak bude mnohem jednodušší, než kdybych otevíral více obchodů současně. Otevřít půjdou, ale abych jim nastavil SL a TP, jak bych se musel nějak třídit. A taky by se to špatně ovládalo.

Co do ovládání, tak moje představa je taková, že vložím horizontální linku do grafu. Zobrazím si vlastnosti linky a přejmenuju její název na nějaké klíčové slovo, na které bude EA reagovat a následně linku z grafu vymaže. Klíčová slova si definuji takto:

buy – nákup za market

sell – prodej za market

pbuy – (pendidng buy) čekající pokyn pro nákup (EA si vybere sám, jestli to bude STOP, nebo LIMIT)

psell – (pending sell) čekající pokyn pro prodej (EA si vybere sám, jestli to bude STOP, nebo LIMIT)

tp – na této ceně se nastaví TP

sl – na této ceně se nastaví SL

Vytvořím si tedy v MetaEditoru EA, které příhodně pojmenuji Backtester J. Při otevření pokynu potřebuji zadat velikost pozice – vytvořím si proto globální externí proměnnou s výchozí hodnotou třeba 0.01 lotu:

extern double TradeVolume = 0.01;

Nyní se můžeme vrhnout na metodu OnTick, která se volá – dle svého názvu – při každém novém ticku. Můžu použít detekci horizontální linky pomocí ObjectFind, nebo můžu použít smyčku, kde v každém ticku projdu všechny objekty a ověřím jejich název. Zvolím si tu druhou (složitější) variantu, protože pokud se rozhodu dále EA rozšiřovat pro práci s více obchody, musel bych to předělávat. Nyní si tedy snadním následnou možnou rozšiřitelnost. Začnu tedy smyčkou, která bud detekovat linky s názvem buy, sell, pbuy a psell a následně na ně reagovat.

for( int oindex = 0; oindex <= ObjectsTotal(); oindex++ )

{

string oname = ObjectName( oindex );

if( ObjectType( oname ) != OBJ_HLINE )

continue;

if( oname == "buy" )

{

if( OrderSend( Symbol(), OP_BUY, TradeVolume, Ask, 0, 0, 0 ) == -1 )

Alert( "Nepodařilo se zadat příkaz. Error: " + IntegerToString( GetLastError() ) );

ObjectDelete( oname );

}

if( oname == "sell" )

{

if( OrderSend( Symbol(), OP_SELL, TradeVolume, Bid, 0, 0, 0 ) == -1 )

Alert( "Nepodařilo se zadat příkaz. Error: " + IntegerToString( GetLastError() ) );

ObjectDelete( oname );

}

if( oname == "pbuy" )

{

double price = NormalizeDouble( ObjectGet( oname, OBJPROP_PRICE1 ), Digits() );

if( price > Ask )

{

if( OrderSend( Symbol(), OP_BUYSTOP, TradeVolume, price, 0, 0, 0 ) == -1 )

Alert( "Nepodařilo se zadat příkaz. Error: " + IntegerToString( GetLastError() ) );

}

else

{

if( OrderSend( Symbol(), OP_BUYLIMIT, TradeVolume, price, 0, 0, 0 ) == -1 )

Alert( "Nepodařilo se zadat příkaz. Error: " + IntegerToString( GetLastError() ) );

}

ObjectDelete( oname );

}

if( oname == "psell" )

{

double price = NormalizeDouble( ObjectGet( oname, OBJPROP_PRICE1 ), Digits() );

if( price < Bid )

{

if( OrderSend( Symbol(), OP_SELLSTOP, TradeVolume, NormalizeDouble( ObjectGet( oname, OBJPROP_PRICE1 ), Digits() ), 0, 0, 0 ) == -1 )

Alert( "Nepodařilo se zadat příkaz. Error: " + IntegerToString( GetLastError() ) );

}

else

{

if( OrderSend( Symbol(), OP_SELLLIMIT, TradeVolume, NormalizeDouble( ObjectGet( oname, OBJPROP_PRICE1 ), Digits() ), 0, 0, 0 ) == -1 )

Alert( "Nepodařilo se zadat příkaz. Error: " + IntegerToString( GetLastError() ) );

}

ObjectDelete( oname );

}

}

 

Dále potřebuji zjistit, jestli již je zadaný nějaký příkaz. Pokud ano, tak musím zjistit jeho ticket. Až budu vědět, že je otevřený obchod a budu znát jeho ticket, tak můžu ověřit jestli existuje linka, která nastaví jeho TP, nebo SL. Pro zjištění existence obchodu a jeho ticketu použiji metodu GetTicket(), kterou si vytvořím nakonec. Tato metoda mi po zavolání vrátí číslo ticketu otevřené pozice (int).

int ticket = GetTicket();

if( !OrderSelect( ticket, SELECT_BY_TICKET ) )

return;

if( ticket > 0 )

{

for( int oindex = 0; oindex <= ObjectsTotal(); oindex++ )

{

string oname = ObjectName( oindex );

if(ObjectType( oname ) != OBJ_HLINE )

continue;

if( oname == "tp" )

{

if( !OrderModify( OrderTicket(), OrderOpenPrice(), OrderStopLoss(), NormalizeDouble( ObjectGet( oname, OBJPROP_PRICE1 ), Digits() ), OrderExpiration() ) )

Alert( "Nepodařilo se upravit. Error: " + IntegerToString( GetLastError() ) );

ObjectDelete( oname );

}

if( oname == "sl" )

{

if( !OrderModify( OrderTicket(), OrderOpenPrice(), NormalizeDouble( ObjectGet( oname, OBJPROP_PRICE1 ), Digits() ), OrderTakeProfit(), OrderExpiration() ) )

Alert( "Nepodařilo se upravit. Error: " + IntegerToString( GetLastError() ) );

ObjectDelete( oname );

}

}

}

Tímto bych metodu OnTick() ukončil. Nakonec ještě musím doprogramovat GetTicket(), která mi vrátí číslo ticketu a zapíše do té proměnné ticket. Mám na to svou oblíbenou smyčku, kterou vždy jen dle potřeby trochu upravím. Například aby mi hledala pouze BUY a SELL obchody a nehledala čekačky atd… Základem je podmínka, která filtruje symbol. Zde – u EA které poběží jen v backtestech to není nutné, ale pokud bych tuto smyčku použil u AOSu, tak je nutné filtrovat, aby ignoroval obchody na ostatních instrumentech, než na kterém běží AOS. Další věc, kterou je dobré u AOSů filtrovat (v této smyčce ale není) je magic number. Hodí se to například, pokud mi na instrumentu EURUSD pojedou 2 AOSy, tak aby si rozpoznaly svoje obchody. Takže metoda GetTicket() bude vypadat nějak takto:

int GetTicket()

{

for( int pos = 0; pos < OrdersTotal(); pos++ )

{

if( OrderSelect( pos, SELECT_BY_POS ) == false )

continue;

if( Symbol() != OrderSymbol() )

continue;

return( OrderTicket() );

}

return(0);

}

Tak a teď kompilovat a máme hotovo! Hurá do backtestu!

Pokud budu již mít zadaný pokyn a u něj nastavený SL a budu jej chtít třeba jen posunout, tak prostě vložím novou linku, kterou pojmenuju „sl“ a pozice se upraví.

Celý soubor je ke stažení zde.

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

Čtěte více

  • Jak se přizpůsobit volatilitě?
    Nejspíš jste se jako forexový obchodník již setkali se stovkami či tisíci různými obchodními systémy, strategiemi, všemožnými obchodními přístupy a technikami. Forexoví tradeři často zkouší do trhu vstupovat a následně z něj vystupovat bez detailního ověření, že jejich strategie ve zvoleném trhu skutečně funguje. Hlavně pak za současné volatility a struktury celého trhu.
  • Jak se společnost XTB staví k nové regulaci finančních trhů ESMA?
    Necelé dva měsíce zbývají do implementace většiny pravidel nové celoevropské regulace CFD kontraktů. V Česku je ale zatím ticho po pěšině, jakoby nervozita některých hráčů dokázala přehlušit blížící se realitu. Protože se jedná o jedno z nejzásadnějších omezení finančních trhů, které kdy bylo v Evropě schváleno, tak bychom rádi na toto téma rozproudili diskuzi.
  • Jak se stát obchodníkem by REDY
    Jak sem se dostal k obchodováni,co od toho čekám a co pro to dělám.
  • Jak se stát profesionálním obchodníkem, na kterého regulace ESMA nedosáhne?
    Už v létě začne naplno platit nová regulace finančních trhů ESMA, která výrazně omezuje finanční páku, snižuje maximální přípustné ztráty a například také nařizuje ochranu proti negativnímu zůstatku na obchodním účtu (u XTB dávno splněno).
  • Jak se stát (výdělečným) traderem..??
    Článek ,,jak se stát traderem" je sice poučný a jistě je v něm spousta pravdy ne-li všechno,ale já zamířím kousek do reality.
  • Jak sestavit obchodní strategii
    Obchodování na forexovém trhu je náročnou disciplínou, která se neobejde bez precizní přípravy. Před samotným vstupem na trh musíte věnovat dostatečné množství času přípravám a v předem stanovených časových intervalech pak periodicky provádět vyhodnocení úspěšnosti obchodování.
  • Jak se vyprofiloval instrument USD/JPY a false-break na kávě
    Velcí hráči za sebou zanechávají čitelné stopy a dnes je řada způsobů, jak je v trhu vyčíst. Jedním z nich je metoda Market Profile a profilace trhu.
  • Jak se zbavit střetu zájmů se svým brokerem?
    Více než 95 % intradenních traderů prodělává. Být jejich protistranou musí být extrémně vydělečný byznys. Traderská logika vám zajisté napoví, že protistrana vašich obchodů nechce prodělávat. Jak nastavit vztah mezi vámi a vašim brokerem, aby se odstranil tento střet zájmů?
  • Jak se změní hlasovací struktura Fedu v roce 2017?
    Hlasující bankovní rada americké centrální banky (FOMC) se skládá z 12 členů.
  • Jak se zorientovat v německých volbách?
    Již 24. září se vydají němečtí voliči k volebním urnám. Budou se rozhodovat, zda zvolí do čela státu po čtvrté v řadě stávající kancléřku Angelu Merkelovou a umožní jí jít ve stopách svých předchůdců Helmuta Kohla a Konráda Adenauera, z nichž každý sloužil jako kancléř pět volebních období. Alternativu ztělesňuje opoziční kandidát Martin Schulz, vůdce Sociálnědemokratické strany a bývalý prezident Evropského parlamentu.
  • Jak si vedou čeští investoři v soutěži a které instrumenty obchodují?
    Účastníci investiční soutěže společnosti BOSSA prokázali, že nejsou žádnými začátečníky. Potvrdili, že sledují světové dění, jemuž přizpůsobují i své obchodní strategie. Důkazem je týdenní pořadí, v němž se na prvních dvou místech umístili soutěžící, jež minulý týden obchodovali ropu. Cena ropy je již půl roku pod prodejním tlakem. Ten se minulý týden zintenzivnil díky zasedání zemí OPEC. Ty ve čtvrtek jednaly, zdali sníží denní produkci vzhledem k převisu nabídky nad poptávkou. Verdikt přišel po čtvrté hodině odpoledne, kdy jako první promluvil saudský ministr. Poté co potvrdil zachování denního limitu produkce komodity, cena se rychle propadla ze 70 na 64 dolarů.
  • Jak správně začít obchodní den s tabulkou pro identifikaci trhů od Kathy Lien
    Denní příprava na obchodování dle Kathy Lien, vytváření kontrolního seznamu měnových párů, tabulka pro identifikaci trendujícího trhu/trhu pohybujícího se v pásmu, odvození strategií pro daný den.
  • Jak Švýcarsko změnilo forex - půl roku poté
    V současné době je neustále středem pozornosti nejen pro forexové obchodníky jednání týkající se problematického Řecka. Nicméně stále zůstává nejvlivnější událost roku pro forexové obchodníky situace kolem Švýcarské národní banky, která před půl rokem, konkrétně dne 15.1.2015, bez předchozího oznámení přestala intervenovat proti švýcarskému franku a pustila tak fixaci kurzu na měnovém páru EUR/CHF na 1,2000.
  • Jak to vidím na konci třetího obchodního dne: EUR/USD, CAD/CHF
    V dnešním blogu se zaměřím na měnové páry, které ještě tento týden mohou nabídnout obchodní příležitost vycházející z D1 časového rámce. Překvapil mě eurodolar, který v pátek nastavil maximum 1.13475 a tento týden býci nebyli schopni tuto cenu překonat a dojet k předpokládanému cíli. Patří sem i kanadský dolar v páru se švýcarským frankem, jehož růst zastavila klesající trendová čára u prostřed cenového pásma.
  • Jak to vidíte ?
    proč blog / příprava pro týden 04/2010
  • Jak to vidíte (EURGBP) 8 ?
    EURGBP
  • Jak to vidíte (EURUSD) 16 ?
    Článek a komentář k měnovému páru EURUSD.
  • Jak to vidíte (USDJPY) 7
    USDJPY
  • Jak to vidíte 10 ?
    Analýza měnových párů EURGBP, AUDUSD, USDJPY.
  • Jak to vidíte 11 ?
    Článek - ranní inventura pocitů a jak to vidíte?
  •  


    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