User Manual
Ultimate Oil UTS
Powered by pressure. Driven by data. Fueled by oil.
01Overview
Ultimate Oil UTS is a smart Expert Advisor built for crude oil markets. It looks for mean-reversion in flat conditions and, when a position is open and price moves against it, scales in at predefined intervals to lower the average price. Positions close together once the combined profit reaches the configured target.
The EA recognises when oil is trading at historically extended levels and can take opposing positions in those situations to participate in the typical reversion. A push-exhaustion filter blocks new entries after sharp rallies, and a drawdown-recovery close mechanism preserves capital by exiting partially-recovered positions early.
02Setup & Recommended Account
Symbols
USOUSD, XTIUSD (WTI)
UKOUSD, XBRUSD, BRENT (Brent)
Timeframe
Any chart timeframe. The EA uses its own internal timeframes.
Min Balance
500 USD minimum
1000+ USD ideal
Broker Contract
Tuned for 1000-barrel contracts. Smaller contracts scale results proportionally lower.
How to attach: Open an oil chart on any timeframe, drag Ultimate Oil UTS from the Navigator, and allow algo trading. The on-chart panel appears in the upper-left and starts tracking immediately.
Backtest results across several account sizes (USOUSD M15, 2023.01 — 2026.05, default optimised settings):
04Settings: General
| Input | Default | What it does |
| InpTradeComment | Ultimate Oil UTS | Comment string written on every trade. Helpful for filtering trades in your history. |
| InpMagicNumber | 6170115 | Identifies trades belonging to this EA. Change only if running multiple instances on the same account; each must have a unique magic number. |
| InpOrderType | Buy Only | Trade direction. Buy Only is the safest baseline. Both lets the EA also take sells when the high-price override fires. Sell Only restricts to short-side entries. |
05Settings: Risk
| Input | Default | What it does |
| InpLotMode | Extreme | Lot sizing mode. Low (0.01 per $5K) is the most conservative; Extreme (0.01 per $1K) is the validated baseline; Aggressive and Nuclear go higher with sharply increased drawdown risk. Fixed uses a static lot size; Custom lets you specify both lot and dollar base. |
| InpFixedLot | 0.01 | Lot size used when InpLotMode = Fixed. Ignored otherwise. |
| InpCustomLotSize | 0.01 | Custom-mode lot size per the dollar base. |
| InpCustomDollarBase | 5000.0 | The dollar amount that InpCustomLotSize applies to in Custom mode. |
| InpMaxLotSize | 5.0 | Hard cap on the size of any single trade. |
| InpMaxTotalLots | 12.0 | Hard cap on the combined lots of all open positions. |
| InpAutoScaleLots | false | If enabled, detects broker contract size and adjusts lots so per-point dollar risk matches the 1000-barrel reference. Off by default to respect the user's explicit risk choice. |
06Settings: Progressive Grid
| Input | Default | What it does |
| InpUseProgressiveGrid | true | Enables progressive grid spacing. Required for the optimised configuration. |
| InpGridMultiplier | 1.0 | Per-level lot multiplier. 1.0 = flat. Higher values create martingale-style scaling and significantly increase drawdown risk. |
| InpGridMaxSpacing | 2000 | Maximum spacing in points between grid additions. |
| InpProgressiveMaxGrid | 6 | Maximum number of grid levels per cycle. |
07Settings: Trailing Stop
| Input | Default | What it does |
| InpTSLActivatePct | 80.0 | The cycle trailing stop activates once profit reaches this percentage of the take-profit target. 0 disables the trailing stop entirely. |
| InpTSLTrailPct | 10.0 | How far below the peak profit (as a percentage of TP) the trailing stop sits. |
08Settings: Time Decay TP
Reduces the take-profit target over time so positions don't sit open indefinitely waiting for a full TP that may never come.
| Input | Default | What it does |
| InpUseTimeDecay | true | Master switch for the time-decay TP feature. |
| InpTimeDecayStart | 4.0 | The TP starts shrinking after this many hours of the cycle being open. |
| InpTimeDecayEnd | 48.0 | The TP reaches its minimum at this many hours. |
| InpTimeDecayMinPct | 10.0 | The minimum TP value, expressed as a percentage of the original target. 0 = breakeven. |
| InpDecayDDClose | true | Enables the “DD recovery close”. When fully decayed and drawdown exceeds the threshold, the EA arms an exit. When DD recovers below the recover-level, all positions close to lock in the smaller loss. Recommended on — preserves capital during shocks. |
| InpDecayDDThresh | 30.0 | Drawdown percentage that arms the recovery-close mechanism. |
| InpDecayDDRecover | 10.0 | Drawdown percentage at which the armed close fires. |
09Settings: Safety
| Input | Default | What it does |
| InpMaxDrawdownPct | 50.0 | Emergency drawdown cap. If session drawdown reaches this percent of balance, all positions close and trading pauses for the cooldown period. 100 disables. |
| InpMaxTotalPos | 50 | Absolute maximum number of open positions across all cycles. |
| InpCooldownBars | 600 | Bars trading is paused after a cycle close. |
| InpUseStopLoss | false | Enables a per-trade stop loss. Off by default since the strategy relies on basket recovery rather than per-trade exits. |
| InpStopLossPoints | 0 | Per-trade stop loss in points (used if dollar amount is 0). |
| InpStopLossDollar | 0 | Per-trade stop loss in account currency. Takes precedence over points if non-zero. |
10Settings: Grid Drop Protection
Closes the worst-performing position in a deep-drawdown cycle to free margin and keep the rest of the cycle alive.
| Input | Default | What it does |
| InpUseGridDrop | true | Enable the grid-drop protection feature. |
| InpGridDropPct | 45.0 | Drawdown percent at which the worst position is closed. |
| InpGridDropCooldown | 2 | Bars between successive grid-drop closures. |
| InpGridDropMinPos | 2 | Minimum number of grid positions before this protection activates. |
11Settings: Grid Step Timer
Optional time limits for each grid level. If a step exceeds its limit, the cycle closes.
| Input | Default | What it does |
| InpUseGridTimer | false | Enables the grid step timer feature. |
| InpGridTimerStep1…6 | 0 | Maximum hours each step (1 through 6) is allowed to remain open. 0 means no limit. |
12Settings: Filters
Spread & Slippage
| Input | Default | What it does |
| InpUseSpreadFilter | true | Block new entries when spread is wider than the configured maximum. |
| InpMaxSpread | 35 | Maximum spread (points). |
| InpUseSlippageFilter | true | Block entries when execution slippage exceeds the threshold. |
| InpMaxSlippage | 30 | Maximum tolerated slippage (points). |
| InpSlippageTestSize | 3 | Number of recent samples used to estimate slippage. |
Time
| Input | Default | What it does |
| InpUseTimeFilter | false | Block trading during a daily window. |
| InpNoTradeStartHr | 13 | Window start hour (server time). |
| InpNoTradeEndHr | 15 | Window end hour (server time). |
| InpNoFriday | true | Stop opening new trades after the Friday cutoff hour. |
| InpFridayStopHr | 18 | Friday cutoff hour for new entries (server time). |
| InpFridayClose | false | Close all open positions on Friday at the configured hour. |
| InpFridayCloseHr | 20 | Friday close hour (GMT). |
Sessions
| Input | Default | What it does |
| InpUseSessionFilter | false | Restrict trading to specified market sessions. |
| InpTradeEurope | true | Allow trades in the Europe session (07–13 UTC). |
| InpTradeUSA | true | Allow trades in the USA session (14–22 UTC). |
| InpTradeAsia | true | Allow trades in the Asia session (23–06 UTC). |
Indicators
| Input | Default | What it does |
| InpUseATRFilter | true | Block entries when current ATR is unusually high or low. |
| InpATRPeriod | 14 | ATR lookback period. |
| InpATRMaxMulti | 3.0 | Block if ATR is more than this multiple of its average. |
| InpATRMinMulti | 0.3 | Block if ATR is less than this fraction of its average (overly quiet markets). |
| InpUseADXFilter | true | Block entries during strong trends (the strategy targets ranges). |
| InpADXPeriod | 14 | ADX lookback period. |
| InpADXMax | 15.0 | Block if ADX exceeds this value. Lower values are more selective. |
Loss Streak
| Input | Default | What it does |
| InpUseLossFilter | true | Pause trading after consecutive losses. |
| InpMaxConsecLoss | 3 | Number of consecutive losses that triggers the pause. |
| InpLossPauseHours | 4 | Pause duration in hours. |
13Settings: Candle Confirmation
After the initial entry signal, the EA waits for a confirming pattern on the M1 timeframe before executing. This filters out false signals and improves entry quality.
| Input | Default | What it does |
| InpUseCandleConfirm | true | Master switch for M1 candle confirmation. |
| InpConfirmExpiry | 15 | Pending signals expire after this many M1 bars without confirmation. |
| InpConfirmNeedCandle | false | Require a specific candle pattern (engulfing, pin bar, etc.) for confirmation. |
| InpConfirmNeedRSI | true | Require RSI confirmation on lower timeframes. |
| InpHTFOverbought | 60.0 | M15/M30 RSI level above which buys are blocked. |
| InpHTFOversold | 30.0 | M15/M30 RSI level below which sells are blocked. |
| InpLTFBuyBelow | 40.0 | M1/M5 RSI level for buy entry confirmation (looking for a dip). |
| InpLTFSellAbove | 60.0 | M1/M5 RSI level for sell entry confirmation (looking for a rally). |
| InpConfirmNeedADX | false | Require ADX directional indicator confirmation. |
14Settings: Crash Detection
Velocity Exit
| Input | Default | What it does |
| InpUseVelocityExit | false | Enable price velocity exit. Off by default; testing showed it can over-trade. |
| InpVelocityDrop | 50.0 | Drop in points within the time window that triggers an exit. |
| InpVelocityMinutes | 30 | Lookback window in minutes. |
| InpVelocityCloseAll | true | Close all positions on trigger. If false, only freezes new entries. |
| InpVelocityPause | 60 | Pause after triggering, in minutes. |
Daily Range Exhaustion
| Input | Default | What it does |
| InpUseDailyRangeExit | false | Enable daily-range exhaustion exit. |
| InpDailyRangeMult | 2.0 | Close if today's range exceeds this multiple of the average daily range. |
| InpADRPeriod | 20 | Average daily range lookback (days). |
| InpDailyRangeCloseAll | true | Close all positions on trigger. |
15Settings: Trade Blocker
Block trading during a specific date range. Useful for known high-impact events or scheduled time off.
| Input | Default | What it does |
| InpUseTradeBlocker | false | Enable date blocking. |
| InpBlockStart | 2026.03.10 00:00 | Block start date and time. |
| InpBlockEnd | 2026.03.20 00:00 | Block end date and time. |
16Settings: Sell Logic
Sell Price Floor
| Input | Default | What it does |
| InpSellMinPrice | 90.0 | Minimum oil price required for normal sell entries. 0 disables the floor. The high-price sell override below is independent. |
High-Price Sell Override
When oil is trading above the threshold and short-term momentum confirms exhaustion, the EA can take counter-trend sells regardless of the order-type setting.
| Input | Default | What it does |
| InpUseHighSell | true | Master switch for the high-price sell override. |
| InpHighSellPrice | 0.0 | Price threshold to activate. 0 means auto-detect by symbol (110 for WTI, 113 for Brent). Set a positive value to override. |
| InpHighSellTF | M30 | Timeframe used for the short EMA and RSI confirmation. |
| InpHighSellEMA | 20 | Short EMA period. Sell fires when price is below this EMA. 0 disables the EMA path. |
| InpHighSellRSI | 14 | RSI period. Sell fires when RSI is overbought. 0 disables the RSI path. |
| InpHighSellRSIOB | 70.0 | RSI overbought threshold for the high-sell trigger. |
17Settings: Buy Push-Exhaustion Filter
Blocks new buy entries after a sharp recent rally, since extended pushes have a higher probability of reversing in the short term.
| Input | Default | What it does |
| InpUsePushFilter | true | Enable the push filter. |
| InpPushPctMax | 3.0 | Block buy entries if the price has moved up this many percent or more from the lowest low in the lookback window. |
| InpPushLookbackHr | 24 | Lookback window in hours. The filter compares current price to the lowest H1 low within this window. |
18Settings: Display & Visuals
Display
| Input | Default | What it does |
| InpShowPanel | true | Show the on-chart status panel. |
| InpShiftChartColors | true | Apply the EA's color theme to the chart background, candles, and grid. Restored when the EA is removed. |
Visual Lines
| Input | Default | What it does |
| InpShowTPLines | false | Draw an individual TP line for every open position. |
| InpTPLineColor | Cyan | Color of per-position TP lines. |
| InpTPLineStyle | Solid | Style of per-position TP lines. |
| InpShowGridTPLine | true | Draw the cycle-wide take-profit price line where the basket would close. |
| InpGridTPColor | Gold | Color of the cycle TP line. |
| InpShowNextGrid | true | Draw the price levels where the next grid additions will trigger. |
| InpNextGridColor | Dodger Blue | Color of the next-grid lines. |
| InpNextGridStyle | Dash | Style of the next-grid lines. |
19The On-Chart Control Panel
When InpShowPanel is enabled, a status panel is drawn in the upper-left of the chart and updates in real time as the EA operates.
Header
Shows the EA name and tagline. The colored top stripe indicates the EA is loaded and the chart theme is applied.
Grid
- Stage — Current cycle stage: GRID, HEDGE, or DEPOSIT.
- Direction — Current trade direction (BUY, SELL, or NONE if flat).
- Status — Live state: Active, Trending, In Trade, Adding, Cooldown, Slippage, Confirm, etc.
- Positions — Current open positions / maximum allowed.
- Grid Dir — Direction the grid is adding (Both or Below only).
- Total Lots — Combined lot size of all positions in the current cycle.
- Base Lot — The current base lot size used for new entries.
Targets
- Cycle TP — Dollar profit at which the entire cycle will close.
P/L
- Floating — Live unrealised profit/loss of all open positions.
- Drawdown — Current drawdown as a percentage of balance.
- Daily P/L — Realised profit/loss since midnight.
- Total P/L — Realised profit/loss across the entire EA run.
- Cycles Won — Count of completed cycles closed in profit.
Timer
- Status — Whether a grid step timer is currently running.
- Countdown — Time remaining on the active step before its hard close.
Decay
- Time Decay — State of the time-decay TP feature (Waiting, Active, etc.).
- DD Bounce — Whether the DD recovery close is armed and waiting.
- Fri Close — Friday close status: ON / OFF / hours remaining until cutoff.
Buttons
If the broker's contract size differs from the 1000-barrel reference, a red warning banner appears in the top-right of the chart explaining the mismatch and recommending you adjust your risk settings or contact the developer.
Risk disclaimer: Past performance does not guarantee future results. Trading carries the risk of loss. Only trade with capital you can afford to lose. Backtest performance is influenced by broker spread, swap, commission, and contract specifications, and may differ from live trading.