In 7.8 years of retail FX data, none of the rules I tested had a positive net expectancy after spreads.

I've spent several years writing MQL4 indicators and EAs for FX. Recently I stopped tuning and tested properly: 20 instruments, 7.8 years of M1 data, realistic retail spreads subtracted, rules written down before running them, and judged on data I hadn't used to design them.

I tested my own pullback system plus about a dozen other ideas: London breakout, Bollinger fades, volatility squeezes, RSI(2), momentum, carry, moving-average combinations on four timeframes, even S&P 500 moves as a signal for risk currencies.

Before spreads, almost everything sat near zero. After spreads, nothing was positive. Short-horizon rules suffered most, since the spread is roughly 10% of an average H1 candle.

I'm not claiming nobody can make money in FX. Banks and market makers clearly do. My question is about individuals:
Do you actually believe a retail trader can make stable profits in FX? If so, what is the source of the edge, and what is your evidence beyond a backtest, for example a multi-year, broker-verified live record?
I'm also curious which flaws you would pick in my approach, and what costs you assume if you trade systematically.
(Not investment advice, just my own experience. I did the analysis together with an AI assistant; the questions and conclusions are mine.)
I didn't see martingale in your statement 
You just mention M1 data. Using only one timeframe (especially that one) to provide your entry signal obviously won't be profitable. All timeframes under H1 are victim to institutional liquidity sweeps and other forms of price manipulation. Clearly you might be a developer and not experienced as a trader. There are systems that are profitable, but you close your eyes to them if you only focus on trade entries based on one minute-based timeframe. A big rookie mistake I also see people making is using the current (unclosed) bar for signals in automation. That bar hasn't even closed yet, and can give conflicting signals several times based on tick activity inside it