📡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:
Complete Settings Guide →
Last updated