EA Enhancement Fails: "Level Importance" Couldn't Boost BreakoutLong!

Mean reversion · 6 min

## What's the idea?

A beginner-friendly summary of the verification: “EA Enhancement Fails: “Level Importance” Couldn’t Boost BreakoutLong!”.

Breakout entry example (XAUUSD daily, real data): buy when price breaks above the recent high.

Breakout entry example (XAUUSD daily, real data): buy when price breaks above the recent high.

What’s the idea?

Alright, let’s dive into another experiment with our Expert Advisors (EAs). This time, the goal was to improve our “BreakoutLong” strategy, an EA that aims to profit when prices break above a significant resistance level. The idea was to make it smarter by only taking “real” breakouts, not just any little wiggle above a line. We had previously developed a “level importance” scoring system (levels.py) that assigns a score to horizontal support and resistance levels based on how strong or significant they are. This system worked wonders for our yosuga EA, which is a pullback strategy (meaning it buys when price dips to strong support). So, the thinking was: if it works for pullbacks, maybe it can also filter breakouts? The hypothesis was simple: if we only allow the BreakoutLong EA to trade when it breaks through a highly important horizontal level, we could filter out the “noisy small breakouts” that often lead to losses. Our hope was to reduce the correlated drawdown (DD) – that painful period when multiple strategies lose money at the same time – which had hit about -38% in a previous study (Research 85). We wanted to make breakouts more robust by focusing on higher-quality entries.

How I tested it

To test this, I implemented a new parameter called min_level_score. This simply meant that the BreakoutLong EA would only take a trade if the price broke out from a horizontal level that had an importance score equal to or greater than this min_level_score threshold. If you set it to None, it would behave like the traditional, unfiltered BreakoutLong EA, ensuring backward compatibility. I put this new filter through its paces with several tests:

  • Basket Drawdown (DD): I looked at how this filter affected the overall drawdown when BreakoutLong was running as part of a larger portfolio of EAs. I specifically tested thresholds of lvl >= 10 and lvl >= 15 for level importance.
  • Forward Validation: This is crucial for checking if a strategy performs well on new, unseen data. I compared the filtered versions against the plain (unfiltered) BreakoutLong to see if they showed consistent improvement.
  • Parameter Robustness: I explored various combinations of min_level_score thresholds and level_atr (which likely relates to the strength or volatility around the level) to see if the improvement was consistent across different settings.
  • M1 Timeframe: A specific test on the 1-minute chart to see if the filter had any particular impact on very short-term trading.

What happened?

Spoiler alert: it didn’t work. In fact, it made things worse!

Basket Drawdown Worsened

Instead of improving the overall drawdown, applying the level importance filter actually increased it. The basket drawdown for lvl >= 10/15 didn’t get better; it actually worsened from -36.5% to -40.9%. Ouch! Not only that, but the “efficiency” of the strategy, which we can think of as its Profit Factor (PF = Gross Profit / Gross Loss; a PF > 1 means profitable), also consistently declined. The original plain strategy had an efficiency of 10.98. With lvl >= 10, it dropped to 6.53, and with lvl >= 15, it fell further to 5.53. In other words, for every dollar lost, the unfiltered strategy made nearly $11, while the “improved” versions made only $6.50 or $5.50. Clearly, this filter was cutting out more good trades than bad.

No Improvement in Forward Validation

When tested on fresh data, the filtered versions showed no improvement. Both the plain strategy and the filtered lvl versions passed 4 out of 6 validation periods. None of them managed to pass 5 out of 6, meaning the filter didn’t make the strategy more reliable on new data.

Robustly Worse Performance

The parameter robustness tests confirmed the negative trend. Across all tested thresholds for min_level_score combined with level_atr, the efficiency consistently ranged from 2.5 to 7.0. Every single combination was significantly lower than the plain strategy’s 10.98 efficiency. This wasn’t just a fluke; the filter robustly made the strategy worse.

M1 Timeframe Saw Minimal Change

On the 1-minute chart, the lvl >= 10 filter did slightly reduce “collisions” (perhaps instances where the strategy tried to enter but couldn’t due to conditions) from 3 days to just 1 day. However, this minor positive was overshadowed as the drawdown and maximum consecutive losses (MC) actually saw a slight worsening. So, no meaningful improvement there either.

What I learned

This experiment gave us a crucial lesson, especially when contrasted with the success we saw with the yosuga EA: level importance works for “pullbacks” (counter-trend entries) but not for “breakouts.” Think of it this way:

  • For yosuga (a pullback strategy), the logic is “buy at strong support.” The “important level” is the core of the entry logic. It helps identify those genuine bounce points.
  • For BreakoutLong, the logic is “break through resistance.” The strategy inherently relies on price moving beyond a level. When we then add a filter that says, “oh, but it also has to be a highly important level,” we’re essentially over-constraining the strategy. It’s like trying to put a filter on a filter. We end up cutting out perfectly good breakout opportunities just because the level wasn’t deemed “important enough” by our scoring system. This is a similar pattern to why previous attempts to enhance breakouts with Higher Time Frame (HTF) filters (Research 62) or Volume Profile (Research 78) also failed to surpass the original strategy.

The Most Important Implication

The biggest takeaway is this: the correlated drawdown in breakout strategies isn’t primarily an “entry quality problem” that can be fixed with filters. Instead, it’s an inherent characteristic of “trend-following” strategies. This drawdown often occurs during “chop” or “regime decay” – periods when trends weaken, go sideways, or reverse simultaneously across multiple instruments. No amount of entry filtering can fully eliminate this fundamental risk of trend-following. The real solutions for managing drawdown, especially correlated drawdown, lie elsewhere:

  • (a) Low Risk: Keeping the risk per trade small.
  • (b) MTF Diversification: Diversifying across multiple timeframes (e.g., trading the same strategy on M15, H1, H4 charts).
  • (c) Truly Uncorrelated Strategies/Markets: Diversifying with strategies that genuinely don’t move together, perhaps across different asset classes or with completely different logic. This understanding is precisely what informed the design of our Core System v1.2.0. It’s built from the ground up to address these systemic risks, rather than trying to patch them with entry filters. So, in conclusion, using our discretionary “level importance” filter to enhance breakout strategies is simply not a suitable approach. The min_level_score feature will remain in the code for backward compatibility, as it might still prove useful for future pullback-style EAs, but it won’t be applied to BreakoutLong. Our confirmed system remains unchanged.

How this connects

This verification builds on earlier ones (what failed before and what I tried this time, comparisons between approaches).