formul

Algorithmise your trades with one click.

one emailno accountnever soldyour strategies stay yours

Choose an example strategy

Go long when the 50-day moving average crosses above the 200-day. Exit on a 5% trailing stop.

compiled

entry ma(50) crosses_above ma(200)
exit trailing_stop 5%
sizing full_equity
universe provided_symbols

validated

  • lookahead: clear
  • survivorship bias: universe must be point-in-time
  • parameter drift: clear

suggested fix: use a point-in-time universe

Formul8 proposes this change to the spec. Applying it rewrites the spec, resolves the check and re-runs the sample backtest.

strategy.spec
sizing full_equity
universe provided_symbols
universe point_in_time(provided_symbols)

backtested · sample · 2015–2024, daily

return
+9.4%/yr
sharpe
0.71
max drawdown
22.3%
win rate
41%
trades
186
time in market
63%
The next step in the product is to deploy the strategy. Not available in this preview.

Example 1 of 3: MA crossover. compiled, one survivorship warning; sample backtest +9.4% per year, Sharpe 0.71, max drawdown −22.3%. Fixing the universe lowers the return to +8.1%.

sample output: illustrative, not a real backtest.

What Formul8 checks and what it backtests against

what it checks

lookahead
only data available at the decision bar is used
survivorship
delisted, acquired and renamed tickers are included
execution
next-bar fills, with modelled slippage and commission (at launch)
overfitting
flags single fixed thresholds and dense parameter grids
regime
out-of-sample results, reported by volatility regime at launch
exits
a missing exit rule blocks the run; nothing else can close a position
risk
a missing stop is flagged; size-uncapped specs are refused

what it backtests against

universe
US equities and ETFs at launch
history
2005–present, daily bars
prices
split- and dividend-adjusted
membership
point-in-time; includes dead names
fundamentals
point-in-time, as-reported (at launch)

seen enough? one email.