EasyTrading
Deep divesAugust 20, 2026 18 min

The Strategy Looks Profitable. What to Check Before You Trust It

A smooth equity curve may come from a sound idea, parameter fitting, or fills that were never attainable. We take one backtest from hypothesis to a decision: reject it, revise it, or move it to forward validation.

The equity curve on the screen is smooth. Drawdowns are short, profits appear across multiple years, and the strategy made it through several visible market selloffs. The result looks convincing.

The author may have specified the rule in advance and found a persistent effect in correctly prepared data. They may have tried hundreds of combinations and shown only the winner. Or the test may have opened positions at prices that were no longer available in live trading. The same chart is consistent with all three stories.

Recalculating the return will not tell us which story we are looking at. We need to reconstruct the research process: what was tested, which information was available at the time, how orders were modeled, and which decision rule had been set before the result was seen.

We will walk through that process using one hypothetical breakout strategy. There are no invented performance figures in the example. What matters is the sequence of checks, not whether the example appears profitable.

The eight-step review path

Before the details, here is the map:

  1. Define the hypothesis and benchmark. What is supposed to create the effect, and what should it beat?
  2. Predefine acceptance criteria. What result is sufficient, and what result ends the experiment?
  3. Make the dataset point-in-time correct. What did the strategy actually know when it made each decision?
  4. Separate development from evaluation. Where may the rule be tuned, and which period remains unseen?
  5. Define the execution contract. When can an order be submitted, at what price, and how much of it can fill?
  6. Account for the entire search and test robustness. How many alternatives competed, and what happens around the winner?
  7. Open the holdout once. Did the frozen version pass the predefined go/no-go conditions?
  8. Validate operations and risk controls. What must work before paper trading, small live deployment, and any increase in size?

The order matters. If acceptance criteria, costs, or fill rules appear after an attractive result, the researcher can unconsciously choose assumptions that preserve the conclusion they already like.

The eight steps are our applied structure, informed by published backtesting protocols and model-risk practice [8][9].

The working example: define exactly what is being tested

Suppose the hypothesis is this: after price makes a new local high, the move sometimes continues because the market does not absorb new information instantly and some participants join the move with a delay.

Before running anything, we define a hypothetical baseline:

  • trade one predefined universe of liquid instruments;
  • generate a signal when a bar closes above the highest price of the previous 50 bars;
  • make the decision only after the close is final;
  • allow the order to appear no earlier than the next eligible event;
  • predefine the protective exit and position-sizing rule;
  • develop on one period while keeping a final temporal segment hidden.

Fifty bars is not a recommendation and not an optimized value. It gives us a stable reference version for every check that follows.

The benchmark is also chosen before testing. It might be cash, passive exposure, a strategy with comparable market risk, or a simpler rule. The comparison must use the same period, available capital, exposure, and costs. Beating zero says little if the same risk could have been obtained more simply.

Step 1. Write down the mechanism before optimization

An economic explanation does not validate a strategy. It constrains the decision space and lets us state in advance what would count as failure.

For the breakout strategy, we should answer:

  • why might a new high carry information rather than merely describe a chart pattern;
  • who is likely to be on the other side of the trade;
  • what action is supposed to earn compensation: bearing risk, supplying liquidity, processing information quickly, or following a disciplined rule;
  • in which regimes should continuation disappear;
  • what result would falsify the hypothesis.

The last question matters more than a persuasive story about why the idea “should work.” If every price path can be explained after the fact, the hypothesis cannot be tested.

Step 2. Freeze the decision rule before opening the holdout

“Still looks meaningful” is too flexible a standard. Almost any result can be rationalized under it after the test. A proper evaluation therefore needs an acceptance card completed before the holdout is opened.

There are no universal thresholds. The minimum sample, allowable drawdown, and required margin over costs depend on frequency, capital, market, and risk budget. But the absence of a universal number does not remove the obligation to choose and justify a number for this strategy in advance.

Acceptance card

