“The at-the-money call” is a convenient handle in an options strategy, but it is not an instrument: as the underlying moves, the handle re-points to a different contract, so a price series read through it joins bars from several contracts. Any windowed indicator computed on that series, whether an EMA, an RSI, or a rolling maximum, is not the indicator of anything that can be bought or held. The fix is structural: compute indicators on fixed contracts, and use the rolling handle only to choose which contract’s value to read.

What a rolling alias is

A rolling alias is a selector evaluated at every bar: the same-day call nearest the money, the contract closest to a target delta. Each evaluation returns one concrete listed contract, identified by its OCC option symbol. When spot crosses the midpoint between two strikes, the answer changes, and with closely spaced strikes an at-the-money alias on a short-dated expiry can re-point many times in one session.

The phrase “the at-the-money call” can mean three different things:

  • the contract that is at the money right now, which moves with spot;
  • the contract a strategy selected at a particular moment, which does not move;
  • the contract an open position holds, which does not move until the position closes.

Only the second and third are instruments. The first is a location on the chain: its current price is meaningful, but its price history is not one instrument’s history.

How a windowed operator breaks

The table below is illustrative, with made-up prices, and starts at bar 4. The underlying rises steadily from about 102 to 103; two calls are listed, at strikes 100 and 105. The alias points at the 100 call while spot is below 102.5 and at the 105 call from bar 7, when spot crosses it. The EMA has period 5 (smoothing factor 1/3) and is seeded with each series’ first close at bar 1.

Stitched EMA versus each contract's own EMABoth contracts' own EMAs rise steadily, but the alias EMA drops at the bar-7 re-point and by bar 10 matches neither contract.
  • 100 call, own EMA
  • 105 call, own EMA
  • Alias EMA (stitched)
0.001.002.003.004.00246810BarOption price (illustrative)Alias re-points to the 105 call100 call, own EMA105 call, own EMAAlias EMA (stitched)

Illustrative data: the example in this note, recomputed (EMA period 5, seeded at bar 1).

Show data
Bar100 call, own EMA105 call, own EMAAlias EMA (stitched)
12.600.952.60
22.650.972.65
32.731.022.73
42.821.062.82
52.921.112.92
63.011.163.01
73.121.212.45
83.251.282.10
93.381.351.90
103.501.421.78
Bar Spot 100 call EMA(100 call) 105 call EMA(105 call) Alias close EMA(alias)
4 102.1 2.98 2.82 1.14 1.06 2.98 2.82
5 102.3 3.12 2.92 1.21 1.11 3.12 2.92
6 102.4 3.20 3.01 1.25 1.16 3.20 3.01
7 102.6 3.35 3.12 1.33 1.21 1.33 2.45
8 102.8 3.50 3.25 1.41 1.28 1.41 2.10
9 103.0 3.65 3.38 1.50 1.35 1.50 1.90
10 103.1 3.73 3.50 1.55 1.42 1.55 1.79

Both contracts rise on every bar and trade above their own EMAs throughout. At bar 7 the 105 call is about 10% above its EMA. The alias series instead shows a one-bar drop of nearly 60%, and its EMA places the 105 call 46% below “its” average. An oversold reading, a large RSI loss bar, a fresh rolling low: all come from a change of label alone.

The damage outlasts the re-point bar, because an EMA forgets geometrically: with a smoothing factor of 1/3, the old contract still carries about 20% of the weight four bars later, since (2/3)⁴ ≈ 0.20. At bar 10 the alias EMA is 1.79, which is neither contract’s EMA (3.50 and 1.42). If the alias re-points again before that weight decays, the series never becomes the indicator of any single contract.

The futures precedent

A continuous futures chart splices each expiring contract onto its successor, and delivery months trade at different prices. One data vendor’s documentation states the consequence: indicators run on a spliced series give false readings because “the gaps in a spliced contract are not caused by market activity” (Premium Data). The standard repair is back-adjustment, which shifts earlier contracts by the price difference observed at the roll so the joined series has no gap (TradingView support).

Back-adjustment is tolerable for futures because successive contracts are near-substitutes on the same underlying, rolled at scheduled expirations. The adjusted series approximates a position that is rolled forward, which a trader can actually hold.

