Edge Matrix Validator is live! · Start your 7-day free trial — use code EDGEMATRIX25 for 25% off Try it now →

I have been trading the same EA on EURUSD for nearly two years. The backtest shows a 1.42 profit factor across 487 trades, a 61% win rate, a maximum drawdown of 8.3%. Live performance has roughly tracked the backtest. The strategy is profitable enough to keep running. I have never had a strong reason to dig deeper into where the profits and losses are actually coming from. The aggregate numbers were acceptable. I left it alone.

Last week I uploaded the backtest report to the Insights tab in Edge Matrix — the validation platform I have been building for the past several months. I was testing the feature on a real strategy, expecting maybe one or two minor findings. I am the developer of this tool. I know how the Insights detection works. I assumed my own EA, which I built with intention and have been monitoring for two years, would not have meaningful hidden patterns.

The analysis returned three findings. The combined financial impact was $2,247 across the backtest period — money I had been bleeding to specific patterns I never noticed because the aggregate statistics looked fine. This article walks through exactly what the analysis found, the math behind each finding, and the MQL5 code that filters each pattern out. It is the most honest piece of content I have ever published about my own trading.

The Backtest I Started With

The strategy is a mean-reversion EA on EURUSD H1. It opens trades after specific overextension signals and closes them on reversion to a moving average or at a fixed take profit. There is a stop loss. There is no martingale logic. The lot sizing is fixed at 0.10 standard lots. Nothing about the strategy is structurally unusual.

The backtest covers January 2020 through March 2024. 487 trades total. 297 winners (61.0% win rate), 190 losers. Total net profit $8,672 starting from a $10,000 account. Average win $87. Average loss $58. Maximum drawdown $832 representing 8.3% of starting capital. Profit factor 1.42.

By every standard metric, this is a clean retail EA backtest. Nothing in the aggregate statistics suggests a problem. I have shown variants of this same backtest to friends as an example of a “reasonably honest” EA — not spectacular, not obviously broken, the kind of strategy that experienced traders would consider plausible.

Then I ran the trade log through the Insights tab.

Finding #1: A 4-Hour Session Window That Was Costing Me $1,091

The first finding was the largest by dollar impact. The Insights tab identified that trades opened between 13:00 and 17:00 UTC — a 4-hour window that includes the New York morning session and the London close — had a net loss of $1,091 across 47 trades during the backtest period. The profit factor during that specific window was 0.71. Outside that window, the profit factor was 1.78.

The aggregate profit factor of 1.42 was hiding two different strategies. One that worked well most of the time, and one that lost money during a specific four-hour window. The blended average looked acceptable. The disaggregated picture was completely different.

The mechanistic explanation became obvious as soon as I saw the finding. My mean-reversion strategy depends on relative calm and predictable price behavior. The 13:00-17:00 UTC window is exactly when the London-New York session overlap produces the highest volatility and the most directional moves of the trading day. A strategy designed to fade overextensions in calm conditions is exactly the wrong strategy to be running during the most volatile session overlap of the day. My EA was systematically opening trades when the market was least suited to its logic and getting stopped out at higher rates than during the calmer Asian and London-only hours.

I should have noticed this years ago. I did not, because I never thought to disaggregate by session. The aggregate statistics never pointed at the problem. The drawdown chart showed the periodic losses but did not flag them as occurring at consistent times of day.

The Insights tab generated this MQL5 filter code:

// Edge Matrix Insights — exclude 13:00–17:00 UTC window (-$1,091 across 47 trades)
// Net loss period: NY morning + London close volatility overlap
int hour = TimeHour(TimeGMT());
if (hour >= 13 && hour < 17) return; // Session filter applied

Five lines of code that, if I had implemented them two years ago, would have removed $1,091 of losses from my live trading record. I am not sure how to feel about that number. Annoyed at myself, mostly. The strategy was making me money in aggregate, so I never investigated. The session pattern was sitting in the data the entire time.

Finding #2: Friday Trades Were Quietly Bleeding $743

