Tag: AlgorithmicTrading
Adaptive Hybrid System 78.10 – Multi-Core VISUAL MODE
Pyramiding (Position Scaling)
14. Pyramiding (Position Scaling)
Inp_Pyramid_Multiplier = 3.0 // Scale multiplier (probe → main)
Inp_Pyramid_Max_Lots = 2.0 // Hard cap: max lots for any single position
Inp_Pyramid_OnlyProfitable = true // Pyramid only if last position is in profit
Logic:
- No open positions:
lots = target_lots / 3.0— a small probe is opened (1/3 of normal) - Position exists:
lots = last_volume × 3.0— scaling up to full size - If
OnlyProfitable = trueand the last position is in loss → pyramid is blocked
Log: "Pyramid blocked: last position not in profit." / "LOT CAP: 4.50 -> 2.00"
Capital Management & Position Sizing
13. Capital Management & Position Sizing
Capital Modes (ENUM_CAPITAL_MODE)
| Mode | Description |
|---|---|
CAPITAL_COMPOUND_AUTO | Base = account balance (automatic) |
CAPITAL_FIXED_MANUAL | Base = Inp_Fixed_Capital_Amount (fixed) |
CAPITAL_COMPOUND_AUTO + Inp_Compound_Enable=true | Base = Fixed + g_CompoundBuffer (from TXT file) |
Position Sizing Algorithm (CalculatePositionSize)
1. base_capital = [depending on mode]
2. budget = base_capital × MaxTotalMarginPercent / 100
3. risk_money = budget × Risk_Percent_Per_Trade / 100
4. sl_ticks = (Hard_SL_Points × _Point) / tick_size
5. loss_for_one_lot = sl_ticks × tick_value
6. target_lots = risk_money / loss_for_one_lot
→ First position: target_lots / Pyramid_Multiplier (probe — smaller)
→ Subsequent position: last_volume × Pyramid_Multiplier (main — larger)
7. Round to broker's volume step
8. Enforce broker's min/max volume
9. Check hard cap: Max_Lots
10. Margin check: OrderCalcMargin → if budget exceeded → abort
Compound Buffer
g_CompoundBuffer is read from an external TXT file. Allows percentage-based growth of the capital base at configurable intervals: Daily / Weekly / Monthly. Enables a compound interest effect on a locked base without changing EA settings.
Weekly Filter & Fibonacci (Anti-Crash)
12. Weekly Filter & Fibonacci (Anti-Crash)
Weekly Filter
Inp_WeeklyFilter_Enable = true
Inp_WeeklyFilter_TF = PERIOD_W1
Blocks trading when the current price is below the previous week’s Low on W1. Protects against trading in a structurally bearish trend or during potential crashes.
Fibonacci Extension Filter
Inp_FiboFilter_Enable = true
Inp_Fibo_TF = PERIOD_D1
Blocks orders at extreme Fibonacci extension levels on D1. Prevents entering an overheated market that has moved far from its fundamental value.
News Filter!
11. News Filter
Integration with an external economic calendar to protect against high-impact news events:
Inp_News_Filter_Enable = true // Enable the filter
Inp_News_Mins_Before = 30 // Freeze trading 30 mins before news
Inp_News_Mins_After = 12 // Continue freeze for 12 mins after news
Inp_News_Block_High = true // Block on high-impact events (red)
Inp_News_Block_Mid = true // Block on medium-impact events (orange)
When the news filter is active → no new orders are opened. Existing positions continue to be managed normally.
Trading Schedule & EOD Terminator
10. Trading Schedule & EOD Terminator
Session Schedule (Terminal Local Time)
Each weekday has its own trading window:
Monday: Inp_Hours_Monday = "00:00-22:00"
Tuesday: Inp_Hours_Tuesday = "00:00-22:00"
Wednesday: Inp_Hours_Wednesday = "00:00-22:00"
Thursday: Inp_Hours_Thursday = "00:00-22:00"
Friday: Inp_Hours_Friday = "00:00-05:00" // earlier close — weekend risk
Format: "HH:MM-HH:MM" — multiple ranges per day can be entered, comma-separated, e.g. "09:00-12:00,15:00-20:00". Saturday and Sunday are automatically blocked.
EOD Terminator
An emergency mechanism for closing all positions at a defined time:
Friday: Inp_EOD_Time_Friday = "21:39"
Other days: Inp_EOD_Time_OtherDays = "22:29"
Algorithm with retry logic:
- Attempts to close all positions on the symbol
- If the broker rejects an order → waits 5 seconds → retries (up to 10 attempts)
- On success:
g_Last_EOD_Day = dt.day_of_year(does not repeat on the same day)
Log: "EOD TERMINATOR: Emergency closing all positions..." → "EOD SUCCESS: Closed position #123." → "EOD TERMINATOR: Chart cleared. Goodnight."
Account Protection — System Level
8. Account Protection — System Level
Daily Loss Hard Limit
If daily P/L drops below -(Inp_Daily_Loss_HardLimit)% of balance:
→ g_DailyLossReached = true
→ ALL new orders blocked for the rest of the day
→ Existing positions continue to be managed
Default: 4% of balance.
Drawdown Freeze
If current drawdown > Inp_Drawdown_FreezeLimit%:
→ g_DrawdownFreeze = true
→ New orders frozen
Default: 0.5% (very conservative, ideal for prop firm challenges).
Daily Target Profit
If daily P/L > +Inp_Daily_Target_Profit%:
→ g_DailyTargetReached = true
→ Trading stopped — profit is secured
Default: 15% — after reaching the target, the system shuts itself down for the day.
Equity Trailing Lock (Master)
An equity protection mechanism operating at the account level:
If equity rises by >= Inp_Equity_TSL_Trigger%:
→ Sets an "equity high watermark"
→ If equity drops below (high - Inp_Equity_TSL_Buffer%):
→ Closes ALL positions immediately
Default: Trigger 5%, Buffer 0.2%. Protects against losing a large intraday gain.
Position Management — Protection Layers
7. Position Management — Protection Layers
ManageAllPositions() executes on EVERY tick for every open position. Protection layers are applied in a strict priority order.
Layer 0: Virtual Stop Loss (Highest Priority — Emergency Cut)
This is not an SL sent to the broker — it is an internal loss-level monitor:
active_cap = base_capital (depending on mode)
pos_profit = profit + swap + commission
max_loss = active_cap × Inp_Virtual_SL_Percent / 100
If |pos_profit| >= max_loss → immediate position close
Log: "VIRTUAL SL HIT! Position #123 loss (-45.23) exceeded 4.00% of Active Capital (1132.50). Closing immediately."
This safeguard acts as the last line of defence against a catastrophic loss, regardless of spread, slippage or broker conditions.
Layer 0.5: Profit Lock (Aggressive Trailing Near TP)
Activates when price approaches TP within Inp_E_PL_Trigger_Points (500 pts):
- Enables an aggressive trailing SL based on
Inp_E_PL_TSL_Points(200 pts) from the current price - SL only moves in the direction of profit (ratchet — never backwards)
- Protects accumulated profit just before TP is hit
Log: "Position #123: PROFIT LOCK Activated!"
Layer 1: Physical TSL BB (Bollinger Band Trailing SL)
A two-phase mechanism:
- Phase 1: Standard Hard SL sent to the broker at the time of opening
- Phase 2: Activates when
profit_in_points >= Inp_E_ProfitToActivateBB(1,500 pts)
Once Phase 2 is active:
- BUY: SL =
MAX(BB_Lower, open_price + floor_dist)— follows the lower BB band (never below open + floor) - SELL: SL =
MIN(BB_Upper, open_price - floor_dist)— follows the upper BB band
TSL BB has higher priority than Hard BE — once Phase 2 is active, Hard BE is ignored.
Log: "Position #123 entered Phase 2 (TSL BB)."
Layer 2: Hard Break-Even (Classic BE)
Moves the physical SL to (or above) the entry price when profit reaches Inp_HardBE_Trigger_Points (200 pts):
BUY: new_SL = open_price + (Inp_HardBE_Level_Points × _Point) // e.g. +100 pts
SELL: new_SL = open_price - (Inp_HardBE_Level_Points × _Point)
SL is only moved in the direction of profit. Once activated, the flag is_breakeven1_set = true — Hard BE is never repeated.
Log: "Position #123: Hard Break-Even set at +100 pts."
Layer 3: Virtual Negative Break-Even
An innovative mechanism that allows a position to „breathe” after achieving a significant profit:
- After reaching
Inp_NegBE_Trigger_Points(5,000 pts) profit → activatesis_breakeven2_set = true - If the position retraces to
Inp_NegBE_Level_Points(e.g. −3,000 pts) → position is closed - Active only when Hard BE has NOT yet been set
Rationale: the position achieved a large profit (5,000 pts), so the system „allows” it to retrace to −3,000 pts before closing it. This dramatically reduces the number of prematurely exited trends.
Log: "Position #123: Virtual Negative BE Activated." → "Position #123: Closed by Virtual Negative BE."
Dynamic Take Profit (TP Extension on Strong Trend)
When price approaches TP within Inp_E_PL_Trigger_Points:
- Checks the BB (using a separate, wider deviation of
Inp_E_BB_TP_Deviation = 3.0) - If price breaches the outer BB band (strong trend confirmed!) → TP is pushed further by
Inp_E_TP_Extension_Points(500 pts) - Can be extended multiple times — no limit on the number of extensions
Log: "Position #123: Dynamic TP Extended by 500 points!"
Dynamic Channel (Box Trading) — Price Tunnel
6. Dynamic Channel (Box Trading) — Price Tunnel
Restricts the trading zone to a dynamically defined price corridor.
Standard Box (Long-Term)
Updated every Inp_Channel_Update_Hours hours (default 6h):
- Records the current BID price as
base_price g_Channel_Upper = base_price + Channel_Points_Up × _Pointg_Channel_Lower = base_price - Channel_Points_Down × _Point- Trading is only allowed when price is inside the channel
Default settings: Upper +20,000 pts, Lower −5,000 pts — an asymmetric channel assuming greater upside potential.
Log: "NEW STANDARD PRICE CHANNEL: Base: 2100.50 | Upper: 2300.50 | Lower: 2050.50"
Manual Box (Anti-Crash Protection)
Inp_ManualBox_Enable = true allows the trader to manually define absolute price boundaries:
Inp_ManualBox_Upper— upper boundary (price)Inp_ManualBox_Lower— lower boundary (price)
Use case: the trader can manually define a tunnel before a major fundamental event or when operating in a specific market regime.
Channel Priority (IsPriceInChannel)
1. Muzzle Box (active during Impulse) — HIGHEST PRIORITY
2. Manual Box (if Inp_ManualBox_Enable = true)
3. Standard Dynamic Channel (if Inp_Channel_Enable = true)
Status displayed on the panel as g_Status_Channel.
