Algorithmic trading software: criteria for a pass or fail
Most bad algorithmic trading software does not fail in the strategy report. It fails later, on a live account, when the spread widens by 1.2 pips, the VPS drops for three minutes, or the broker fills…
Kevin Palmer·Updated: July 07, 2026·16 min read

Most bad algorithmic trading software does not fail in the strategy report. It fails later, on a live account, when the spread widens by 1.2 pips, the VPS drops for three minutes, or the broker fills a stop order at a price the backtest never had to tolerate.
That is the uncomfortable part of automated trading. A clean equity curve is cheap. Realistic execution is not. When I review algo trading software, I do not start with the vendor’s headline return or a screenshot from MetaTrader. I start with the costs, the assumptions, and the parts of the system that usually sit in the fine print: slippage, commissions, latency, data quality, drawdown behavior, and how the strategy performs outside the exact sample it was tuned on.
Algorithmic trading software deserves a pass only if it survives those checks. Not because it looks intelligent. Not because it says “AI.” Not because the backtest made 400% on EUR/USD between 2016 and 2020. A trading bot is fit for live deployment only when the test environment looks close enough to the market you will actually trade.
The first fail: a perfect backtest with no trading friction
The quickest way to make an Expert Advisor look better is to remove the market from the test.
No slippage. Fixed spread. No commission. No rejected orders. Clean one-minute candles. Instant execution. Then the software prints a smooth equity curve and the seller calls it “institutional grade.”
That is not institutional grade. That is a lab sample.
For forex algorithmic software, trading friction is not a side issue. It is often the difference between a tradable system and a slow leak. This is especially true for scalpers, grid systems, news-sensitive bots, and any strategy that takes a high number of trades with small average profit.
A strategy that targets 3 pips per trade cannot pretend a 1.5-pip spread and 0.5-pip slippage are harmless. That is not a cost assumption. That is the strategy’s oxygen supply.
If the average trade is small, execution cost is not a footnote. It is the model.
When I test algorithmic trading software, I want to see friction applied before I care about the headline result. The basic cost stack should include:
1. Spread assumptions that match the traded session. EUR/USD during London-New York overlap is not the same market as AUD/JPY late Friday. Fixed-spread backtests are usually too kind unless the broker actually provides that pricing structure.
2. Commission where the account charges commission. Raw-spread accounts often look cleaner on entry price but add a per-lot cost. The backtest must reflect it.
3. Slippage on entries and exits. Positive slippage can happen, but I do not give software credit for it unless live execution records support it. For testing, I prefer conservative slippage assumptions.
4. Stop-loss and take-profit execution under stress. A backtest that assumes exact fills at stop levels during sharp moves is not realistic.
5. Swap or financing cost for strategies holding positions overnight. Trend-following systems and carry-sensitive pairs can be distorted if this is ignored.
A pass does not require the software to remain profitable under absurd cost assumptions. It does need to remain coherent under realistic ones. If a strategy collapses after adding normal spread and commission, the original result was not a strategy. It was a pricing fantasy.
Curve-fitting: the quiet killer in algo trading software selection
Curve-fitting is the main reason polished systems fail. The software is optimized so tightly to historical noise that it looks brilliant on one dataset and clumsy everywhere else.
This is common in MetaTrader Expert Advisors. The developer runs hundreds or thousands of parameter combinations, finds the one that made the most money over a chosen historical period, and then presents that version as if it discovered a durable market edge. It may not have. It may have discovered that EUR/USD happened to reverse well from a 37-period moving average with a 22-point stop between March 2018 and November 2021.
That is not an edge I want to fund.
The signs are not subtle once you know where to look:
- The backtest uses oddly precise parameters: 17.3, 43, 91, 0.76, 2.15. Markets are noisy. Overly precise settings often mean the optimizer has been mining the past too aggressively.
- Profit depends on one currency pair and one timeframe, with no explanation for why the logic should apply there.
- A small change in spread, stop size, or entry filter destroys performance.
- Most of the profit comes from a short historical window.
- The equity curve is smooth in-sample and erratic out-of-sample.
- The vendor shows a long optimization report but no independent validation period.
I do not reject optimization. That would be unrealistic. Every automated system needs parameter work. The question is whether the parameters describe a robust behavior or a historical accident.
A simple robustness test is to nudge the inputs. If a moving-average system works with 48 and 52 periods but dies at 50, I assume the “edge” is fragile. If a breakout model works across several nearby lookback windows, across related pairs, and across different volatility regimes, it earns more attention.
MQL4 and MQL5 matter here because many retail systems live inside MetaTrader. MQL4 remains common because MetaTrader 4 still has a large EA ecosystem. MQL5 is more modern and object-oriented, and it is generally the better fit for complex systems that need cleaner architecture, multi-asset logic, or more structured testing. But language alone does not save a bad idea. A fragile strategy in MQL5 is still fragile. It just fails with cleaner syntax.
Backtesting: what I need before I trust the report
A backtest is not proof. It is an interrogation room. The software gets to explain how it behaved under known historical conditions, and I decide whether the answers are consistent.
The minimum standard for automated trading platform evaluation is not “profitable over five years.” That bar is too low. I want to know how the result was produced.
Here is the practical distinction I use.
| Test item | Pass signal | Fail signal |
|---|---|---|
| Trading costs | Spread, commission, swap, and slippage are included in the model | Report uses zero commission, fixed low spread, or no slippage |
| Data quality | Tick or high-quality intraday data is used where strategy frequency requires it | One-minute or open-price modeling is used for scalping or tight stops |
| Sample size | Enough trades to evaluate behavior across regimes | A few lucky trades drive most of the profit |
| Drawdown profile | Drawdowns are visible, explainable, and within pre-set limits | Equity curve hides floating loss or depends on recovery grids |
| Parameter stability | Nearby parameter values produce similar results | One exact setting works and everything around it fails |
| Market coverage | Logic holds across related pairs or regimes where appropriate | Only one cherry-picked pair and period are shown |
| Execution assumptions | Order delays and slippage are stress-tested | Every order fills instantly at the requested price |
The sample size point deserves more attention than it usually gets. A trend strategy may take fewer trades, so I do not demand the same trade count as a scalper. But if a system has 26 trades over eight years and claims a stable edge, I am skeptical. One or two outlier trades can carry the entire report.
I also separate closed-equity drawdown from floating risk. Grid and martingale EAs can look respectable if they avoid closing losing baskets. The report may show steady balance growth while floating equity tells a different story. If the system increases position size into adverse moves, I want to see worst-case exposure, margin usage, and basket duration. A balance curve without equity behavior is not enough.
For strategies that hold trades through macro events, session liquidity matters. A bot trading GBP pairs during London open does not face the same fill environment as one running during thin rollover conditions. Broker access and liquidity windows also shape execution quality; that is why I pay attention to platform rollouts that discuss access to global CFD and forex markets in the context of trading sessions and liquidity, not just instrument count.
The point is simple. A backtest should make the strategy harder to believe, not easier. If it still looks decent after costs, realistic fills, and ugly periods, then it becomes interesting.
Walk-forward analysis: the test most weak systems avoid
Walk-forward analysis is one of the cleaner ways to expose over-optimization.
The idea is straightforward. You optimize the strategy on one segment of historical data, then test it on the next unseen segment. Then you roll forward and repeat. The software is not allowed to keep fitting the same period it is being graded on.
This matters because live trading is always out-of-sample. The market does not care what settings worked best three years ago. It only reveals whether the current logic can adapt without being re-tuned into nonsense.
A basic walk-forward process looks like this:
1. Choose an in-sample window. For example, optimize the strategy on a defined historical period. The length depends on the trading style. A low-frequency trend system may need more data than an intraday mean-reversion bot.
2. Set parameter boundaries before optimization. If the software allows absurd ranges, the optimizer will find absurd answers. Boundaries should reflect the logic of the strategy.
3. Test on the next out-of-sample segment. No parameter changes. No manual filtering after seeing the result.
4. Roll the window forward. Re-optimize on the next in-sample segment and test again on the following unseen period.
5. Review the distribution of results. One strong out-of-sample period is not enough. I want consistency across multiple windows.
The pass signal is not perfection. It is resilience. Some windows can lose money. Some market regimes will not suit the model. But the performance should not disintegrate the moment it leaves the optimized sample.
If the vendor or developer refuses to show out-of-sample results, I treat that as a fail. Not a minor concern. A fail. Retail traders already operate with weaker execution, smaller infrastructure budgets, and less favorable information than professional desks. Buying software that has never survived unseen data makes that gap worse.
A strategy that only works on the period used to tune it is not automated trading. It is historical decoration.
Walk-forward analysis also helps with re-optimization discipline. Many traders keep adjusting EA settings after every losing week. That is usually emotional curve-fitting. A proper walk-forward framework defines when and how parameters are refreshed. Without that, the trader becomes the weakest part of the automated system.
Execution infrastructure: the VPS is not optional, but it is not magic
A VPS will not turn a losing system into a profitable one. It does not improve entries. It does not create edge. It only reduces avoidable execution problems.
That distinction matters. I see too many retail traders treat a forex VPS as a performance upgrade. It is really a reliability tool. For automated trading, especially inside MetaTrader, the platform must stay online, connected, and close enough to the broker’s server to avoid unnecessary delay.
For many automated strategies, a latency target below 10 milliseconds to the broker’s server is a reasonable ideal. Not universal. A four-hour swing system does not need the same latency profile as a scalper. But if the software trades frequently, reacts to price changes, or uses tight stops, poor latency becomes a real cost.
The infrastructure pass/fail test is practical:
- Platform uptime. The terminal must run during market hours without relying on a home laptop, local power, or consumer Wi-Fi.
- Broker server proximity. The VPS location should be near the broker’s trading server, not simply cheap.
- Stable terminal behavior. MetaTrader should not freeze when multiple charts, indicators, or EAs are running.
- Order logging. The software should record order send time, fill time, requested price, filled price, and error codes.
- Restart recovery. If the terminal or VPS reboots, the EA should recognize existing positions and resume safely.
- Version control. Changing EA settings without a record is how traders lose track of what they are actually testing.
This is where automated trading platform requirements become boring but decisive. A bot that runs well for two days on a desktop test tells me very little. I want to know how it behaves through rollover, Monday open, high-impact data releases, and broker reconnects.
Execution speed also interacts with broker model and account type. A strategy designed around raw spreads may not behave the same on a wider-spread commission-free account. A stop-entry breakout system may suffer more from slippage than a limit-order mean-reversion model. The software should let the trader see those differences in logs, not bury them.
If a vendor talks about “fast execution” but cannot show order-level records, I discount the claim. Execution quality is not a slogan. It is timestamps, prices, and rejected-order behavior.
Risk-adjusted metrics: profit alone is a weak standard
A profitable backtest can still be unacceptable. That is why I look at risk-adjusted performance before deciding whether algorithmic trading software gets a pass.
The Sharpe ratio is one common starting point. A Sharpe ratio above 1.0 is often treated as a baseline for acceptable risk-adjusted returns, although the threshold depends heavily on strategy type and data quality. I do not use it alone. Forex returns are not always normally distributed, and grid or martingale systems can show attractive smoothness until they hit a tail event.
Maximum drawdown is more concrete for most retail traders. The number itself is personal. A trader running conservative capital may reject anything above 15%. Another may tolerate 20% if the strategy is diversified and the recovery profile is strong. I avoid universal pass/fail cutoffs because they become fake precision. What matters is that the drawdown limit is defined before testing, not after seeing the report.
Win rate is another trap. A 78% win rate sounds good until the average loss is five times the average win. A 38% win rate can be fine if winners are large and losses are controlled. The real measure is expectancy: how much the system expects to make or lose per trade after costs.
For a practical review, I want these metrics together:
| Metric | What it tells me | Common retail trap |
|---|---|---|
| Net profit | Whether the system made money after costs | Treated as the only metric |
| Maximum drawdown | Worst peak-to-trough damage in the test | Ignored if the final profit is high |
| Sharpe ratio | Return relative to volatility | Used without checking tail risk |
| Profit factor | Gross profit versus gross loss | Inflated by small sample size |
| Expectancy | Average expected value per trade | Hidden behind high win rate |
| Average win/loss | Balance between winners and losers | Win rate is marketed alone |
| Trade duration | Exposure profile and swap sensitivity | Overnight risk not priced |
| Consecutive losses | Psychological and capital stress | Underestimated in live use |
I also look for regime dependence. Did the bot make money only during a strong dollar trend. Did it survive range-bound conditions. Did it lose heavily during volatility spikes. A system does not need to perform equally in every regime, but the trader must know when it is likely to degrade.
This is where many “AI-driven” systems become vague. They promise adaptation but do not show what changed, when it changed, or how the model avoided overfitting. I am not against machine learning in forex. I am against black-box claims sold to retail traders with no audit trail. If the model cannot explain its inputs, retraining schedule, risk limits, and live drift controls, I will not treat the label as an advantage.
Code integrity and operational control
The trading logic is only part of the software. The operational layer can still fail.
With MQL4 and MQL5 Expert Advisors, I prefer systems where the trader can inspect enough of the behavior to understand risk. Full source code is not always available commercially, but the software should not be a sealed box that can change exposure without clear settings.
The basic controls I look for are simple:
1. Hard position limits. Maximum lots, maximum open trades, maximum exposure per pair, and maximum total exposure should be configurable.
2. Equity protection. The software should be able to stop trading or close risk when account equity breaches a defined level. This must be handled carefully, but no protection at all is worse.
3. Session filters. If the strategy is sensitive to spreads or liquidity, it should avoid rollover and unsuitable sessions.
4. News filters where relevant. Not every strategy needs one. But bots using tight stops can be badly exposed around major releases.
5. Detailed logs. The EA should explain what it did and why. Silent decisions are expensive in live trading.
6. No hidden lot multipliers. Any martingale, grid, averaging, or recovery logic must be explicit. If position size increases after losses, I want that stated plainly.
7. Safe handling of manual intervention. If the trader closes a position manually, the software should not blindly reopen it unless that is the intended design.
This is not glamour work. It is the part that keeps a small account from becoming test data for a vendor.
For Python-based systems, the same principle applies with different plumbing. I want dependency control, broker API error handling, stable data ingestion, and clear exception management. A Python bot that crashes on a missing tick or API timeout is not ready for live execution. Clean research code is not the same as production trading software.
My pass/fail framework for live deployment
I do not move algorithmic trading software from test to live because it looks promising. I move it through gates. Each gate removes a common source of false confidence.
For me, a pass looks like this:
- The strategy has a clear market logic that can be stated without marketing language.
- Backtests include spread, commission, slippage, and realistic execution assumptions.
- Results survive parameter sensitivity checks.
- Walk-forward or out-of-sample testing shows the system is not just fitted to one historical period.
- Drawdown, expectancy, average win/loss, and trade distribution are acceptable before live testing.
- VPS or hosting setup provides stable uptime and appropriate latency for the strategy type.
- Logs allow review of order timing, fills, errors, and strategy decisions.
- Risk controls are explicit and cannot be quietly bypassed.
- Live testing starts small, with capital sized for failure rather than hope.
A fail is just as clear:
- The vendor only shows balance growth and hides equity drawdown.
- Costs are missing or unrealistic.
- The strategy depends on perfect fills.
- Parameters are over-optimized and unstable.
- There is no out-of-sample evidence.
- The software uses recovery sizing without plain disclosure.
- The system cannot recover safely after disconnection or restart.
- The trader cannot verify what happened trade by trade.
Live testing should be boring. Small size. Real broker. Real spread. Real slippage. Real logs. I would rather see a system make modest money in ugly conditions than produce a heroic backtest that assumes the market owes it clean fills.
The final verdict is blunt. Algorithmic trading software passes only when its edge remains visible after the market’s costs and infrastructure problems are included. If the strategy needs perfect history, perfect execution, and perfect timing to survive, it is not ready for live forex trading. It is ready for another test.