Hypothesis and code version:
Primary metric:
Benchmark:
Minimum acceptable net result relative to benchmark:
Uncertainty estimate / confidence-interval method:
Minimum effective sample size:
Maximum acceptable drawdown:
Maximum recovery time:
Maximum contribution from the largest trades:
Base / adverse / severe cost scenarios:
Maximum acceptable development / holdout divergence:
Number of tested families and configurations:
Multiple-testing adjustment:
Unconditional rejection rule:

The card must be filled with figures grounded in the actual strategy: venue and broker fees, historical liquidity, allowed risk, and sample length. An empty template is not a protocol.

For the breakout example, rejection need not depend on a single return number. The rule may combine several conditions: no positive result after predefined costs, excessive P&L concentration, a drawdown-limit breach, or collapse on the predefined holdout. The point is to prevent replacement of inconvenient criteria after the result appears.

Step 3. Build the dataset that existed at the time

A date in a table is not necessarily the date when the information became available. A fundamental observation has a reference period, a first-release date, and possibly several revisions. Today's index members may include companies that were not members ten years ago. A delisted asset may disappear from a current ticker list along with the loss incurred on delisting.

A point-in-time dataset exposes only the version of each observation and the universe composition that were genuinely available when the decision was made. Future-information leakage and selection based only on surviving instruments require separate checks [5][6].

Dataset-integrity checklist

  • record the data source, snapshot version, and time zone;
  • define session boundaries used to construct bars;
  • handle gaps, duplicates, and trading halts explicitly;
  • treat corporate actions and dividends consistently with the price series;
  • do not reconstruct the historical universe from today's surviving assets;
  • retain delistings and the terminal return or settlement outcome;
  • map instruments through stable identifiers, not ticker strings alone;
  • attach historical publication timestamps to macro and fundamental releases and revisions;
  • fit scaling, imputation, PCA, and feature selection only on the past training subset;
  • do not use a future index composition or future security classification as a feature;
  • store when each observation becomes known and when each label or position horizon ends.

Some ML-specific checks may not apply to a simple breakout rule, but time semantics still do. If a bar closes at 18:00:00, a signal requiring its final close did not exist before that moment.

Three timestamps for every trade

A trade should be decomposed into three times:

  1. Data availability: when the last required input became available.
  2. Decision completion: when the strategy finished calculating the signal.
  3. Execution eligibility: when the order could reach the market after latency and receive a fill.

If the breakout signal uses a bar's final close and the backtest fills at that same close without a predefined closing-auction mechanism and a signal available before the cutoff, the model contains look-ahead or an unattainable fill assumption. Without evidence for such a mechanism, use the next eligible event and model latency explicitly.

Step 4. Separate development from independent evaluation

The development period is where rules are formulated, bugs are fixed, and parameters are selected. The holdout is a segment of history that is not used to select or tune the strategy.

A particular holdout remains an independent final check only while its result does not influence the hypothesis, parameters, risk limits, cost model, or selection procedure. The first look that changes any of these makes subsequent evaluation on that segment adaptive.

A holdout failure ends the confirmatory experiment for that version. Research may continue, but then:

  • the changes create a new hypothesis version;
  • the old holdout becomes development data;
  • new confirmation requires unseen data, a lockbox, or a future forward period;
  • transitions between versions remain in the experiment log.

Leakage is broader than direct look-ahead

Even a correct date boundary fails if the scaler, feature selector, or imputer was fit on the full history. Every learned transformation must be refit using only the past training subset in each cycle [5][10].

If positions, features, or ML labels overlap in time, observations on opposite sides of the train/test boundary may share the same future price path. Purging removes overlapping training observations; an embargo can add a protective gap. Its length should follow from the actual overlap mechanism, the position or label horizon, and information availability rather than an arbitrary number [11].

For the breakout example, this matters if a position entered during development exits inside the holdout. Splitting a table by entry date is not enough. The treatment of that P&L and the information crossing the boundary must be defined in advance.

Step 5. Specify a minimum execution contract

Adding a commission field does not turn a simulation into a trading model. Between a signal and a position sit the bid–ask spread, latency, market depth, limit-order priority, partial fills, and the order's own impact on price.

The bid–ask spread is the first gap between a chart price and the price available to an immediate trade. A marketable buy normally crosses the spread and executes against the available ask; a marketable sell executes against the bid. A passive limit order may receive a better price and supply liquidity, but it may fill partially or not at all.