Those conditions fail for strikes. The 100 call and the 105 call respond differently to the underlying, decay at different rates, and the gap between them changes bar by bar. No single offset or ratio applied at the re-point makes the 100 call’s history behave like the 105 call’s. The nearest analogue is a portfolio that sells the old contract and buys the new one at every re-point, paying the spread each time. An indicator on that series describes the rolling portfolio. A strategy buys and holds a single contract, which is a different object.

Separate computation from selection

The platform’s rule is that a candle, feature, or indicator series may only be computed from one concrete symbol’s real data. For options, that splits indicator work into two steps that are never merged:

  1. Computation. Every windowed operator runs on one fixed contract, over that contract’s own continuous candles. The 105 call’s EMA at bar 7 is defined by the 105 call’s bars alone, whether or not anything pointed at it earlier.
  2. Selection. At the decision bar, a point-in-time read resolves the alias to one contract and reads that contract’s current values: its close, its EMA, its RSI.

The rolling belongs in the read, never in the window.

A point-in-time read of a rolling alias, such as the current close of the at-the-money call, is fine, because no window spans the re-point. In the example, the selected EMA at bar 7 is 1.21, the 105 call’s own, so close and EMA come from the same instrument.

# Stitched: one EMA over whatever the alias pointed at on each bar
ema_alias = ema(close(atm_call), 5)          # rejected at validation

# Per contract: the alias picks a contract; the window runs on that contract alone
c       = resolve(atm_call, t)               # selection: a point-in-time read
history = candles(c, through = t)            # c's own bars, warmed from archive
reading = close(c, t) / ema(history.close, 5)[t] - 1

The selected value still jumps at a re-point, legitimately, because it now describes a different contract. That is why it must stay a read. Smoothing the selected series, or taking a crossover across it (which compares this bar with the last), would rebuild the stitch one level up.

A test in the platform asserts that the value read through an alias equals the same indicator computed directly on that contract’s own candles, to nine decimal places.

Warmup belongs to the contract

Per-contract computation moves the cost to warmup. At bar 7 the 105 call’s EMA needs the 105 call’s bars 1–6, even though nothing selected the contract then.

No strategy is admitted on cold indicators. A selected contract’s series must be backfilled from archived history to the depth each consumer needs; if it cannot be, entry must be held behind a named warmup gate rather than run on a half-formed indicator. The gate covers only features the entry rule consumes, and warmup is required never to block a strategy whose data is fully available. Slow indicators show why backfill matters: an average over a long window needs that whole window of one contract’s history before its first honest value, which on a same-day contract can span a large part of the session.

Enforce it in validation

A convention such as “never run an EMA on the at-the-money alias” fails because the wrong form is short, reads naturally, and produces plausible numbers. Results computed on a stitched series can look like real findings, which is why stitched option series are rejected outright at the research, backtest, and paper-trading stages rather than merely discouraged.

The rule now lives in strategy specification validation: a windowed operator whose source is a rolling option alias is refused unless the author explicitly declares it per-contract. Declared that way, the operator runs separately on each concrete contract’s own history, and the alias only selects which contract’s value is read at the decision bar. The declaration is required because the bare form reads as an indicator over the rolling price series, which would misdescribe it.

Limitations

  • The rule removes one class of fabricated series; it does not make a per-contract indicator informative. Time decay pulls a short-dated option’s price down steadily, so a contract tends to sit below its own trailing average for reasons unrelated to direction.
  • A strike that was far from the money for most of its life may trade sparsely, so its honest indicator can rest on few or stale prints.
  • Warming from archive depends on the archive’s coverage and quality. When history is missing, the requirement is to block entry, which trades availability for correctness.
  • Some quantities are meaningful across re-points, such as at-the-money implied volatility, which is comparable across strikes in a way premiums are not. A blanket refusal to window a rolling alias treats them conservatively; they are better defined as their own continuous series than read through a contract alias.
  • The example uses invented prices and a simple seed; real re-points can be smaller or larger. The futures comparison is an analogy only.

This note describes research methods and engineering practice. It is general information only and contains no investment advice, recommendation, or offer to buy or sell any security. Olevicor trades only its own capital. Questions or corrections: contact us.

On this page
  1. What a rolling alias is
  2. How a windowed operator breaks
  3. The futures precedent
  4. Separate computation from selection
  5. Warmup belongs to the contract
  6. Enforce it in validation
  7. Limitations