Ochrona konta — poziom systemowy

8. Ochrona konta — poziom systemowy

Daily Loss Hard Limit

Jeśli dzienny P/L spadnie poniżej -(Inp_Daily_Loss_HardLimit)% bilansu:
  → g_DailyLossReached = true
  → WSZYSTKIE nowe zlecenia zablokowane do końca dnia
  → Istniejące pozycje nadal zarządzane

Domyślnie: 4% bilansu.

Drawdown Freeze

Jeśli aktualny drawdown > Inp_Drawdown_FreezeLimit%:
  → g_DrawdownFreeze = true
  → Nowe zlecenia zamrożone

Domyślnie: 0.5% (bardzo konserwatywne, idealne dla prop firm).

Daily Target Profit

Jeśli dzienny P/L > +Inp_Daily_Target_Profit%:
  → g_DailyTargetReached = true
  → Trading zatrzymany — zysk jest zabezpieczony

Domyślnie: 15% — po osiągnięciu celu system sam się wyłącza na dany dzień.

Equity Trailing Lock (Master)

Mechanizm ochrony equity działający na poziomie całego konta:

Jeśli equity wzrośnie o >= Inp_Equity_TSL_Trigger%:
  → Ustawia "equity high watermark"
  → Jeśli equity spadnie poniżej high - Inp_Equity_TSL_Buffer%:
     → Zamyka WSZYSTKIE pozycje natychmiastowo

Domyślnie: Trigger 5%, Buffer 0.2%. Chroni przed utratą dużego dziennego zysku.

Zarządzanie pozycjami — warstwy ochrony

7. Zarządzanie pozycjami — warstwy ochrony

ManagePositions() wykonuje się na KAŻDYM ticku dla każdej otwartej pozycji. Warstwy ochrony są stosowane w ściśle określonej kolejności priorytetów.

Warstwa 0: Virtual Stop Loss (najwyższy priorytet — awaryjne cięcie)

Nie jest to SL wysłany do brokera — to wewnętrzna kontrola poziomu straty:

active_cap = base_capital (zależnie od trybu)
pos_profit = zysk + swap + prowizja
max_loss = active_cap × Inp_Virtual_SL_Percent / 100

Jeśli |pos_profit| >= max_loss → natychmiastowe zamknięcie pozycji

Log: "VIRTUAL SL HIT! Position #123 loss (-45.23) exceeded 4.00% of Active Capital (1132.50). Closing immediately."

To zabezpieczenie działa jako ostatnia linia obrony przed katastroficzną stratą, niezależnie od spreadu, poślizgu czy warunków brokera.

Warstwa 0.5: Profit Lock (agresywne trailing bliskie TP)

Aktywuje się gdy cena zbliży się do TP na odległość Inp_E_PL_Trigger_Points (500 pkt):

  • Włącza agresywny trailing SL oparty o Inp_E_PL_TSL_Points (200 pkt) od aktualnej ceny
  • SL przesuwa się tylko w kierunku zysku (ratchet — nigdy wstecz)
  • Chroni wypracowany zysk tuż przed osiągnięciem TP

Log: "Position #123: PROFIT LOCK Activated!"

Warstwa 1: Physical TSL BB (Bollinger Band Trailing SL)

Dwufazowy mechanizm:

  • Faza 1: Standard Hard SL wysłany do brokera przy otwarciu
  • Faza 2: Aktywuje się gdy profit_in_points >= Inp_E_ProfitToActivateBB (1500 pkt)

Po wejściu w Fazę 2:

  • BUY: SL = MAX(BB_Lower, open_price + floor_dist) — podąża za dolnym pasmem BB (nigdy poniżej otwarcia + podłoga)
  • SELL: SL = MIN(BB_Upper, open_price - floor_dist) — podąża za górnym pasmem BB

BB TSL ma wyższy priorytet niż Hard BE — gdy Faza 2 aktywna, Hard BE jest ignorowane.

Log: "Position #123 entered Phase 2 (TSL BB)."

Warstwa 2: Hard Break-Even (klasyczny BE)

Przenosi fizyczny SL do (lub powyżej) ceny otwarcia gdy zysk osiągnie Inp_HardBE_Trigger_Points (200 pkt):

