Insights·2026-07-28

How do you tell whether a backtest return is real skill? Time in market and exposure-adjusted alpha

Put time in market next to the return, then subtract time in market times the buy-and-hold return from the strategy return. What remains is the part market exposure does not explain, which is alpha. Time in market is the share of trading days on which the backtest actually held a position. Without it, a return alone cannot tell you whether the strategy earned money by being right or simply by being absent. Running five widely taught technical setups across sixteen names — single stocks, leveraged ETFs, and index ETFs — makes the difference plain. None of the five beat buy-and-hold, and the best win rate was 34.5 percent. How far the asset itself rose over the window and the strategy's excess return moved together at a correlation of minus 0.945: when the asset rises the strategy loses, when it falls the strategy wins. The cause was exposure. Over one-year windows the setups held positions 23.8 percent of the time and sat in cash for the rest. Exposure-adjusted alpha came to a median of minus 5.73 percentage points, with a regression intercept of minus 0.52 percentage points — effectively zero or below. This piece lays out the procedure and the formulas so the check can be reproduced from scratch.

Continues fromWhat do you have to specify before an AI agent can backtest your trading rule?

What time in market is, and why it comes before the return

Time in market, or exposure, is the share of trading days in a backtest on which a position was actually held. If a run covers 252 trading days and only 60 of them had a position, exposure is 23.8 percent. The other 192 days were cash.

Why read it first? If you are only half invested, roughly half the gains and half the losses reach you. A low strategy return in a rising market may not mean the calls were wrong — it may only mean you were not there. A small loss in a falling market may not mean the strategy dodged well, for exactly the same reason. A single return number blends the two completely.

So when a backtest table arrives, force a column for exposure next to the return. That is where skill separates from absence.

What was tested — five widely taught technical setups

The subjects are five setups that appear constantly in trading education abroad. Here is what each one is.

Elder BBP wraps Alexander Elder's Bull Bear Power together with an EMA arrangement and ADX. A 20-day exponential moving average above the 50-day is read as an uptrend, ADX at 25 or higher is read as a trend strong enough to trade, and the point where buying and selling pressure trade places becomes the entry timing.

SuperTrend pullback is a four-filter setup: SuperTrend, an ATR-based trend line, sets direction; RSI screens out overheated zones; the stochastic catches the pullback; MACD confirms the larger trend. ICT IFVG treats a price gap formed across three candles — a fair value gap — as flipping into support or resistance once price breaks back through it.

The remaining two come from day-trading educator Ross Cameron. One pairs RSI oversold and a break of the lower Bollinger band with a double bottom; the other takes a divergence, where price makes a lower low while RSI makes a higher low, and adds a MACD cross as confirmation.

How it was run — the walk-forward procedure

Start by collecting daily bars. Korean names came from Naver Finance's price JSON and overseas names from Tiingo's adjusted OHLC. The series must be adjusted for dividends and splits. Unadjusted closes drop sharply on a split date and manufacture sell signals that never existed.

Next comes the part that matters most. Signals are computed only from data up to that day's close, and fills are placed at the next day's open. Filling at the same day's close means trading on information you could not yet have, and it renders the whole backtest meaningless. This is look-ahead bias.

Indicators also need warm-up. Some setups use a 50-day moving average, so at least 150 extra trading days were held ahead of the measurement window, and each signal was computed from the preceding 400 bars only.

Finally, the end date was not fixed to a single point. Measuring against today alone lets the presence or absence of a recent crash swing everything. So the end date was slid 21 trading days backward at a time, repeating the same measurement at up to 36 points.

Fill rule (look-ahead blocked)
// Signal is computed only from data up to the close of day t-1
const want = signals[t - 1]?.direction === 'LONG' ? 1 : 0

if (pos === 0 && want === 1) {
  // Enter: fill at next day's open, hold to that day's close
  equity *= (1 - buyCost) * (rows[t].close / rows[t].open)
} else if (pos === 1 && want === 1) {
  // Hold: prior close to current close
  equity *= rows[t].close / rows[t - 1].close
} else if (pos === 1 && want === 0) {
  // Exit: fill at next day's open
  equity *= (rows[t].open / rows[t - 1].close) * (1 - sellCost)
}
pos = want

Result 1 — none of the five beat buy-and-hold

Sixteen names multiplied by rolling end dates produce hundreds to thousands of comparison cells per horizon. Only cells with at least one trade were counted.

Every setup came in under a 50 percent win rate, and the rate falls as the holding horizon lengthens. What was 38.5 percent over one-month windows becomes 18.7 percent over one-year windows.

Removing transaction costs did not flip the result; the best case was 12 wins to 12 losses. Trade frequency is low enough that cost sensitivity is limited, which also means fees are not what explains the weak performance.

