mql5/Experts/testRefactor2/docs/ARCHITECTURE.md
2026-02-01 21:39:33 +01:00

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í kopii SContext
  • SetGridMaxLevels(int) – nastaví max. počet úrovní Gridu

CLogger

Účel: Centralizované logování s úrovněmi Error, Info, Debug.

Metody:

  • Error(string) – chyby
  • Info(string) – informace
  • Debug(string) – ladění
  • SetMinLevel(ENUM_LOG_LEVEL) – minimální úroveň pro výstup
  • SetPrefix(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 symbol
  • GetTicket(), GetSymbol() – identifikace
  • Select() – vybere pozici v terminálu
  • GetType() – BUY/SELL
  • GetOpenPrice(), 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álu
  • Count(), CountBuy(), CountSell() – počty
  • GetMinOpenPriceBuy(), GetMaxOpenPriceSell() – min/max ceny pro Grid
  • GetTotalProfit() – součet profit + swap všech pozic
  • GetTickets(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 grafu
  • GetSignals() – vrací SSignalResult (buySignal, sellSignal, volume, trendUp, smaDistancePoints)
  • GetH1Trend() – trend na H1 (close > MA = uptrend)
  • GetTf1Trend(), GetTf2Trend() – trend na TF1, TF2
  • IsBuyDirectionValid() – true když TF1 i TF2 ukazují uptrend
  • IsSellDirectionValid() – true když TF1 i TF2 ukazují downtrend
  • GetLastBarValues() – 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 Gridu
  • OnNewBar(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 gridDistancePoints a canBuy (signál + TF1+TF2 uptrend)
    • S SELL pozicemi: přidá další SELL, když cena vzrostla o gridDistancePoints a canSell (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()

  1. g_positions.Refresh() – aktualizace seznamu pozic
  2. g_equityDD.CheckAndClose() – kontrola drawdownu (Single)
  3. g_grid.CheckProfitTargetAndClose() – uzavření Gridu při cílovém zisku
  4. g_trailing.Update() – trailing stop (Single, SL_TRAIL)
  5. 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
  6. g_dashboard.Update() – aktualizace dashboardu

Enumerace

ENUM_EXIT_MODE

  • EXIT_BY_SL_TRAIL – uzavření přes Stop Loss a trailing stop
  • EXIT_BY_OPPOSITE_SIGNAL – uzavření při protisměrném crossover signálu

ENUM_TRADE_MODE

  • TRADE_SINGLE – jedna pozice najednou
  • TRADE_GRID – Grid strategie (více úrovní)