BUY: new_SL = open_price + (Inp_HardBE_Level_Points × _Point)  // np. +100 pkt
SELL: new_SL = open_price - (Inp_HardBE_Level_Points × _Point)

SL jest przesuwany tylko w kierunku zysku. Po jednorazowej aktywacji flaga is_breakeven1_set = true — Hard BE nie jest powtarzany.

Log: "Position #123: Hard Break-Even set at +100 pts."

Warstwa 3: Virtual Negative Break-Even

Innowacyjny mechanizm pozwalający pozycji „oddychać” po osiągnięciu pewnego zysku:

  1. Po osiągnięciu Inp_NegBE_Trigger_Points (5000 pkt) zysku → aktywuje się is_breakeven2_set = true
  2. Jeśli pozycja cofnie się do poziomu Inp_NegBE_Level_Points (np. -3000 pkt) → pozycja jest zamykana
  3. Działa wyłącznie gdy Hard BE NIE jest jeszcze ustawiony

Sens: pozycja osiągnęła duży zysk (5000 pkt), system „pozwala” jej wrócić do -3000 pkt zanim ją zatnie. Drastycznie zmniejsza liczbę przedwcześnie zamkniętych trendów.

Log: "Position #123: Virtual Negative BE Activated." → "Position #123: Closed by Virtual Negative BE."

Dynamic Take Profit (rozszerzanie TP przy silnym trendzie)

Gdy cena zbliży się do TP na Inp_E_PL_Trigger_Points:

  1. Sprawdza BB (z osobnym szerszym odchyleniem Inp_E_BB_TP_Deviation = 3.0)
  2. Jeśli cena przebija zewnętrzne pasmo BB (silny trend!) → TP jest przesuwany dalej o Inp_E_TP_Extension_Points (500 pkt)
  3. Można wielokrotnie rozszerzać — bez limitu liczby rozszerzeń

Log: "Position #123: Dynamic TP Extended by 500 points!"

Dynamic Channel (Box Trading) — tunel ceny

6. Dynamic Channel (Box Trading) — tunel ceny

Ogranicza strefę handlu do dynamicznie wyznaczonego korytarza cenowego.

Standardowy Box (długoterminowy)

Aktualizowany co Inp_Channel_Update_Hours godzin (domyślnie 6h):

  1. Zapamiętuje aktualną cenę BID jako base_price
  2. g_Channel_Upper = base_price + Channel_Points_Up × _Point
  3. g_Channel_Lower = base_price - Channel_Points_Down × _Point
  4. Handel dozwolony tylko gdy cena mieści się w kanale

Domyślne ustawienia: Upper +20000 pkt, Lower -5000 pkt — asymetryczny kanał zakłada większy potencjał wzrostowy.

Log: "NEW STANDARD PRICE CHANNEL: Base: 2100.50 | Upper: 2300.50 | Lower: 2050.50"

Manualny Box (Anti-Crash Protection)

Inp_ManualBox_Enable = true pozwala ręcznie ustawić granice absolutne cenami:

  • Inp_ManualBox_Upper — górna granica (cena)
  • Inp_ManualBox_Lower — dolna granica (cena)

Użycie: trader może ręcznie wyznaczyć tunel przed ważnym eventem fundamentalnym lub przy handlu w określonym reżimie rynkowym.

Priorytet kanałów (IsPriceInChannel)

1. Muzzle Box (aktywny podczas Impulse) — PRIORYTET
2. Manual Box (jeśli Inp_ManualBox_Enable=true)
3. Standard Dynamic Channel (jeśli Inp_Channel_Enable=true)

Status wyświetlany na panelu jako g_Status_Channel.

Institutional Impulse + Muzzle Mode

5. Institutional Impulse + Muzzle Mode

Jeden z kluczowych mechanizmów. Wykrywa instytucjonalne impulsy (nagłe, gwałtowne ruchy generowane przez duży kapitał) i natychmiast zmienia charakterystykę systemu.

Wykrywanie impulsu

Na każdym nowym barze na Inp_Impulse_TF (domyślnie M1):

  1. Oblicza średni zasięg i średni wolumen z ostatnich Inp_Impulse_AvgPeriod (20) świec
  2. Pobiera ATR
  3. Oblicza velocity = |current_close - prev_close| / prev_close
  4. Impuls wykryty jeśli zasięg świecy > Inp_Impulse_Min_Range_Points (50 pkt) ORAZ spełniony przynajmniej jeden z warunków:
  • velocity > Inp_Impulse_Velocity (0.5% zmiany ceny)
  • current_range > RangeMult × avg_range (2× średniej)
  • current_range > ATRMult × ATR (2× ATR)
  • current_volume > VolMult × avg_volume (1.5× średniego wolumenu)

