Skip to main content

📋 Pending Orders

Pending Order Expiry System

BananaEA includes a 5-method expiry system for pending orders so orders do not remain open indefinitely in changing market conditions.


Overview: Pending Order Lifecycle

What are pending orders?

  • Orders placed in advance at specific price levels
  • Executed automatically when price reaches entry level
  • Risk: Market conditions may change before execution
  • Solution: Automatic expiry/cancellation based on multiple criteria

BananaEA's expiry methods:

  1. Bar Count Expiry — Cancel after X bars (default, time-based)
  2. Opposite Signal Expiry — Cancel on reverse signal (smart, pattern-based)
  3. EMA Crossover Expiry — Cancel on trend change (MA-based)
  4. Session Close Expiry — Cancel at specific hour (session-based)
  5. Combined Methods — Use multiple methods simultaneously

UseCancelAfterBars - Enable Bar Count Expiry

What it does: Automatically cancels pending orders after specified number of bars.

Configuration:

  • Default: true (enabled)
  • Purpose: Prevents stale orders from old signals
  • Best for: All trading styles (universal solution)

CancelAfterBars - Expiry Bar Count

What it does: Number of bars before pending order is cancelled.

Configuration:

  • Default: 5 bars
  • Range: 1–50 bars
  • Calculation: Starts counting from order placement bar

How it works:

M5 Chart Example:
CancelAfterBars = 5

Signal at 10:00 → Pending order placed
10:05 (1 bar) → Order still active
10:10 (2 bars) → Order still active
10:15 (3 bars) → Order still active
10:20 (4 bars) → Order still active
10:25 (5 bars) → Order CANCELLED (expired)

Timeframe-specific recommendations:

TimeframeRecommended BarsTime DurationUse Case
M110-15 bars10-15 minutesScalping (tight expiry)
M55-10 bars25-50 minutesDay trading (default)
M153-6 bars45-90 minutesIntraday swing
M302-4 bars1-2 hoursSession trading
H12-3 bars2-3 hoursMulti-session
H41-2 bars4-8 hoursSwing trading
D11-2 bars1-2 daysPosition trading

Advantages:

  • ✅ Simple and predictable
  • ✅ Works on all symbols/timeframes
  • ✅ Prevents order buildup
  • ✅ Time-based risk management

Disadvantages:

  • ❌ Doesn't consider market conditions
  • ❌ Fixed time may be too short/long
  • ❌ Ignores price action changes

Best practices:

  • Conservative: 3-5 bars (standard, prevents stale orders)
  • Balanced: 5-10 bars (default, allows time for entry)
  • Aggressive: 10-20 bars (patient, waits for better fills)

Method 2: Opposite Signal Expiry (Smart - Pattern-Based)

CancelOnOppositeSignal - Opposite Signal Cancellation

What it does: Cancels pending BUY orders when SELL signal appears (and vice versa).

Configuration:

  • Default: true (enabled, highly recommended)
  • Logic: Market reversal invalidates old entry
  • Best for: Pattern-based trading, trend following

How it works:

10:00 → BUY signal detected → Pending BUY order placed
10:05 → No activity
10:10 → SELL signal detected → Pending BUY order CANCELLED
(Market reversed, BUY entry no longer valid)

Real-world example:

