Úterý 21. září 2021 07:11
reklama
X
Swissquote Bank
reklama
X
Admiral Markets
reklama
X
Purple Trading Roadshow
reklama
X
ETX Capital

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 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 svést na americkém růstu
    Politická scéna ve Spojených státech zažívá krušné chvíle, když po neuznání prezidentských voleb muselo dojít ke střelbě uvnitř Kongresu při jeho pokusu o obsazení. Zdá se však, že nebezpečí politického převratu v samotném srdci demokracie je zažehnáno. Alespoň tak to vnímají finanční trhy, které během včerejšího dne rostly a nenechaly se znervóznět.
  • 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 zařadit mezi vítěze na Forexu?
    Nastavení mysli vítězů je všude stejné. Psychologie vítězů souvisí s konkrétními vzorci myšlení, které můžeme analyzovat a inspirovat se jimi v konkrétním odvětví lidské činnosti, trading nevyjímaje. Člověk se řídí vzorci chování, které jsou u něj do určité míry zakořeněné a předvídatelné. V tomto článku se blíže podíváme na vzorce chování úspěšných traderů, kterými se lze inspirovat.
  • 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 zbavit špatných obchodních návyků
    Podle některých odborníků 40 až 50 % všech denních činností tvoří rutina a naše návyky, zbytek pak připadá na „improvizaci“. A právě návykům, zejména těm špatným, se bude věnovat dnešní článek. A řeč přijde samozřejmě i na to, jak se jich zbavit.
  • 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 stanovovat cíle v tradingu
    Mnoho obchodníků si náhodně stanovuje denní nebo týdenní výkonnostní cíle. Takový přístup je velmi nebezpečný, protože vytváří na tradera značný tlak a především v něm vzbuzuje potřebu více obchodovat a nepřemýšlet nad jednotlivými obchody s chladnou hlavou a lehkostí, ale s využitím emocí strachu a chamtivosti. Tento přístup vede postupem času k vymazání účtu obchodníka. V tomto příspěvku se naopak dozvíte pár tipů, jak si jako trader stanovovat cíle správným způsobem.
  • Jak si udržet radost z obchodování: Během i po krizi koronaviru
    V jednom ze svých předešlých blogů jsem se věnoval fenoménu, který je v anglofonních státech známý jako over-trading. Rád bych se vrátil k podobnému tématu, ve kterém rozeberu, jak v obchodování forexových trhů vydržet dlouhodobě a nevyhořet. Jsem si jistý, že mnoho z Vážených čtenářů již ví, že se přes noc nestanou milionáři. Jak ale vydržet obchodovat i ve chvílích těžkých, jako je krize koronaviru? Jak obchodovat dlouhodobě, aby to nebylo bolestivé pro vaši hlavu a portfolio?
  • Jak si užít léto a nesedět pouze před grafy? (část 1.)
    Léto máme v plném proudu, a tak není divu, že mnoho lidí přemýšlí, jak nejlépe zúročit své celoroční pracovní nasazení a dopřát si trochu toho zaslouženého odpočinku. Existují aktivity, od kterých si lze na týden či dva odpočinout a vzít si například dovolenou. Obchodování na finančních trzích k nim však nepatří. Právě zde totiž může každý den hrát nesmírnou roli a úplné vynechání často znamená propásnutí příležitosti, na kterou obchodník čeká třeba několik týdnů, ne-li měsíců.
  • Jak si užít léto a nesedět pouze před grafy? (část 2.)
    V první části našeho letního vydání nazvaného „Jak si užit léto a nesedět pouze před grafy?“ jsme se věnovali algotradingu. Zmínili jsme, že jeho největším přínosem je možnost plné automatizace obchodního systému (pokud to všechny okolnosti umožňují). Díky ní si pak může každý obchodník vychutnat zasloužený letní odpočinek a nabrat přitom nové síly.
  • 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 si vést svůj obchodní deník
    Obchodní deník je určitým protokolem vašich minulých obchodů, který vám má pomoci vylepšit své obchodní strategie, vstupy a výstupy do obchodů a odhalit drobné chyby, které při vašem obchodování možná děláte, ale nevšimli jste si jich. Stejně tak jako například majitel firmy sleduje své zásoby na skladu, měl by i trader mít přehled o svých pozicích a exekucích obchodů. Z obchodního deníku byste měli čerpat poučení ze svých obchodních zkušeností. Podívejme se na tento důležitý faktor v tradingu blíže.
  • Jak si vybrat měnový pár pro obchodování na Forexu
    Když obchodník přichází obchodovat na Forex, nebo plánuje rozšířit arzenál svých obchodních nástrojů o Forex, tak si nevyhnutelně položí otázku: jaký měnový pár zvolit pro obchodování?
  • Jak si vybudovat sebedůvěru v obchodování
    Obchodování je vysoce náročná činnost. Proto si musíme vyvinout různé psychologické dovednosti. Nejlepší hráči světa jsou ti, kteří si vyvinuli ty vnitřní dovednosti, které jim brání, aby dělali chyby při obchodování, které amatér dělá každý den.
  • Jak si vypěstovat zdravou tradingovou vášeň
    Pro některé lidi je trading zábavnou činností a samotné obchodování jim přináší radost. U většiny obchodníků však časem dochází spíše k vytvoření si určité závislosti na sezení před monitorem či sledování tržního vývoje na svém telefonu. Závislost na tradingu dlouhodobě velmi negativně ovlivňuje výsledky obchodníka, a proto je důležité vybudovat si zdravou tradingovou vášeň. V tomto článku vám sdělím, jak na to.
  • 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 dopadá, když se neposlechne obchodní plán?
    Téměř v každém článku se zaměřením na obchodování se o ní dočteme. Konkrétně to, jak stěžejní pro trading je, jak se s ní musíme naučit pracovat a jak o ni pečovat. Samozřejmě mám na mysli psychiku. Můžete si o ní přečíst nespočet publikací, na základě kterých si vytvoříte perfektní obchodní plán, který se poté budete snažit následovat, ale pak se stejně něco zvrtne. V hlavě se vám začne ozývat nenápadný chamtivý hlásek, který začne sílit na intenzitě a pak to dopadne tak jako u mě v předchozích dvou týdnech.
  •  


    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 (speciální uzavřená sekce na webu), až doposud využívanou pouze několika profesionálními tradery, a k tomu i exkluzivní VIP indikátory, 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é VIP indikátory, 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
X
Purple Trading Roadshow