The second finding was day-of-week based. Friday trades had a net loss of $743 across 91 trades. Monday through Thursday combined had a profit factor of 1.68. Friday alone had a profit factor of 0.84.

This one I think I should have seen too. There is a well-documented end-of-week dynamic in forex markets where spreads widen, liquidity thins as traders close positions for the weekend, and price action becomes less predictable. A mean-reversion strategy that depends on tight spreads and orderly price discovery is structurally disadvantaged on Friday afternoons. My EA was happily trading Fridays as if they were any other day. The market was not happily reverting on schedule.

The Friday loss pattern was less dramatic than the session window finding — $743 versus $1,091 — but the relative impact was actually larger because it occurred across more trades. The session filter affects 47 trades. The day filter affects 91 trades. Adding a Friday filter would remove a meaningful portion of trade activity from the strategy, which means the remaining trades had to be carrying disproportionately more of the total profit. The cleaner Monday-Thursday strategy had a profit factor of 1.68 versus the full strategy’s 1.42 — a 18% improvement in profit factor from one filter line.

The generated code:

// Edge Matrix Insights — exclude Friday trades (-$743 across 91 trades)
// End-of-week spread widening and liquidity thinning hostile to mean reversion
if (DayOfWeek() == 5) return; // Friday filter applied

Finding #3: Long-Held Trades Were the Worst Performers

The third finding was holding-time based. Trades held for more than 6 hours had a net loss of $413 across 38 trades. Trades held for under 6 hours had a profit factor of 1.61. Trades held longer had a profit factor of 0.78.

This was the finding I found most embarrassing because it points at a specific behavioral pattern that I have written articles about — hope-and-hold. My mean-reversion strategy was supposed to close trades when price reverted to the moving average or hit the take profit. Most successful trades did this within a few hours. The longer-held trades were almost entirely trades that did not revert quickly and that I was effectively holding hoping for eventual recovery. Sometimes the recovery came. Often it did not. The trades that did not recover quickly were not just slower wins — they were systematic losses.

This is the classic exit discipline failure I have explained at length in other articles. The strategy was effectively running without a functional time-based exit. The fixed stop loss eventually closed the worst-held positions, but the average outcome of trades held longer than 6 hours was negative. A time-based exit at 6 hours would have cut those trades earlier and reduced the cumulative loss.

The generated code:

// Edge Matrix Insights — exit trades held longer than 6 hours (-$413 across 38 trades)
// Long-held positions are systematic losers — exit discipline fix
if (PositionGetInteger(POSITION_TIME) > 0 && (TimeCurrent() – PositionGetInteger(POSITION_TIME)) > 21600) {
trade.PositionClose(PositionGetInteger(POSITION_TICKET));
}

The Combined Impact: $2,247 Out of $8,672 in Profit

The three findings together represent $2,247 of losses across the backtest period. Total backtest profit was $8,672. The losses I could have avoided through the three filters represent 26% of total profit — money I made on the good trades and then handed back to the bad windows, the bad days, and the held positions that did not revert.

If I had implemented these three filters two years ago, the historical profit would have been roughly $10,919 instead of $8,672. That is a 26% improvement in profitability from three filters that take less than 20 lines of code combined. The strategy did not need to be redesigned. The entry logic did not need to change. The take profit and stop loss did not need to move. The strategy needed three exclusion rules covering one session window, one weekday, and one holding time.

This is the gap between aggregate statistics and operational performance. The aggregate profit factor of 1.42 was real — that is what the strategy delivered. But the strategy was delivering 1.78 in some conditions and 0.71 in others, and the 1.42 was the blended average across both. The Insights tab disaggregated the average into its underlying components and made visible the specific conditions where the strategy was losing money systematically. Each finding came with a dollar quantification and ready-to-paste code that implements the fix.

What I Should Have Done Differently

I want to be honest about the lesson here, because the lesson is not “Edge Matrix found problems in my EA.” The lesson is that I had access to the same trade data the entire time and never disaggregated it. The information was in the backtest report. It was sitting in the trade log. I just never asked the question.