Log: "Institutional Impulse Detected! Activating MUZZLE MODE for 15 mins."

Muzzle Mode — jak zmienia się charakterystyka systemu

Po wykryciu impulsu system wchodzi w Muzzle Mode (tryb wyciszenia):

ParametrNormalny trybPodczas Impulsu (Muzzle Mode)
Min. ciało świecy Smart DI2 pkt150 pkt
Poziom blokady CCIInp_Block_CCI_Level (350)Inp_Muzzle_CCI_Block_Level (130)
Sygnały SELLDozwoloneBlokowane jeśli Channel_Down=0
Kanał cenowyStandardowyMuzzle Box (anchor w momencie impulsu)

Kluczowe: Gdy Inp_Muzzle_Channel_Points_Down = 0, podczas impulsu system działa wyłącznie jako BUY ONLY — sprzedaż jest całkowicie blokowana. Pozwala to uchwycić trend po biciu.

Dynamiczny Muzzle Channel

W momencie wykrycia impulsu system zapamiętuje aktualną cenę BID (g_Muzzle_BasePrice). Wszystkie kolejne sygnały muszą mieścić się w:

  • Upper: base_price + Muzzle_Channel_Points_Up
  • Lower: base_price - Muzzle_Channel_Points_Down (lub -DBL_MAX gdy Down=0)

Wygaszenie Muzzle Mode

Muzzle Mode wygasa gdy spełnione są WSZYSTKIE warunki:

  1. Upłynął cooldown: (czas_teraz - czas_impulsu) > Impulse_Cooldown_Mins × 60
  2. Rynek się uspokoił: current_range ≤ 1.5 × avg_range AND current_volume ≤ 1.5 × avg_vol
  3. Ukształtował się szczyt lub dołek: poprzednia świeca wyższy high (peak) lub niższy low (trough) niż sąsiednie

Log: "Market calmed down. MUZZLE MODE deactivated."

Macro Risk Matrix — dynamiczny scoring instytucjonalny

4. Macro Risk Matrix — dynamiczny scoring instytucjonalny

To najbardziej unikalna funkcja systemu. AHS przed każdym zleceniem pyta o zdanie 19 globalnych aktywów, analizując ich kondycję przez pryzmat 5 wskaźników każdy — łącznie 95 uchwytów wskaźnikowych.

Skład Macro Risk Matrix

Tech Titans (≈60% puli):

AktywoWaga bazowa
Apple (AAPL)8%
Microsoft (MSFT)8%
Nvidia (NVDA)8%
Amazon (AMZN)5%
Meta (META)5%
Alphabet (GOOGL)5%
Tesla (TSLA)4%
Broadcom (AVGO)4%
Costco (COST)3%
Netflix (NFLX)2%
PepsiCo (PEP)2%
Cisco (CSCO)2%
T-Mobile (TMUS)2%
Adobe (ADBE)1%
AMD1%

Global Macro (≈40% puli):

AktywoWaga bazowaSpecjalna rola
Bitcoin (BTC)10%Risk-On barometr
Gold (GOLD)10%Odwrotna korelacja — Risk-Off
EURUSD10%Proxy siły dolara (DXY)
AUDJPY10%Carry trade / apetyt na ryzyko

Dynamiczne ważenie — co wyróżnia ten system

Wagi bazowe to punkt wyjścia, nie wartości stałe. Dla każdego aktywa obliczany jest multiplier na podstawie aktualnych wskaźników:

Wskaźniki dla każdego aktywa (H1):
  → MA50, MA200 (trend długoterminowy)
  → RSI(14)     (momentum/wykupienie-wyprzedanie)
  → CCI(14)     (odchylenie od średniej)
  → MFI(14)     (przepływ pieniądza)

Logika mnożnika dla BUY scoring:
  → Trend byczty (MA50 > MA200):          +0.5
  → Wyprzedanie (RSI<30 lub CCI<-100):   +0.5
  → Wykupienie (RSI>70 lub CCI>100):     -0.5
  → Pieniądz napływa (MFI>50):           +0.2