Slippage is the difference between a predefined reference price and the actual average execution price. A report must state whether spread, latency, and market impact are included in slippage or modeled separately.

Simulator contract

  1. Assign every signal the timestamp when all required inputs became available.
  2. Do not allow an order to exist before the next eligible event after the assumed latency.
  3. Define separate price, quantity, and cancellation rules for market, limit, stop, and stop-limit orders.
  4. If the intrabar path is unknown, use more granular data or a predefined conservative ordering—not the most favorable path.
  5. If stop and target are both touched in an OHLC bar, do not choose the favorable outcome after the fact.
  6. Cap filled quantity by available volume and a predefined participation rate.
  7. Do not treat a touch of a limit price as a guaranteed full fill without a queue and liquidity model.
  8. Specify behavior for gaps, stale quotes, halts, rejects, and partial fills.
  9. Calibrate spread, slippage, and fill probability to quotes/trades or the strategy's own paper/live fills; until then, label them as scenario assumptions [12].
  10. Report at least three execution scenarios: base, adverse, and severe.

In the working example, the decision exists only after the bar closes. The baseline therefore cannot “buy at the known close.” The next eligible quote, latency, and order type belong in the strategy specification itself rather than being appended after an attractive P&L has been calculated.

Costs vary with turnover, order size, and liquidity [7]. Historical P&L cannot be scaled linearly with capital: a larger order may consume available depth and move its own execution price.

Step 6. Show the whole search, not just the winner

One breakout rule quickly turns into a tree of alternatives:

  • a 10-, 20-, 50-, or 100-bar high;
  • immediate entry or a delayed order;
  • trend, volume, or volatility filters;
  • several stops and exit rules;
  • multiple time frames, markets, and periods.

Reporting only the best configuration hides the relevant statistical object: the complete selection process [4].

An experiment log is a minimum audit trail, not a correction for selection bias by itself. It should contain every rule family, configuration, result, and reason for each change. Correlated configurations cannot be counted mechanically as independent trials.

The Deflated Sharpe Ratio (DSR) evaluates the selected Sharpe ratio against the maximum expected among the trials [1]. Its inputs include the effective number of independent trials and the dispersion of their Sharpe ratios, along with sample length, skewness, and kurtosis for the selected strategy. A raw run count is not enough.

The same issue appears at the scale of the factor literature. Harvey, Liu, and Heqing Zhu assembled a catalog of 316 factors from 313 published papers and selected working papers [2]. Even that catalog represents only the visible part of the search; failed unpublished tests are absent. In the authors' framework, a new factor for that specific problem needed a t-ratio above 3 rather than the conventional threshold around 2. This is not a universal cutoff for every trading strategy. The transferable lesson is that a broad search raises the evidentiary bar.

Inspect the neighborhood around the winner

For a 50-bar breakout, we can predefine nearby values—say 45, 48, 52, and 55—and examine them on development data. This is sensitivity analysis, not a search for a new winner on the holdout.

A single sharp spike requires an explanation. A smooth surface proves nothing either: it may result from high correlation among neighboring configurations or from another layer of fitting. The parameter map is a diagnostic. The selected region and selection rule still require independent evaluation.

Additional stress checks include:

  • wider spreads, higher fees, and longer latency;
  • missed limit-order fills;
  • distinct time periods and market conditions;
  • removal of the largest trades as a concentration diagnostic;
  • another legitimate data source;
  • gaps, rising correlations, and lost liquidity.

Do not call a scenario “realistic” without calibration. It must either be tied to observed data or labeled honestly as a hypothetical stress assumption.

Evidence box: what 888 Quantopian algorithms showed—and what they did not

Wiecki et al. began with 7,152 user-created Quantopian algorithms trading US equities [3]. After excluding short histories, extreme cases, insufficiently invested strategies, and duplicates, 888 remained.

All algorithms were frozen between January and June 2015 and rerun in Zipline through the end of 2015. The simulated out-of-sample period was therefore only 6–12 months, with a minimum of six months. The code was genuinely not modified in response to that period, but the trades and returns were still simulated on historical minute-bar data rather than observed in live trading. The study did not test the strategies over a multi-year independent period or in live trading.