HorizonCellsStrategy win rateMedian excessStrategy medianBuy-and-hold median
1 month72238.5%-2.7pp+0.5%+3.2%
6 months1,06127.7%-17.6pp+2.9%+19.5%
1 year1,15918.7%-39.0pp+6.0%+44.9%

Result 2 — what decided the outcome was whether the asset rose

Breaking the table down by name revealed one rule. How far the asset rose over the window and the strategy's excess return sat on opposite sides of each other. The correlation is minus 0.808 at one month, minus 0.905 at six months, and minus 0.945 at one year.

Slicing by buy-and-hold return makes it starker. Where the asset fell more than 20 percent, the strategy won 89.1 percent of the time; where it rose more than 100 percent, it won 1.8 percent of the time.

In other words, the condition for the strategy winning is not the strategy but the asset. And whether an asset will rise or fall over a window is knowable only afterward. If it were knowable in advance, no setup would be needed at all.

Buy-and-hold return over window (1 year)CellsStrategy win rateMedian excess
Below -20%25689.1%+25.1pp
-20 to 0%25862.0%+5.2pp
0 to 20%50414.9%-13.7pp
20 to 50%7993.8%-30.2pp
50 to 100%5553.1%-61.9pp
Above 100%5521.8%-167.7pp

Result 3 — the leveraged-ETF hypothesis was rejected too

In the first six-name run, the strategies won on exactly one asset: a 2x leveraged ETF. That looked like it might be about assets where long-term holding structurally breaks down, so six leveraged ETFs and four unleveraged ETFs on the same underlyings were added.

Inside the leveraged group the results split in opposite directions. Of four 3x ETFs, two won and two were routed. What the winners shared was not the multiplier but a negative buy-and-hold return over the window.

The unleveraged controls behaved the same way: the win rate spiked only on the name that rose least. Leverage turned out not to be the variable, and the rule from Result 2 ran straight through.

TickerMultiple1-year win rateMedian excessBuy-and-hold median
TSLL2x62.7%+23.8pp-11.7%
LABU3x55.5%+5.8pp-16.5%
NVDL2x18.7%-49.1pp+45.5%
SOXL3x21.0%-78.9pp+79.2%
TQQQ3x3.8%-67.1pp+67.5%
SPXL3x3.3%-45.5pp+40.1%

How to compute exposure-adjusted alpha yourself

That was the diagnosis; this is the procedure to apply to your own backtest. Only three values are needed: the strategy return, the buy-and-hold return over the same window, and time in market.

First get exposure by counting the days the position was open and dividing by total trading days. Then subtract time in market times the buy-and-hold return from the strategy return. What remains is the part market exposure alone cannot explain.

With many samples, check once more by regression. Regress excess return on the buy-and-hold return and read the intercept — that intercept is the average alpha. The slope is a cross-check: if nothing but exposure is at work, it converges on time in market minus one.

For this sample the numbers were as follows. Measured slope minus 0.845 against minus 0.762 predicted from 23.8 percent average exposure — nearly overlapping. The intercept was minus 0.52 percentage points. Median exposure-adjusted excess was minus 5.73 percentage points, positive in 33.3 percent of cases.

Put plainly, what these five setups sold was not excess return but time spent out of the market. That runs in the same direction as physicist Beomjun Kim's argument that moving-average strategies lack a scientific basis, though one step further in it looks less like being wrong and more like having been a different product all along.

Exposure-adjusted alpha
// 1) Time in market
const exposure = daysInMarket / totalDays

// 2) Strip out the part exposure explains; what remains is alpha
const alpha = strategyReturn - exposure * buyHoldReturn

// 3) With many samples, confirm via regression intercept
//    excess = a + b * buyHold   (a is alpha; b converges on -(1-exposure))
//
// Measured: b = -0.845, -(1 - 0.238) = -0.762, a = -0.52pp
// Median exposure-adjusted alpha -5.73pp, positive in 33.3% of cells

Limits of this check

The sample is sixteen names: five single stocks, seven leveraged ETFs, four unleveraged ETFs. This is a conclusion about these five setups, this sample, and this rule — not about technical analysis in general.

The rules were simplified as well. Everything was made long-only, with no stop losses, price targets, or scaled entries. Sell signals were treated as cash rather than as short positions. That design isolates the character of the signal itself, but adding execution rules can move the numbers.

Costs were set at 0.065 percent to buy and 0.215 percent to sell in Korea including securities transaction tax, and 0.12 percent per side overseas. Those figures embed a slippage assumption and will differ by broker and fill conditions. As covered in the previous piece, a single line about fill assumptions can swing results substantially, so it is safer to check the same four things — decision timing, fill price, transaction costs, data window — in anyone else's backtest too.