Logika mnożnika dla SELL scoring:
  → Trend niedźwiedzi (MA50 < MA200):    +0.5
  → Wykupienie (RSI>70 lub CCI>100):    +0.5
  → Wyprzedanie (RSI<30 lub CCI<-100): -0.5
  → Pieniądz odpływa (MFI<50):          +0.2

Minimalna wartość mnożnika = 0.1 (ochrona przed wagą ujemną).

Mechanizm scoringu

effective_weight = base_weight × multiplier
max_pool += effective_weight            // maksymalny możliwy wynik

// Czy aktywo potwierdza kierunek?
if BUY:  price > MA50 → align_score += effective_weight
if SELL: price < MA50 → align_score += effective_weight

// GOLD jest odwrotny (is_inverse=true):
// Bycze GOLD = Risk-Off = potwierdza SELL, nie BUY

final_alignment = (align_score / max_pool) × 100%

Blokada: Jeśli final_alignment < Inp_Macro_Min_Alignment_Percent (domyślnie 70%) → zlecenie zablokowane.

Lazy Evaluation

Macro Matrix NIE jest obliczana na każdym ticku. Jest wyzwalana wyłącznie w momencie gdy jakaś strategia wygeneruje sygnał. Dramatycznie redukuje zużycie CPU. Log: "BUY Align: 82% (Pool: 145)" / "Block BUY: Macro Score".

Jeśli żaden rynek nie jest aktywny

Gdy wszystkie aktywa są nieaktywne (brak danych, rynek zamknięty) → max_pool = 0 → filtr pomijany, trading dozwolony. System nie blokuje się sam gdy brakuje danych globalnych.

Strategie — szczegółowy opis algorytmów

3. Strategie — szczegółowy opis algorytmów

3.1 Smart DI (Directional Index)

Idea: Mierzy dominację jednego kierunku rynkowego na podstawie wskaźnika ADX, analizując różnicę między liniami DI+ i DI-.

Algorytm krok po kroku:

  1. Pobiera wartości DI+ i DI- z ADX (bufor 1 — poprzednia zamknięta świeca, by uniknąć repaintingu)
  2. Oblicza diff = |DI+ - DI-|
  3. Pobiera dane ostatniej zamkniętej świecy na Inp_Strat_TF
  4. Oblicza rozmiar ciała świecy: body = |close - open| / _Point
  5. Jeśli aktywny Impulse/Muzzle Mode: minimalne ciało świecy wzrasta z Inp_Strat_Min_Candle_Body do Inp_Muzzle_Min_Candle_Body (domyślnie 150 pkt zamiast 2 pkt) — charakterystyka strategii zmienia się podczas impulsu
  6. Sygnał BUY: DI+ > DI- AND diff > Min_DI_Diff AND DI- < Max_Opposite_DI
  7. Sygnał SELL: DI- > DI+ AND diff > Min_DI_Diff AND DI+ < Max_Opposite_DI

Log: "Smart DI BUY" / "Smart DI SELL"

Kluczowa właściwość: Parametr Inp_Strat_Max_Opposite_DI ogranicza siłę opozycji — nawet jeśli DI+ dominuje, zbyt silne DI- blokuje sygnał. Działa jako wbudowany filtr jakości trendu.

3.2 MTF Point System (Multi-TimeFrame)

Idea: Scoring zgodności trendu na 4 niezależnych timeframach przy użyciu krzyżowania EMA5/EMA7. Punktuje każdy timeframe i wymaga minimum X punktów.

Algorytm krok po kroku:

  1. Na każdym z 4 timeframów (TF1, TF2, TF3, TF4) pobiera EMA5 i EMA7
  2. BUY point: EMA5 > EMA7 na danym TF → score++
  3. SELL point: EMA5 < EMA7 na danym TF → score++
  4. Jeśli score >= Inp_MTF_Min_Score (domyślnie 3 z 4) → sygnał aktywny

Warunek sprawdzania: Co nowy bar na Inp_MTF_TF1 (najszybszy TF)

Log: "MTF BUY" / "MTF SELL"

Filozofia: System nie wymaga stuprocentowej zgodności — nawet 3 na 4 TF jest wystarczające. Daje elastyczność przy płynnych rynkach, gdzie wszystkie TF rzadko wskazują jednocześnie.