The reason I never asked is that the aggregate statistics looked acceptable. A 1.42 profit factor with a 61% win rate and an 8.3% maximum drawdown does not feel like a strategy that has hidden patterns worth investigating. The numbers are not exciting, but they are not concerning. There is no obvious signal that says “look closer.” So I did not look closer. For two years.

The trap of acceptable aggregate statistics is that they discourage investigation. A backtest that looks broken at the aggregate level prompts immediate diagnostic work. A backtest that looks fine at the aggregate level invites complacency. The strategies most worth investigating with disaggregated analysis are often the strategies that look fine in aggregate, because the patterns are hidden by the blend rather than visible in the overall result.

The reason I built the Insights tab — the reason I am writing this article instead of quietly applying the filters and saying nothing — is that I am not the only person with an acceptable-looking EA that has hidden patterns. The aggregate-statistics complacency trap is the default state of retail EA development. Most retail EAs have specific time windows, days, holding ranges, or symbols where they bleed money systematically while the aggregate hides it. The trader sees the acceptable profit factor and moves on. The hidden losses accumulate in the background. The strategy underperforms its potential by 15-30% indefinitely.

The fix is not a better strategy. The fix is three lines of code that exclude the conditions where the strategy was structurally incapable of profitability. The strategy was already good. It was being dragged down by trying to operate in conditions where it should never have been operating.

Will Adding These Filters Improve My Live Performance?

I do not know. I cannot know. The patterns in the historical data may persist or may not. Market conditions change. Sessions evolve. The Friday-spread dynamic that hurt my strategy from 2020 to 2024 may not persist in 2025 and beyond. The 13:00-17:00 UTC volatility profile depends on macroeconomic conditions that shift over time. The 6-hour holding time threshold may need to be adjusted if the strategy’s underlying behavior changes.

What I can say is that the patterns were strong, consistent, and statistically meaningful within the backtest period. The session window had a 47-trade sample with a profit factor of 0.71 against an overall 1.42 — that is a meaningful divergence, not random noise. The Friday pattern had 91 trades with a profit factor of 0.84. The holding time pattern had 38 trades with a profit factor of 0.78. The samples are large enough and the divergences are extreme enough that the patterns are unlikely to be statistical artifacts of the specific historical period.

I have added all three filters to the live strategy as of last week. I will report back in three months with the actual live results. If the filters help, the next article will say so. If they do not, that article will say so too. Either way, the data will be specific and quantified. That is the value of this kind of analysis — not certainty about the future, but specific, falsifiable predictions that can be checked against live results.

The Reason I Am Publishing This

I built the Insights tab because I knew this kind of pattern existed in retail EAs in general. I did not realize how extensively it existed in my own EA. The honest answer is that I built the feature primarily for other traders and was somewhat surprised when it returned three substantive findings on a strategy I had been monitoring for two years.

If your backtest looks acceptable in aggregate, run it through the Insights analysis anyway. The patterns you have not looked for are probably there. The disaggregated view of trade data is a kind of validation that almost no retail trader performs systematically, not because they do not want to but because the manual work to do it across multiple dimensions simultaneously is genuinely tedious. The Insights tab does it automatically and quantifies the findings in dollars.

My own EA is now $2,247 better in historical performance than it was last week. The live results will tell me whether that historical improvement translates to forward performance. I will publish the answer either way.

Edge Matrix is at ergodiclabs.co. The Insights tab is part of the full validation suite and runs on any MT4, MT5, or cTrader backtest report. A 7-day free trial covers full access. The free Backtest Graph Rebuilder runs Monte Carlo analysis with no account required.

Tags: , , , ,

Risk Disclosure

Edge Matrix is a statistical analysis tool. It evaluates historical backtest data using quantitative methods but does not predict future performance or provide investment advice. Edge Matrix does not recommend whether to deploy, modify, or discontinue any trading strategy. All trading involves substantial risk, including the risk of loss. Past performance, whether analyzed or validated, is not indicative of future results. Users are solely responsible for their trading and investment decisions.

Trading foreign exchange carries a high level of risk that may not be suitable for all investors. Past performance is not indicative of future results. The high degree of leverage can work against you as well as for you.