DAX M5:
09:00 → Bu1 (BananaBuy #1) signal → Pending BUY at 18,520
09:15 → Price hasn't reached 18,520 yet (order still pending)
09:20 → Be1 (BananaSell #1) signal appears (market reversed)
→ Pending BUY order CANCELLED immediately
→ EA can place new SELL order if conditions met

Advantages:

  • ✅ Smart pattern-based cancellation
  • ✅ Adapts to market reversals
  • ✅ Prevents counter-trend entries
  • ✅ Allows fresh signals to take priority

Disadvantages:

  • ❌ May cancel good entries during choppy markets
  • ❌ Requires valid opposite signals

Best for:

  • Pattern traders (BananaEA optimized strategies)
  • Trend following systems
  • Low-volatility markets (clear directional moves)

⚠️ Recommended: Keep enabled (true) for most strategies


Method 3: EMA Crossover Expiry (Trend-Based)

CancelOnEMACrossover - MA Crossover Cancellation

What it does: Cancels pending orders when EMA crossover indicates trend change.

Configuration:

  • Default: false (disabled)
  • Purpose: Cancel orders when trend shifts
  • Best for: MA-based strategies, trend followers

How it works:

Uses Filter_EMA_Fast (9) and Filter_EMA_Slow (21) crossover:

BUY order pending:
- Fast EMA crosses BELOW Slow EMA → Trend turned bearish
- Pending BUY order CANCELLED

SELL order pending:
- Fast EMA crosses ABOVE Slow EMA → Trend turned bullish
- Pending SELL order CANCELLED

Integration with EMA filter:

Signal Configuration:
UseFilter_EMA = true
Filter_EMA_Fast = 9
Filter_EMA_Slow = 21

CancelOnEMACrossover = true

Result:
- Only trade with EMA trend
- Cancel orders when trend reverses
- structured MA-based risk management

Advantages:

  • ✅ Trend-aware cancellation
  • ✅ Works with existing EMA filter
  • ✅ Reduces counter-trend entries
  • ✅ structured MA-based approach

Disadvantages:

  • ❌ Requires EMA filter enabled
  • ❌ May cancel too early in ranging markets
  • ❌ Lag from MA calculation

Best for:

  • MA-based strategies
  • Trend following systems
  • Medium-to-long-term trading (H1+)

When to enable:

  • Using UseFilter_EMA = true in signal configuration
  • Trading trending markets (Forex majors, indices)
  • Want strict trend alignment

When to disable (default):

  • Not using EMA filters
  • Trading ranging/choppy markets
  • Pattern-based strategies without MA dependency

Method 4: Session Close Expiry (Time-Based)

CancelPendingsAtSessionClose - Session-Based Cancellation

What it does: Cancels all pending orders at specific hour each day.

Configuration:

  • Default: false (disabled)
  • Purpose: Clean slate at session transitions
  • Best for: Session-specific trading, daily reset

PendingCancelHour - Daily Cancellation Hour

What it does: Hour (0-23) when all pending orders are cancelled.

Configuration:

  • Default: 20 (8:00 PM server time)
  • Range: 0–23 (24-hour format)
  • Timezone: Broker server time (usually GMT/UTC+2/UTC+3)

How it works:

CancelPendingsAtSessionClose = true
PendingCancelHour = 20 (8:00 PM)

Throughout the day:
- Multiple pending orders may accumulate
- Market conditions change

At 8:00 PM server time:
- ALL pending orders cancelled
- Clean slate for next session
- Fresh signals only

Session-specific configurations:

Trading StyleCancel HourReasoning
European Session16-17End of London session
US Session20-21End of New York session
Asian Session8-9End of Tokyo/Sydney session
Multi-Session23-0Daily reset at midnight
DAX Trading17DAX closes at 5:30 PM (clear by 5)
Forex 24h23End of trading day

Real-world example:

DAX M5 Trading:
CancelPendingsAtSessionClose = true
PendingCancelHour = 17 (5:00 PM)

Scenario:
10:00 → Pending BUY order placed
15:00 → Pending SELL order placed
17:00 → Both orders CANCELLED (DAX session over)
18:00 → Fresh start for next trading day

Advantages:

  • ✅ Clean daily reset
  • ✅ Prevents overnight pending orders
  • ✅ Session-specific risk management
  • ✅ No stale orders accumulation

Disadvantages:

  • ❌ Cancels potentially good entries
  • ❌ Requires correct broker timezone knowledge
  • ❌ May not suit 24-hour strategies

Best for:

  • Session traders (European/US/Asian specific)
  • Index trading (DAX, NAS100 with specific hours)
  • Prop firm challenges (daily reset)
  • Conservative risk management

When to enable:

  • Trading specific sessions only
  • Don't want overnight pending orders
  • Prop firm rules require daily closure

When to disable (default):

  • 24-hour Forex trading
  • Multi-session strategies
  • Using other expiry methods

Combined Methods Strategy

Using Multiple Expiry Methods Together

BananaEA allows combining all 5 methods for comprehensive pending order management:

Conservative approach (recommended):

UseCancelAfterBars = true
CancelAfterBars = 5 // 5 bars maximum age

CancelOnOppositeSignal = true // Cancel on reversal

CancelOnEMACrossover = false // Not using MA filter
CancelPendingsAtSessionClose = false // 24-hour trading

Result:
- Orders expire after 5 bars OR
- Orders cancelled on opposite signal (whichever comes first)
- Smart time-based + pattern-based protection

Aggressive MA-based approach:

UseCancelAfterBars = true
CancelAfterBars = 10 // Longer patience

CancelOnOppositeSignal = true // Cancel on reversal
CancelOnEMACrossover = true // Cancel on MA cross

CancelPendingsAtSessionClose = false

Result:
- Orders expire after 10 bars OR
- Opposite signal OR
- EMA crossover (whichever comes first)
- Triple-layer protection

Session-specific approach:

UseCancelAfterBars = true
CancelAfterBars = 8

CancelOnOppositeSignal = true
CancelOnEMACrossover = false

CancelPendingsAtSessionClose = true
PendingCancelHour = 17 // End of session

Result:
- Orders expire after 8 bars OR
- Opposite signal OR
- 5:00 PM session close (whichever comes first)
- Perfect for DAX/index session trading

Best Practices

Choosing Expiry Settings

For scalping (M1-M5):

UseCancelAfterBars = true
CancelAfterBars = 5-10 // Quick expiry
CancelOnOppositeSignal = true // Pattern-based
CancelOnEMACrossover = false // Too much lag
CancelPendingsAtSessionClose = false

For day trading (M15-H1):

UseCancelAfterBars = true
CancelAfterBars = 3-6 // Medium expiry
CancelOnOppositeSignal = true
CancelOnEMACrossover = true // If using MA filter
CancelPendingsAtSessionClose = false

For swing trading (H4-D1):

UseCancelAfterBars = true
CancelAfterBars = 2-3 // Longer valid time
CancelOnOppositeSignal = true
CancelOnEMACrossover = true
CancelPendingsAtSessionClose = false

For session-specific trading:

UseCancelAfterBars = true
CancelAfterBars = 5
CancelOnOppositeSignal = true
CancelOnEMACrossover = false
CancelPendingsAtSessionClose = true
PendingCancelHour = 17 // Session end

Troubleshooting

Issue: Orders Cancel Too Quickly

Check:

  1. CancelAfterBars too low
    • Solution: Increase to 8-10 bars
    • Test: Monitor how long signals remain valid
  2. CancelOnOppositeSignal too sensitive
    • Solution: Review signal quality (choppy markets?)
    • Consider: Disable in ranging markets
  3. CancelOnEMACrossover triggers frequently
    • Solution: Use slower MA periods
    • Or disable if not MA-based strategy

Issue: Too Many Pending Orders Accumulate

Check:

  1. CancelAfterBars too high
    • Solution: Reduce to 5-7 bars
    • Risk: Old signals remain active too long
  2. No expiry methods enabled
    • Solution: Enable UseCancelAfterBars = true
    • Minimum: Use bar count expiry
  3. Session close not configured
    • Solution: Enable CancelPendingsAtSessionClose
    • Set appropriate PendingCancelHour

Issue: Good Entries Being Cancelled

Check:

  1. Multiple expiry methods conflicting
    • Solution: Disable least important method
    • Keep: Bar count + Opposite signal (minimum)
  2. CancelAfterBars too aggressive
    • Solution: Increase bar count
    • Allow: More time for price to reach entry
  3. EMA crossover too quick
    • Solution: Disable CancelOnEMACrossover
    • Or use longer MA periods


Quick Reference

Pending Order Expiry Parameters

ParameterDefaultPurpose
UseCancelAfterBarstrueEnable bar count expiry
CancelAfterBars5 barsNumber of bars before cancellation
CancelOnOppositeSignaltrueCancel on reverse signal
CancelOnEMACrossoverfalseCancel on MA trend change
CancelPendingsAtSessionClosefalseCancel at specific hour
PendingCancelHour20Hour for daily cancellation (0-23)
// Conservative pending order management (BananaEA default)
UseCancelAfterBars = true
CancelAfterBars = 5 // 5 bars expiry (M5 = 25 minutes)

CancelOnOppositeSignal = true // Smart pattern-based cancellation

CancelOnEMACrossover = false // Disabled (not using MA filter)

CancelPendingsAtSessionClose = false // Disabled (24-hour trading)
PendingCancelHour = 20 // Not used (session close disabled)

Result:
- Pending orders cancelled after 5 bars OR on opposite signal
- Simple, effective, works for most strategies
- Prevents stale orders without over-cancellation

💡 Download optimized pending order settings: https://my.itradeaims.net/latest-optimization-sets/