3.3 Three Consecutive Candles (3 Candles)

Idea: Wykrywa mini-trend: 3 kolejne zamknięte świece o tym samym kierunku z minimalnym ciałem.

Algorytm krok po kroku:

  1. Pobiera 3 ostatnie zamknięte świece na Inp_Filter_3Candles_TF
  2. Dla każdej świecy: body = |close - open| / _Point
  3. Jeśli ciało którejkolwiek świecy < Inp_Filter_3Candles_MinBody → sygnał fałszywy
  4. BUY: wszystkie 3 świece są wzrostowe (close > open)
  5. SELL: wszystkie 3 świece są spadkowe (close < open)

Log: "3 Candles BUY" / "3 Candles SELL"

Siła: Prosta, wizualnie intuicyjna, bardzo skuteczna jako walidator — potwierdza momentum zanim Smart DI lub MTF dadzą sygnał.

Multi-Core Strategy Engine — „kto pierwszy ten lepszy”

2. Multi-Core Strategy Engine — „kto pierwszy ten lepszy”

Jest to najważniejsza innowacja systemu. Wbrew nazwie sugerującej jedną strategię, AHS to silnik z wymiennymi rdzeniami strategii, gdzie każda strategia może jednocześnie pełnić dwie role:

RolaParametrOpis
Trigger (wyzwalacz)_As_Strategy = trueStrategia GENERUJE sygnał transakcyjny
Validator (walidator)_As_Filter = trueStrategia POTWIERDZA sygnały innych

Zasada „kto pierwszy ten lepszy” (First-Come-First-Served)

Strategie są ewaluowane sekwencyjnie w stałej kolejności:

EvaluateStrategies()
  1. Smart DI (jeśli As_Strategy=true)  → sygnał? → filtry → zlecenie → RETURN
  2. MTF Point System (jeśli As_Strategy=true) → sygnał? → filtry → zlecenie → RETURN
  3. 3 Consecutive Candles (jeśli As_Strategy=true) → sygnał? → filtry → zlecenie → RETURN

Kluczowe znaczenie: Gdy strategia nr 1 (Smart DI) wygeneruje sygnał i przejdzie przez wszystkie filtry, system natychmiast otwiera zlecenie i wychodzi z funkcji (return). Strategie 2 i 3 nie są już w tym ticku sprawdzane. Nie ma głosowania, uśredniania ani konsensusu — pierwszy ważny sygnał wygrywa.

Każda strategia sprawdzana jest tylko raz na nowy bar (na własnym timeframie), co eliminuje wielokrotne sygnały wewnątrz tej samej świecy.

Możliwe konfiguracje

  • SmartDI jako trigger, MTF+3Candles jako filtry — SmartDI daje sygnał, ale muszą go potwierdzić oba pozostałe systemy
  • Wszystko jako trigger — trzy niezależne strategie rywalizują o otwarcie zlecenia
  • MTF jako trigger, SmartDI jako filter — MTF generuje, SmartDI potwierdza
  • Dowolna kombinacja — każda strategia może być włączona/wyłączona niezależnie w obu rolach

Walidator nie weryfikuje samego siebie

Inteligentna logika: strategia X działając jako filtr NIE waliduje sygnałów własnych. Przykład: jeśli SmartDI jest wyzwalaczem, filtr SmartDI jest pomijany (nie sprawdza sam siebie) — sprawdzane są tylko filtry MTF i 3Candles.

// Walidator pomija własne źródło
if (Inp_SmartDI_As_Filter && trigger_source != "SmartDI") {
    if (!CheckSmartDI_Condition(is_buy)) return false;
}

Architektura i powiązania modułów

1. Architektura i powiązania modułów

System składa się z pięciu plików nagłówkowych dołączanych do skompilowanego pliku głównego _AHS_Main.ex5:

_AHS_Main.ex5
  ├── AHS_Inputs.mqh      → Wszystkie parametry wejściowe, enumeracje, zmienne globalne stanu
  ├── AHS_Filters.mqh     → Filtry rynkowe (The Shield): Macro Matrix, Impulse, Channel, ADX/MA, Smart DI, MTF, 3Candles
  ├── AHS_Strategy.mqh    → Multi-Core Engine: kalkulacja wielkości pozycji, wykonanie zlecenia
  ├── AHS_Management.mqh  → Zarządzanie pozycjami: TSL BB, Hard BE, Neg BE, Dynamic TP, EOD Terminator
  └── AHS_Panel.mqh       → Graficzny panel informacyjny: status, MTF dashboard, lista pozycji

