📡Enhanced Signal Processing

Intelligent Pattern Recognition

BananaEA includes advanced signal processing systems that go beyond basic pattern detection to provide high-quality trading signals with built-in filters and quality scoring.


Multi-Layer Signal Detection

Internal Pattern Recognition

BananaEA includes six proprietary signal patterns optimized through extensive backtesting:

Buy Signals:

  • Bu1 (Buy #1): Primary bullish pattern - 49.7% historical success rate

  • Bu2 (Buy #2): Secondary bullish confirmation

  • Bu3 (Buy #3): Tertiary bullish opportunity

Sell Signals:

  • Be1 (Sell #1): Primary bearish pattern - 50.8% historical success rate

  • Be2 (Sell #2): Secondary bearish confirmation - 52.5% success (BEST)

  • Be3 (Sell #3): Tertiary bearish opportunity

Signal Selection:

Configuration:
UseBu1 = true   // Enable Buy #1 signals
UseBe1 = true   // Enable Sell #1 signals
UseBu2 = true   // Enable Buy #2 signals
UseBe2 = true   // Enable Sell #2 signals
UseBu3 = false  // Disable Buy #3 (lower quality)
UseBe3 = false  // Disable Sell #3 (lower quality)

Recommendation: Enable Bu1, Be1, Bu2, Be2 for optimal balance of frequency and quality


Advanced Filter Systems

EMA Confirmation Filters

Purpose: Ensure signals align with overall trend direction

Implementation:

double ema20 = iMA(Symbol(), StrategyTimeframe, 20, 0, MODE_EMA, PRICE_CLOSE, shift);
double ema50 = iMA(Symbol(), StrategyTimeframe, 50, 0, MODE_EMA, PRICE_CLOSE, shift);

// Bullish confirmation: Price above both EMAs
bool bullishTrend = (Close[shift] > ema20 && Close[shift] > ema50);

// Bearish confirmation: Price below both EMAs
bool bearishTrend = (Close[shift] < ema20 && Close[shift] < ema50);

Configuration:

UseEMAFilter = true     // Enable trend confirmation
EMA_Period_Fast = 20    // Fast EMA period
EMA_Period_Slow = 50    // Slow EMA period

Impact: 15-25% reduction in false signals, 10-15% improvement in win rate


Linear Regression Slope Analysis

Purpose: Validate trend strength and momentum

Calculation:

// Calculate linear regression slope
double slope = CalculateLinearRegressionSlope(lookback_period);

// Bullish: Positive slope above threshold
bool bullishMomentum = (slope > minimum_slope_threshold);

// Bearish: Negative slope below threshold
bool bearishMomentum = (slope < -minimum_slope_threshold);

Configuration:

UseLinearRegression = true
LR_Lookback = 10              // Periods for slope calculation
LR_MinimumSlope = 0.0001      // Minimum slope threshold

Benefit: Filters out ranging/choppy market conditions


Volatility-Based Adjustments

Purpose: Adapt signal criteria based on current market volatility

ATR-Based Volatility Classification:

double atr = iATR(Symbol(), StrategyTimeframe, 14, 0);
double avgATR = CalculateAverageATR(100);  // 100-period average

double volatilityRatio = atr / avgATR;

if(volatilityRatio < 0.7)
    volatility = "LOW";
else if(volatilityRatio < 1.3)
    volatility = "MEDIUM";
else if(volatilityRatio < 2.0)
    volatility = "HIGH";
else
    volatility = "EXTREME";

Signal Adaptation:

Low Volatility:
→ Tighter entry criteria
→ Smaller position sizes
→ Reduced SL/TP distances

High Volatility:
→ Relaxed entry criteria
→ Standard position sizes
→ Wider SL/TP distances

Extreme Volatility:
→ Signal filtering increased
→ Optional: Disable trading
→ Maximum SL/TP distances

Market Regime Detection

Purpose: Identify trending vs ranging market conditions

Implementation:

// Calculate ADX for trend strength
double adx = iADX(Symbol(), StrategyTimeframe, 14, PRICE_CLOSE, MODE_MAIN, 0);

if(adx < 20)
    regime = "RANGING";    // Weak trend, range-bound
else if(adx < 40)
    regime = "TRENDING";   // Moderate trend
else
    regime = "STRONG_TREND";  // Strong directional movement

Signal Adjustment:

Ranging Market (ADX < 20):
→ Prefer mean-reversion signals
→ Tighter profit targets
→ Reduce position sizes

Trending Market (ADX 20-40):
→ Balanced approach
→ Standard risk/reward
→ Normal position sizing

Strong Trend (ADX > 40):
→ Prefer trend-following signals
→ Wider profit targets
→ Larger position sizes

Signal Quality Scoring

Multi-Factor Analysis

BananaEA assigns quality scores to each signal based on multiple confirmation factors:

Scoring Components:

Base Signal Strength: 1.0
+ EMA Confirmation: +0.3
+ Linear Regression Alignment: +0.2
+ Volatility Appropriateness: +0.2
+ Market Regime Match: +0.2
+ Time Session Relevance: +0.2
= Total Signal Score: 1.0 - 2.1

Quality Thresholds:

Score < 1.3: Low Quality (optional: skip)
Score 1.3 - 1.7: Medium Quality (standard execution)
Score > 1.7: High Quality (potential: increase position size)

Configuration:

MinSignalStrength = 1.5  // Minimum required score

Example:

Signal Detection:
Bu1 pattern detected: Base = 1.0
+ Price above EMA20 & EMA50: +0.3
+ Positive linear regression slope: +0.2
+ Volatility = MEDIUM (appropriate): +0.2
+ Market regime = TRENDING: +0.2
+ Time = LONDON_OPEN: +0.2
→ Total Score: 2.1 (HIGH QUALITY) ✅

Historical Performance Weighting

Pattern Success Rate Tracking

From 3,777+ DAX Signal Analysis:

Be2 (Sell #2): 52.5% win rate → Highest priority
Be1 (Sell #1): 50.8% win rate → High priority
Bu1 (Buy #1): 49.7% win rate → Medium-high priority
Bu2, Bu3, Be3: Lower success rates → Lower priority

Configuration Strategy:

// Recommended: Focus on highest performers
UseBe2 = true   // 52.5% win rate
UseBe1 = true   // 50.8% win rate
UseBu1 = true   // 49.7% win rate
UseBu2 = true   // Additional opportunities

// Optional: Disable lower performers
UseBu3 = false
UseBe3 = false

External Indicator Integration

Seamless Custom Indicator Support

BananaEA supports external custom indicators for signal generation:

Configuration:

SignalSourceType = External   // Use external indicator
ExternalIndicatorName = "MyCustomIndicator.ex4"
ExternalBuySignalBuffer = 0   // Buffer index for buy signals
ExternalSellSignalBuffer = 1  // Buffer index for sell signals

Integration Process:

// Read external indicator values
double buySignal = iCustom(Symbol(), StrategyTimeframe, 
                           ExternalIndicatorName, 
                           /* parameters */,
                           ExternalBuySignalBuffer, shift);

double sellSignal = iCustom(Symbol(), StrategyTimeframe,
                            ExternalIndicatorName,
                            /* parameters */,
                            ExternalSellSignalBuffer, shift);

// Process signals
if(buySignal > 0)
    HandleBuySignal();
if(sellSignal > 0)
    HandleSellSignal();

Benefits:

  • Flexibility to use proven custom indicators

  • Easy switching between internal and external signals

  • Performance comparison capabilities

  • Fallback to internal patterns if external fails


Signal Processing Pipeline

Complete Signal Workflow

Step 1: Raw Pattern Detection
→ Check for Bu1/Bu2/Bu3/Be1/Be2/Be3 patterns
→ Identify potential signal candidates

Step 2: Filter Application
→ Apply EMA confirmation filter
→ Apply linear regression filter
→ Apply volatility adjustment filter
→ Apply market regime filter

Step 3: Quality Scoring
→ Calculate multi-factor quality score
→ Compare against MinSignalStrength threshold
→ Classify as Low/Medium/High quality

Step 4: Historical Weighting
→ Apply pattern-specific success rate weighting
→ Prioritize Be2 > Be1 > Bu1 patterns

Step 5: Final Decision
→ If score >= threshold: Execute trade
→ If score < threshold: Skip signal
→ Log decision for performance tracking

Best Practices

1. Start with Proven Patterns

// Recommended initial configuration
UseBu1 = true   // 49.7% success
UseBe1 = true   // 50.8% success
UseBe2 = true   // 52.5% success (BEST)
UseBu2 = true   // Additional opportunities
UseBu3 = false  // Disable lower quality
UseBe3 = false  // Disable lower quality

2. Enable Quality Filters

UseEMAFilter = true          // Trend confirmation
UseLinearRegression = true   // Momentum validation
MinSignalStrength = 1.5      // Require moderate quality minimum

3. Monitor Signal Performance

ShowDebugLogs = true
// Watch for:
// - Signal quality scores
// - Filter pass/fail rates
// - Pattern-specific success rates

4. Adjust Filters Based on Results

// If too many signals (over-trading):
→ Increase MinSignalStrength to 1.7
→ Enable stricter filters
→ Disable lower-quality patterns

// If too few signals (under-trading):
→ Decrease MinSignalStrength to 1.3
→ Relax filter criteria
→ Enable additional patterns

Advanced Configuration Examples

Conservative Signal Processing

// Maximum quality, minimum frequency
UseBu1 = true
UseBe1 = true
UseBe2 = true
UseBu2 = false
UseBu3 = false
UseBe3 = false

UseEMAFilter = true
UseLinearRegression = true
MinSignalStrength = 1.8  // Very high quality only

Balanced Signal Processing

// Good quality, moderate frequency
UseBu1 = true
UseBe1 = true
UseBe2 = true
UseBu2 = true
UseBu3 = false
UseBe3 = false

UseEMAFilter = true
UseLinearRegression = false
MinSignalStrength = 1.5  // Medium-high quality

Aggressive Signal Processing

// All opportunities, lower quality threshold
UseBu1 = true
UseBe1 = true
UseBe2 = true
UseBu2 = true
UseBu3 = true
UseBe3 = true

UseEMAFilter = false
UseLinearRegression = false
MinSignalStrength = 1.2  // Lower quality acceptable

Common Questions

"Which signal patterns should I use?"

Start with the proven trio:

  • Be2 (52.5% win rate) - Best performer

  • Be1 (50.8% win rate) - Solid performer

  • Bu1 (49.7% win rate) - Reliable performer

Add Bu2 for additional opportunities.

"Should I use EMA filters?"

Yes, especially in trending markets:

  • Reduces false signals by 15-25%

  • Improves win rate by 10-15%

  • Minimal impact on signal frequency

"What's a good MinSignalStrength value?"

Standard recommendation:

  • Conservative: 1.7 - 2.0 (highest quality only)

  • Balanced: 1.4 - 1.6 (moderate quality)

  • Aggressive: 1.2 - 1.3 (lower threshold for more signals)


Enhanced Signal Processing is the foundation of BananaEA's trading intelligence, ensuring you only take high-probability setups with proper confirmation and quality validation.

Next:

Last updated