In this filtered sample, several popular in-sample metrics, including the Sharpe ratio, had low explanatory power for the corresponding out-of-sample metrics; the authors report R² below 0.025. A proxy for research activity—the logarithm of total days simulated across all previous backtests—was weakly but statistically significantly associated with the IS–OOS Sharpe gap: Spearman R² = 0.017, p < 0.0001.

This is an observational relationship in one platform sample. It does not establish that additional backtest runs caused worse performance. The result may depend on filtering, strategy composition, and a broad change in market regime: development occurred mostly during the bull market from 2010 to mid-2015, while the subsequent period was different.

A narrow practical conclusion is justified: this sample does not support using the maximum in-sample Sharpe alone as a sufficient selection criterion.

Step 7. Open the holdout once and apply the rule

Before the final evaluation, freeze:

  • the code and data versions;
  • the instrument universe;
  • parameters and selection rules;
  • the execution contract;
  • cost scenarios;
  • risk limits;
  • the acceptance card.

After the run, do not change the benchmark, exclude an inconvenient regime, or promote a new metric to primary status. Compare the output with the frozen card.

There are three honest decisions:

  1. Reject. An unconditional rejection rule was triggered; the experiment for this version is over.
  2. Research. The result revealed a bug or a new hypothesis. It receives a new version and a future confirmation path.
  3. Promote to forward validation. Every predefined criterion passed. This grants access to a more expensive evaluation stage, not proof of future profitability.

Here is how that closes the breakout example. Suppose—only to illustrate the procedure—that the strategy clears its predefined net threshold but breaches the concentration limit written before the test because a few of the largest trades dominate the result. The decision is Reject, even though the final curve remains profitable. Relaxing the concentration limit after seeing the result would create a new research version; it would not turn the old holdout into a pass.

Where walk-forward evaluation fits

Walk-forward testing historically simulates a predefined retraining procedure: the training window moves, the model is frozen, and the next segment is evaluated. It is useful when the live strategy will actually be updated in that way.

Preprocessing and model selection must run only on the available past in every cycle. Overlapping labels or positions require a boundary that removes shared information. Retraining and execution costs belong in each out-of-sample segment.

Window length, step size, and objective can themselves become hyperparameters. If a walk-forward setup was chosen for its best aggregate curve, evaluating that meta-procedure requires an external untouched period or a configuration fixed in advance. Walk-forward testing does not reproduce future regimes or make observations independent.

Step 8. Design the risk layer before paper or live deployment

A sound research result does not size a position or protect against an operational failure. Before connecting to a market, define a separate list of limits and breach responses [9]. The values depend on capital and strategy; what matters here is that every field and the response to a breach are fixed in advance.

  • Risk per trade. Limit: size or share of the risk budget. Breach response: reduce or block the order.
  • Gross and net exposure. Limit: upper bounds. Breach response: block new positions.
  • Leverage and margin buffer. Limit: maximum leverage and reserve. Breach response: force de-risking.
  • Instrument, sector, or correlated group. Limit: maximum concentration. Breach response: block additional exposure.
  • Participation in available volume. Limit: participation cap. Breach response: split or cancel the order.
  • Daily or weekly loss. Limit: loss threshold. Breach response: stop pending review.
  • Drawdown from the high-water mark. Limit: throttle and stop thresholds. Breach response: reduce size or trigger the kill switch.
  • Data age. Limit: maximum age. Breach response: block trading.
  • Broker/local position mismatch. Limit: allowed discrepancy. Breach response: cancel orders and reconcile.
  • Slippage or fill-rate deviation. Limit: control range. Breach response: return to the previous stage.

Also stress gaps, consecutive stop-outs, rising correlations, lost liquidity, and an inability to exit quickly. At portfolio level, evaluate the strategy together with the exposures of other systems rather than in isolation.

Promotion gates

Paper trading tests timestamps, signal generation, the order state machine, rejects, cancellations, and reconciliation between local state and the broker model. It does not measure the strategy's own market impact and does not guarantee real fills.

Small live deployment measures actual fees, fill rate, latency, slippage, and infrastructure behavior at a predefined minimal size. Before launch, set a minimum observation period or sample, allowed deviations, and stop conditions.