Przepływ OnTick() — krok po kroku

Każdy napływający tick przez główną pętlę EA przechodzi przez ściśle określoną sekwencję:

OnTick()
  1. Sprawdzenie licencji (CLicenseManager.IsExpired)
  2. Sprawdzenie harmonogramu sesji (IsScheduleAllowed)
  3. EOD Terminator (CheckForEODClose) → awaryjne zamknięcie wszystkich pozycji
  4. Aktualizacja dziennego P/L i reset dzienny
  5. Sprawdzenie Account Protection:
       → DailyLossReached? → blokada nowych zleceń
       → DrawdownFreeze?   → blokada nowych zleceń
       → DailyTargetReached? → blokada nowych zleceń
  6. Equity Trailing Lock (master equity trailing SL)
  7. Institutional Impulse Detection (CheckInstitutionalImpulse)
  8. Dynamic Channel Update (UpdateDynamicChannel) co X godzin
  9. News Filter → blokada przed/po newsach
 10. ManageAllPositions() → zarządzanie wszystkimi otwartymi pozycjami
 11. Sprawdzenie warunku cooldown + limitu pozycji
 12. EvaluateStrategies() → Multi-Core Engine szuka sygnału
 13. Aktualizacja panelu informacyjnego

Wszystkie etapy są niezależne — zarządzanie pozycjami (krok 10) działa niezależnie od wyszukiwania sygnałów (krok 12). Oznacza to, że nawet jeśli nowe zlecenia są zablokowane, otwarte pozycje są zawsze zarządzane.

Full Technical Documentation

AHS — Adaptive Hybrid System v78.00

Full Technical Documentation

Multi-Core Strategy Engine for MetaTrader 5 (MQL5)

Project built from July 10th, 12+ hours a day, often seven days a week — through April 21st.


TABLE OF CONTENTS

  1. Architecture & Module Connections
  2. Multi-Core Strategy Engine — “First Come, First Served”
  3. Strategies — Detailed Algorithm Descriptions
  4. Macro Risk Matrix — Dynamic Institutional Scoring
  5. Institutional Impulse + Muzzle Mode — Behavior Change During Impulse
  6. Dynamic Channel (Box Trading) — Price Tunnel
  7. Position Management — Protection Layers
  8. Account Protection — System Level
  9. Manual Trade Management (Click & Forget)
  10. Trading Schedule & EOD Terminator
  11. News Filter
  12. Weekly Filter & Fibonacci (Anti-Crash)
  13. Capital Management & Position Sizing
  14. Pyramiding (Position Scaling)
  15. Information Panel
  16. License & Updates
  17. Full Input Parameter Reference

1:500

Pełna Dokumentacja Techniczna

AHS — Adaptive Hybrid System v78.00

Multi-Core Strategy Engine dla MetaTrader 5 (MQL5)

Projekt realizowany od 10 lipca, ponad 12 godzin dziennie, często przez cały tydzień — do 21 kwietnia.



SPIS TREŚCI

  1. Architektura i powiązania modułów
  2. Multi-Core Strategy Engine — koncepcja “kto pierwszy ten lepszy”
  3. Strategie — szczegółowy opis algorytmów
  4. Macro Risk Matrix — dynamiczny scoring instytucjonalny
  5. Institutional Impulse + Muzzle Mode — zmiana charakterystyki podczas impulsu
  6. Dynamic Channel (Box Trading) — tunel ceny
  7. Zarządzanie pozycjami — warstwy ochrony
  8. Ochrona konta — poziom systemowy
  9. Obsługa manualna (Click & Forget)
  10. Harmonogram i EOD Terminator
  11. News Filter
  12. Filtr Tygodniowy i Fibonacci
  13. Zarządzanie kapitałem i wielkością pozycji
  14. Pyramiding (skalowanie)
  15. Panel informacyjny
  16. Licencja i aktualizacje
  17. Pełna lista parametrów wejściowych (Inputs)




1:500