9 Kio
TestRefactor – Dokumentace EA
Přehled
EA (Expert Advisor) pro MetaTrader 5 postavený v OOP stylu. Používá crossover rychlé a pomalé SMA + RSI pro generování signálů, s podporou režimu jedné pozice (Single) nebo Grid strategie. Trend je ověřován na H1 a dvou dodatečných timeframech (TF1, TF2).
Inputy (parametry EA)
Všechny inputy jsou deklarovány v hlavním souboru testRefactor2.mq5 a předávány do tříd přes CContext.
Indikátory (SMA, RSI)
| Input | Typ | Výchozí | Popis |
|---|---|---|---|
InpFastMaPeriod |
int | 5 | Perioda rychlé SMA – kratší MA pro detekci crossoveru |
InpSlowMaPeriod |
int | 15 | Perioda pomalé SMA – delší MA pro trend |
InpRsiPeriod |
int | 14 | Perioda RSI indikátoru |
InpRsiOverbought |
double | 70 | RSI horní hranice – signál BUY jen když RSI < tato hodnota |
InpRsiOversold |
double | 30 | RSI dolní hranice – signál SELL jen když RSI > tato hodnota |
InpSmaMinDistancePoints |
double | 0 | Min. vzdálenost SMA v bodech – signál jen když Fast-Slow >= tato hodnota (0 = vypnuto) |
Trend (H1)
| Input | Typ | Výchozí | Popis |
|---|---|---|---|
InpH1TrendMaPeriod |
int | 50 | Perioda SMA na H1 – trend: close > MA = uptrend, close < MA = downtrend (0 = vypnuto) |
Ověření směru (TF1, TF2) – pro Grid
| Input | Typ | Výchozí | Popis |
|---|---|---|---|
InpTimeframe1 |
ENUM_TIMEFRAMES | PERIOD_H4 | První dodatečný timeframe pro filtrování otevření Grid pozic |
InpTimeframe1MaPeriod |
int | 20 | Perioda SMA na TF1 – BUY jen když close > MA, SELL jen když close < MA (0 = vypnuto) |
InpTimeframe2 |
ENUM_TIMEFRAMES | PERIOD_D1 | Druhý dodatečný timeframe pro filtrování otevření Grid pozic |
InpTimeframe2MaPeriod |
int | 50 | Perioda SMA na TF2 – oba TF musí souhlasit se směrem (0 = vypnuto) |
Obchodování
| Input | Typ | Výchozí | Popis |
|---|---|---|---|
InpLotSize |
double | 0.1 | Velikost lotu pro otevření pozic |
InpTradeMode |
ENUM_TRADE_MODE | TRADE_SINGLE | Režim: Single (jedna pozice) nebo Grid (více úrovní) |
InpTrailingTriggerUSD |
double | 3.0 | Zisk v USD, od kterého se aktivuje trailing stop (Single režim) |
InpTrailingDistanceUSD |
double | 1.0 | Vzdálenost trailing stop od aktuálního zisku v USD |
Grid
| Input | Typ | Výchozí | Popis |
|---|---|---|---|
InpGridDistancePoints |
double | 50 | Vzdálenost mezi úrovněmi Gridu v bodech – nová pozice při pohybu ceny o tuto vzdálenost |
InpGridTargetProfitUSD |
double | 20.0 | Cílový zisk v USD – při dosažení se uzavře celý Grid |
InpGridMaxLevels |
int | 20 | Max. počet úrovní (pozic) v jednom směru |
Ostatní
| Input | Typ | Výchozí | Popis |
|---|---|---|---|
InpMaxEquityDrawdownPct |
double | 10.0 | Max. povolený drawdown equity v % – při překročení se uzavřou všechny pozice (jen Single) |
InpExitMode |
ENUM_EXIT_MODE | EXIT_BY_SL_TRAIL | Režim uzavření: Stop Loss & Trailing nebo Opposite Crossover (uzavření při protisměrném signálu) |
Třídy
CContext
Účel: Centrální úložiště konfigurace z inputů. Všechny třídy dostávají parametry přes SContext z CContext.Get().
Metody:
SetFromInputs(...)– naplní kontext hodnotami z inputůGet()– vrátí kopiiSContextSetGridMaxLevels(int)– nastaví max. počet úrovní Gridu
CLogger
Účel: Centralizované logování s úrovněmi Error, Info, Debug.
Metody:
Error(string)– chybyInfo(string)– informaceDebug(string)– laděníSetMinLevel(ENUM_LOG_LEVEL)– minimální úroveň pro výstupSetPrefix(string)– prefix zpráv
CPosition
Účel: Reprezentace jedné otevřené pozice. Čte data z terminálu přes PositionSelectByTicket().
Metody:
Set(ticket, symbol)– nastaví ticket a symbolGetTicket(),GetSymbol()– identifikaceSelect()– vybere pozici v termináluGetType()– BUY/SELLGetOpenPrice(),GetVolume(),GetProfit(),GetSwap(),GetSL(),GetTP()IsBuy(),IsSell()– pomocné predikáty
CPositions
Účel: Kolekce otevřených pozic daného symbolu. Jediné místo, kde se volá PositionsTotal() / PositionGetTicket() pro daný symbol.
Metody:
Refresh()– znovu načte pozice z termináluCount(),CountBuy(),CountSell()– počtyGetMinOpenPriceBuy(),GetMaxOpenPriceSell()– min/max ceny pro GridGetTotalProfit()– součet profit + swap všech pozicGetTickets(ulong &[])– seznam ticketůHasNoPositions(),HasBuy(),HasSell()– predikáty
CClosedPosition / CClosedPositions
Účel: Snapshot zavřené pozice a kolekce pro historii/statistiky. Připraveno pro budoucí rozšíření (ukládání při uzavření).
CClosedPosition: ticket, symbol, type, openPrice, closePrice, volume, profit, swap, openTime, closeTime
CClosedPositions: Add(), Count(), At(index), GetTotalProfit()
CSignalEngine
Účel: Indikátory (SMA, RSI) a výpočet obchodních signálů. Drží handly, detekuje nový bar, vrací buy/sell signály s filtrem trendu.
Indikátory:
- Fast MA, Slow MA (aktuální timeframe)
- RSI (aktuální timeframe)
- H1 trend MA (volitelné)
- TF1 MA, TF2 MA (volitelné)
Metody:
Init()/Deinit()– vytvoření a uvolnění handleůIsNewBar()– true při novém baru na aktuálním grafuGetSignals()– vracíSSignalResult(buySignal, sellSignal, volume, trendUp, smaDistancePoints)GetH1Trend()– trend na H1 (close > MA = uptrend)GetTf1Trend(),GetTf2Trend()– trend na TF1, TF2IsBuyDirectionValid()– true když TF1 i TF2 ukazují uptrendIsSellDirectionValid()– true když TF1 i TF2 ukazují downtrendGetLastBarValues()– hodnoty MA a RSI pro dashboard
Logika signálů:
- BUY: Fast MA crossover nad Slow MA + RSI < overbought + min. distance + H1 uptrend
- SELL: Fast MA crossover pod Slow MA + RSI > oversold + min. distance + H1 downtrend
CEquityDrawdown
Účel: Sleduje vrchol equity. Při překročení max. drawdownu (např. 10 %) uzavře všechny pozice symbolu.
Poznámka: Aktivní jen v režimu TRADE_SINGLE. V Grid režimu se nepoužívá (Grid má vlastní logiku uzavření).
Metody:
CheckAndClose()– voláno každý tick; při překročení limitu uzavře pozice
CTrailingStop
Účel: Trailing stop pro režim jedné pozice. Posouvá SL za cenou při dosažení zisku.
Podmínky: Aktivní jen při TRADE_SINGLE a EXIT_BY_SL_TRAIL. V Grid režimu se nepoužívá.
Logika: Když profit >= trailingTriggerUSD, posune SL tak, aby zajištěný zisk byl trailingTriggerUSD - trailingDistanceUSD.
Metody:
Update()– voláno každý tick; upraví SL u pozic splňujících podmínky
CGrid
Účel: Logika Grid strategie – otevření první úrovně, přidání dalších úrovní podle distance, uzavření při cílovém zisku.
Metody:
CheckProfitTargetAndClose()– když celkový zisk >=gridTargetProfitUSD, uzavře všechny pozice GriduOnNewBar(buySignal, sellSignal, volume, tfBuyValid, tfSellValid)– na nový bar:- Bez pozic: otevře první BUY nebo SELL podle signálu a TF1+TF2 (pokud jsou nastaveny)
- S BUY pozicemi: přidá další BUY, když cena klesla o
gridDistancePointsacanBuy(signál + TF1+TF2 uptrend) - S SELL pozicemi: přidá další SELL, když cena vzrostla o
gridDistancePointsacanSell(signál + TF1+TF2 downtrend)
TF1/TF2 filtr: Grid otevírá pozice jen když směr souhlasí s oběma timeframy. BUY jen při uptrendu na TF1 i TF2, SELL jen při downtrendu.
CDashboard
Účel: Zobrazení informací na grafu přes Comment().
Zobrazuje: slowMa, fastMa, RSI, SMA distance, H1 trend, TF1 trend, TF2 trend, stav Gridu (počet Buy/Sell).
Metody:
Update()– voláno každý tick; sestaví a zobrazí text
Tok OnTick()
g_positions.Refresh()– aktualizace seznamu pozicg_equityDD.CheckAndClose()– kontrola drawdownu (Single)g_grid.CheckProfitTargetAndClose()– uzavření Gridu při cílovém ziskug_trailing.Update()– trailing stop (Single, SL_TRAIL)- Na nový bar:
g_signals.GetSignals()– výpočet signálů- Pokud
EXIT_BY_OPPOSITE_SIGNAL+ Single: uzavření protisměrných pozic - Single: otevření BUY/SELL podle signálu
- Grid:
g_grid.OnNewBar(...)s TF1/TF2 filtrem
g_dashboard.Update()– aktualizace dashboardu
Enumerace
ENUM_EXIT_MODE
EXIT_BY_SL_TRAIL– uzavření přes Stop Loss a trailing stopEXIT_BY_OPPOSITE_SIGNAL– uzavření při protisměrném crossover signálu
ENUM_TRADE_MODE
TRADE_SINGLE– jedna pozice najednouTRADE_GRID– Grid strategie (více úrovní)