Increasing size happens in steps. Every tier has capacity assumptions, risk limits, and a rollback condition. A breached execution or risk boundary stops promotion rather than being explained away afterward.

The required duration and sample cannot be identical for a daily and a high-frequency strategy. Set them before launch to capture enough decisions for the specific hypothesis and, where possible, different market conditions.

Copyable experiment manifest

experiment_id:
hypothesis_version:
code_version:
data_snapshot:
point_in_time_policy:
universe_policy:
benchmark:
train_period:
validation_scheme:
locked_holdout:
label_or_position_horizon:
purge_embargo_rule:
parameter_families_tested:
selection_rule:
multiple_testing_adjustment:
execution_contract:
  signal_timestamp:
  latency:
  order_types:
  intrabar_policy:
  volume_participation_cap:
  spread_model:
  slippage_model:
  partial_fill_policy:
cost_scenarios:
  base:
  adverse:
  severe:
acceptance_card:
  primary_metric:
  uncertainty_method:
  minimum_effective_sample:
  net_edge_threshold:
  max_drawdown:
  max_recovery_time:
  concentration_limit:
  reject_rule:
risk_limits:
forward_promotion_gates:
artifacts:
reviewer:
decision:

A manifest does not repair weak methodology automatically. It makes decisions observable: another researcher can see what was frozen, which alternatives competed, and why the strategy did or did not earn access to the next stage.

When the strategy has earned another experiment

The strongest backtest is not the curve with the highest return among hundreds of alternatives. A stronger experiment is one whose data, code, search, time semantics, execution model, and decision rule can be reconstructed—including the conditions that caused rejection.

This process usually makes the chart worse. Fees reduce the result. Plausible latency misses the perfect entry. Accounting for the full search lowers statistical confidence. The holdout may end the project.

That is useful deterioration. It happens before real capital is placed at risk.

Where XTester fits

XTester can run strategies on historical data and expose the result through performance metrics. The run itself does not determine whether the dataset is point-in-time correct, how many independent hypotheses were tested, whether the execution model is calibrated, or how much risk is acceptable. To make the result reviewable and repeatable, keep the manifest above alongside the run artifacts.

If the strategy retains its predefined margin of safety through every gate, the conclusion remains narrow: it has earned forward validation. Not trust in future returns—permission for the next experiment.

Sources

  1. Bailey, D. H., López de Prado, M. The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting, and Non-Normality. Journal of Portfolio Management, 2014.
  2. Harvey, C. R., Liu, Y., Zhu, H. …and the Cross-Section of Expected Returns. Review of Financial Studies, 2016.
  3. Wiecki, T., Campbell, A., Lent, J., Stauth, J. All That Glitters Is Not Gold: Comparing Backtest and Out-of-Sample Performance on a Large Cohort of Trading Algorithms. Journal of Investing, 2016.
  4. White, H. A Reality Check for Data Snooping. Econometrica, 2000.
  5. Kaufman, S., Rosset, S., Perlich, C., Stitelman, O. Leakage in Data Mining: Formulation, Detection, and Avoidance. ACM TKDD, 2012.
  6. Brown, S. J., Goetzmann, W. N., Ibbotson, R. G., Ross, S. A. Survivorship Bias in Performance Studies. Review of Financial Studies, 1992.
  7. Korajczyk, R. A., Sadka, R. Are Momentum Profits Robust to Trading Costs?. Journal of Finance, 2004.
  8. Arnott, R., Harvey, C. R., Markowitz, H. A Backtesting Protocol in the Era of Machine Learning. Journal of Financial Data Science, 2019.
  9. Federal Reserve & OCC. Supervisory Guidance on Model Risk Management (SR 11-7), 2011.
  10. scikit-learn. Common pitfalls and recommended practices: Data leakage.
  11. López de Prado, M. Advances in Financial Machine Learning. Wiley, 2018, Chapter 7, “Cross-Validation in Finance.” ISBN 978-1-119-48208-6.
  12. NautilusTrader. Fill Models — official documentation on historical fill assumptions.

This article discusses research methodology and is not investment advice.