Experiment Design for Trading Research

Most failed trading research does not fail because the researcher cannot fit a model. It fails because the experiment quietly answers a weaker question than the one required for capital allocation. “Does this feature correlate with returns in my notebook?” is not “would a portfolio formed with information available then, after costs, survive selection and deployment?” Experiment design closes that gap before a result becomes persuasive.

Start with a falsifiable hypothesis. Write the mechanism, instrument universe, timestamp convention, forecast horizon, execution rule, risk controls, and failure criterion before inspecting the final performance chart. This makes later changes visible rather than invisible degrees of freedom.

A research protocol

StagePrecommitmentTypical failure prevented
Hypothesiseconomic mechanism and signfeature fishing
Datasetsource, PIT cutoff, universelook-ahead and survivorship
Splittrain, validation, final test datesrepeated test-set tuning
Portfoliorebalance, constraints, costspaper-only alpha
Decisionpromotion thresholdnarrative-driven selection

The protocol should name the benchmark. A stock signal may need to beat sector-neutral momentum, a risk model, or a simple equal-weight portfolio—not zero return. It should also define the unit of observation: daily cross-section, event, trade, or portfolio month. Treat dependent observations as such; 10,000 overlapping five-day labels are not 10,000 independent trials.

Time-respecting splits

Use an early period for model development, a middle validation period for a limited set of predeclared choices, and a final untouched test period for one evaluation. For overlapping labels, use purged cross-validation: remove training observations whose label windows overlap the test fold and add an embargo after it.

# Sketch: decision at t, holding horizon h business days
train = data[data.date < fold_start - embargo]
test = data[(data.date >= fold_start) & (data.date <= fold_end)]
# additionally remove train rows with t + h >= fold_start
train = train[train.label_end < fold_start]

Walk-forward evaluation is valuable when parameters must be periodically refit. Freeze each training window, make predictions for the next test segment, then roll forward. Aggregate only the genuinely out-of-sample predictions. Do not tune window lengths after examining the full walk-forward equity curve unless that tuning is nested inside an earlier validation layer.

Choose metrics that reflect the decision

Forecast metrics such as rank IC, AUC, or calibration diagnose a model; they do not establish a strategy. Translate predictions into a portfolio with realistic position limits, borrow availability, delay, spread, impact, fees, and turnover. Report gross and net Sharpe, drawdown, hit rate, capacity, tail exposure, and factor exposures.

Result patternLikely interpretationNext action
strong IC, weak net PnLcostly or unmonetizable signaloptimize trading or discard
weak IC, strong PnLnonlinear sizing or coincidenceinspect attribution
one strong yearregime dependencetest conditional hypothesis
high gross, high turnovercost omissionrerun cost sensitivity

Stress costs at multiples of your estimate and delay signals by one additional bar or day. A signal that survives only an ideal fill assumption is not robust. Review avoiding overfitting in trading when the search involved many features, thresholds, and universe definitions.

Control the research search

Every experiment has multiple testing, even if no p-value is printed. Track each attempted specification: data version, code commit, features, hyperparameters, and decision. A research registry can be a simple append-only table. It lets you estimate the breadth of the search and prevents “forgotten” failures from becoming an uncounted selection mechanism.

Use negative controls. Try the same pipeline on a future-shifted feature, a randomized cross-section, or an asset class without the proposed mechanism. Positive results in a negative control suggest leakage or a generic exposure. Also define a placebo horizon where the causal effect should not yet exist.

Promotion and replication

A result should be reproduced from raw data by a second script or researcher, with a fresh snapshot and a clean environment. Then run a constrained paper-trading or shadow experiment, comparing expected versus realized turnover, fills, and forecast calibration. The production handoff belongs with live deployment monitoring, including explicit rollback criteria.

A negative result is valuable if its protocol was sound. Record it. A desk that preserves failed tests learns faster than one that repeatedly rediscovers them.

Key takeaways

  • Precommit the hypothesis, data clock, splits, portfolio rule, and promotion threshold.
  • Keep every label, fold, and implementation assumption chronologically valid.
  • Evaluate net portfolio economics and stress realistic delays and costs.
  • Maintain a research registry, negative controls, and independent replication before capital.
#experiment design #quant research #backtesting #hypothesis testing #trading tutorial