# 📋 Pending Orders

## Pending Order Expiry System[​](#pending-order-expiry-system "Direct link to 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[​](#overview-pending-order-lifecycle "Direct link to 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

***

## Method 1: Bar Count Expiry (Default - Recommended)[​](#method-1-bar-count-expiry-default---recommended "Direct link to Method 1: Bar Count Expiry (Default - Recommended)")

### `UseCancelAfterBars` - Enable Bar Count Expiry[​](#usecancelafterbars---enable-bar-count-expiry "Direct link to 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[​](#cancelafterbars---expiry-bar-count "Direct link to 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:**

| Timeframe | Recommended Bars | Time Duration | Use Case                |
| --------- | ---------------- | ------------- | ----------------------- |
| M1        | 10-15 bars       | 10-15 minutes | Scalping (tight expiry) |
| M5        | 5-10 bars        | 25-50 minutes | Day trading (default)   |
| M15       | 3-6 bars         | 45-90 minutes | Intraday swing          |
| M30       | 2-4 bars         | 1-2 hours     | Session trading         |
| H1        | 2-3 bars         | 2-3 hours     | Multi-session           |
| H4        | 1-2 bars         | 4-8 hours     | Swing trading           |
| D1        | 1-2 bars         | 1-2 days      | Position 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)[​](#method-2-opposite-signal-expiry-smart---pattern-based "Direct link to Method 2: Opposite Signal Expiry (Smart - Pattern-Based)")

### `CancelOnOppositeSignal` - Opposite Signal Cancellation[​](#cancelonoppositesignal---opposite-signal-cancellation "Direct link to 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)[​](#method-3-ema-crossover-expiry-trend-based "Direct link to Method 3: EMA Crossover Expiry (Trend-Based)")

### `CancelOnEMACrossover` - MA Crossover Cancellation[​](#cancelonemacrossover---ma-crossover-cancellation "Direct link to 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)[​](#method-4-session-close-expiry-time-based "Direct link to Method 4: Session Close Expiry (Time-Based)")

### `CancelPendingsAtSessionClose` - Session-Based Cancellation[​](#cancelpendingsatsessionclose---session-based-cancellation "Direct link to 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[​](#pendingcancelhour---daily-cancellation-hour "Direct link to 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 Style        | Cancel Hour | Reasoning                          |
| -------------------- | ----------- | ---------------------------------- |
| **European Session** | 16-17       | End of London session              |
| **US Session**       | 20-21       | End of New York session            |
| **Asian Session**    | 8-9         | End of Tokyo/Sydney session        |
| **Multi-Session**    | 23-0        | Daily reset at midnight            |
| **DAX Trading**      | 17          | DAX closes at 5:30 PM (clear by 5) |
| **Forex 24h**        | 23          | End 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[​](#combined-methods-strategy "Direct link to Combined Methods Strategy")

### Using Multiple Expiry Methods Together[​](#using-multiple-expiry-methods-together "Direct link to 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[​](#best-practices "Direct link to Best Practices")

### Choosing Expiry Settings[​](#choosing-expiry-settings "Direct link to 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[​](#troubleshooting "Direct link to Troubleshooting")

### Issue: Orders Cancel Too Quickly[​](#issue-orders-cancel-too-quickly "Direct link to 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[​](#issue-too-many-pending-orders-accumulate "Direct link to 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[​](#issue-good-entries-being-cancelled "Direct link to 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

***

## Related Settings[​](#related-settings "Direct link to Related Settings")

* [**Signal Configuration**](/banana-ea/mt4/docs/v4/complete-user-guide/settings-guide/signal-configuration.md) — Order entry buffers and signal types
* [**Trading Hours & Filters**](/banana-ea/mt4/docs/v4/complete-user-guide/settings-guide/trading-hours-and-filters.md) — Session filtering and EMA configuration
* [**General Settings**](/banana-ea/mt4/docs/v4/complete-user-guide/settings-guide/general-settings.md) — OrderType (pending vs market orders)

***

## Quick Reference[​](#quick-reference "Direct link to Quick Reference")

### Pending Order Expiry Parameters[​](#pending-order-expiry-parameters "Direct link to Pending Order Expiry Parameters")

| Parameter                      | Default | Purpose                            |
| ------------------------------ | ------- | ---------------------------------- |
| `UseCancelAfterBars`           | true    | Enable bar count expiry            |
| `CancelAfterBars`              | 5 bars  | Number of bars before cancellation |
| `CancelOnOppositeSignal`       | true    | Cancel on reverse signal           |
| `CancelOnEMACrossover`         | false   | Cancel on MA trend change          |
| `CancelPendingsAtSessionClose` | false   | Cancel at specific hour            |
| `PendingCancelHour`            | 20      | Hour for daily cancellation (0-23) |

### Recommended Starter Configuration[​](#recommended-starter-configuration "Direct link to Recommended Starter Configuration")

```
// 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/>
