Pyramiding (skalowanie pozycji)

14. Pyramiding (skalowanie pozycji)

Inp_Pyramid_Multiplier      = 3.0   // Mnożnik (sonda → główna)
Inp_Pyramid_Max_Lots        = 2.0   // Twardy limit lotów na pozycję
Inp_Pyramid_OnlyProfitable  = true  // Piramiduj tylko gdy ostatnia pozycja na +

Logika:

  • Brak pozycji: lots = target_lots / 3.0 — otwierana mała sonda (1/3 normalnej)
  • Jest pozycja: lots = last_volume × 3.0 — skalowanie do pełnej wielkości
  • Jeśli OnlyProfitable=true i ostatnia pozycja na minusie → piramida zablokowana

Log: "Pyramid blocked: last position not in profit." / "LOT CAP: 4.50 -> 2.00"

Filtr Tygodniowy i Fibonacci (Anti-Crash)

12. Filtr Tygodniowy i Fibonacci (Anti-Crash)

Weekly Filter

Inp_WeeklyFilter_Enable = true
Inp_WeeklyFilter_TF = PERIOD_W1

Blokuje handel gdy aktualna cena jest poniżej minimun poprzedniego tygodnia na W1. Chroni przed handlem w strukturalnym niedźwiedzim trendzie i potencjalnych krachach.

Fibonacci Extension Filter

Inp_FiboFilter_Enable = true
Inp_Fibo_TF = PERIOD_D1

Blokuje zlecenia przy ekstremalnych poziomach rozszerzeń Fibonacciego na D1. Zapobiega wchodzeniu na przegrzanym rynku daleko od wartości fundamentalnej.

News Filter

11. News Filter

Integracja z zewnętrznym kalendarzem ekonomicznym dla ochrony przed newsami wysokiego wpływu:

Inp_News_Filter_Enable = true         // Włącza filtr
Inp_News_Mins_Before  = 30            // Zamrożenie 30 min przed newsem
Inp_News_Mins_After   = 12            // Zamrożenie 12 min po newsie
Inp_News_Block_High   = true          // Blokuj newsy o wysokim wpływie (czerwone)
Inp_News_Block_Mid    = true          // Blokuj newsy o średnim wpływie (pomarańczowe)

Gdy aktywny filtr newsów → żadne nowe zlecenia nie są otwierane. Istniejące pozycje są normalnie zarządzane.

Harmonogram i EOD Terminator

10. Harmonogram i EOD Terminator

Harmonogram sesji (lokalny czas terminala)

Każdy dzień tygodnia ma własne okno handlowe:

Poniedziałek:  Inp_Hours_Monday    = "00:00-22:00"
Wtorek:        Inp_Hours_Tuesday   = "00:00-22:00"
Środa:         Inp_Hours_Wednesday = "00:00-22:00"
Czwartek:      Inp_Hours_Thursday  = "00:00-22:00"
Piątek:        Inp_Hours_Friday    = "00:00-05:00"  // wcześniejsze zakończenie

Format: "HH:MM-HH:MM" — można wpisać wiele przedziałów oddzielonych przecinkiem np. "09:00-12:00,15:00-20:00". Sobota i niedziela automatycznie zablokowane.

EOD Terminator

Mechanizm awaryjnego zamknięcia wszystkich pozycji o określonej godzinie:

Piątek:        Inp_EOD_Time_Friday     = "21:39"
Inne dni:      Inp_EOD_Time_OtherDays  = "22:29"

Algorytm z retry:

  1. Próbuje zamknąć wszystkie pozycje na symbolu
  2. Jeśli broker odrzuci zlecenie → czeka 5 sekund → ponawia (max 10 prób)
  3. Po sukcesie: g_Last_EOD_Day = dt.day_of_year (nie powtarza tego samego dnia)

Log: "EOD TERMINATOR: Emergency closing all positions..." → "EOD SUCCESS: Closed position #123." → "EOD TERMINATOR: Chart cleared. Goodnight."

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."