TradingView strategy research

Momentum Pinball on TradingView: indicator definition and setup tests

Momentum Pinball is a short swing setup described by Laurence Connors and Linda Bradford Raschke in Street Smarts, chapter 7. Its oscillator is a three-period RSI of daily net price change. A reading below 30 selects a possible long the next session; above 70 selects a possible short. Entry still requires a break of that session's first-hour range in the selected direction.

See the decision guide

What the original rules say, and what needs specification

The original chapter uses close minus previous close, despite calling the input ROC. It describes a long stop-entry above the next first-hour high, protection at that hour's low, possible re-entry after a stop, and carrying a profitable position overnight. It seeks a next-morning exit, with the following close as a deadline. The short discussion also refers to the entry bar's extreme and trailing protection. Those details need an explicit interpretation for a mechanical test.

  • The source below links to a public scan of the original book, hosted by a third party. George Pruitt also publishes his own implementation with daily and five-minute data. His programmed choices should be labeled as an implementation, not treated as missing text from the book.
  • The research version below fixes the stop, re-entry count and exit clock in advance. It deliberately trades only the long setup so the short-side stop interpretation does not silently enter the results.

Calculate the oscillator on daily net changes

Let C(t) be a completed daily close and M(t) = C(t) - C(t-1). Compute RSI with length 3 on M. RSI therefore smooths positive and negative changes in M, not the positive and negative daily price changes directly. Use Wilder smoothing: after the seed, each new average is two-thirds of the previous average plus one-third of the current observation.

  • These values are an initialization fixture. An established chart carries older smoothed history, so a short excerpt need not reproduce its RSI. Retain ample warm-up data and compare the full input series.
  • A percentage ROC divides the change by an earlier price. That changing denominator can alter RSI and threshold dates. Do not substitute it for the point change.
  • A missing or undefined oscillator is ineligible. Exact readings of 30 and 70 do not pass the strict below/above rules. A flat input needs an explicit undefined-value policy; do not fill missing RSI with zero.
Hypothetical daily closesDerived inputCheck
100, 102, 103, 103, 104M = 2, 1, 0, 1; changes in M = -1, -1, +1.Seed average gain = 1/3; average loss = 2/3. RSI = 100 - 100 / (1 + 0.5) = 33.33.
Add a sixth close of 104New M = 0; its change is -1.Smoothed gain = 2/9; loss = 7/9. RSI = 100 × 2/9 = 22.22.
After the sixth daily close22.22 is below 30.The next trading session is eligible for the long trigger. There is no entry at this daily close.

A Pine Script indicator for checking the daily input

Add this Pine v6 indicator to standard 1D candles. Use the same symbol, adjustment settings and daily session source throughout the experiment. It plots completed daily observations and marks eligibility for the next session. It does not submit entries or calculate the first-hour range.

  • The current open daily bar is hidden until confirmed. In an intraday implementation, use the previous completed daily observation throughout the entry session. Recalculating a three-bar RSI on five-minute data changes the model.
  • Audit the displayed daily closes against the intended session. Futures settlement data, extended-hours data and regular-session closes can differ. A matching indicator name does not prove a matching data source.
The marks belong to setup days, not entry days. The interval guard does not detect synthetic candles; select standard candles manually.pine
//@version=6
indicator("Momentum Pinball daily setup check", overlay = false)
if not timeframe.isdaily or timeframe.multiplier != 1
    runtime.error("Use standard one-day candles.")

float netChange = close - close[1]
float pinball = ta.rsi(netChange, 3)
bool ready = barstate.isconfirmed and not na(pinball)
bool nextLong = ready and pinball < 30
bool nextShort = ready and pinball > 70

plot(ready ? pinball : na, "Daily net-change RSI(3)", color = color.blue)
hline(30, "Long setup threshold", color = color.green)
hline(70, "Short setup threshold", color = color.red)
plotshape(nextLong, title = "Next session long setup", style = shape.triangleup,
     location = location.bottom, color = color.green, size = size.tiny)
plotshape(nextShort, title = "Next session short setup", style = shape.triangledown,
     location = location.top, color = color.red, size = size.tiny)

Freeze a long-only research version

This is an untested adaptation for a US stock with regular-session five-minute candles. Use America/New_York time, a 09:30 to 16:00 session, one share, no pyramiding and sufficient capital. Use matching regular-session daily closes for the setup. Skip shortened sessions, missing opening-hour bars and symbols whose session does not match. Decide all costs before testing.

  • The 15:50 decision, fixed stop, one attempt and next-open exit are research choices. They replace discretionary trade management and must appear in the strategy name or test notes. There is no profit target in this version.
  • A five-minute bar labeled 10:25 ends at 10:30. Including the 10:30 bar in the opening range uses five extra minutes and changes when the order becomes available.
  • The scheduled next-open exit requires explicit implementation. A market order submitted at the final five-minute close normally fills on the next available tick; it must not accidentally close during the entry session or on an extended-hours bar.
  • Keep the IANA time zone and exchange calendar. A fixed UTC offset moves the opening window during daylight saving changes. Friday setups advance to the next trading session, not automatically Saturday.
StageExact research decision
Before the sessionWhile flat, use the last completed daily oscillator. Arm only if it is below 30. Carry no stale pending order from an earlier day.
09:30 through 10:30Build H and L from the twelve complete five-minute bars starting at 09:30 through 10:25. Freeze both at 10:30. Require H > L.
Entry windowAfter 10:30, submit a buy stop at H plus one minimum tick. It remains eligible until 15:50. Submit the linked protective stop at L with the pending entry so protection does not wait for a later bar close.
At 15:50After the bar ending at 15:50, cancel any unfilled entry before the next bar. If still flat, expire the setup. Do not re-enter after a stop in this version.
If a position is open at 15:50Compare that completed close with the actual entry fill. If close <= fill, submit a market exit for the next available fill. If close > fill, retain the position and fixed stop overnight. This profit test is gross of fees.
Next sessionFor a carried position, exit at the first executable regular-session open under a separately implemented scheduled exit. Keep protection active until the position closes. Do not open a second trade that session.

Worked trigger, loss and expiry cases

Assume the previous daily reading is 22.22, the next opening hour has H = $104.80 and L = $103.60, and the tick is $0.01. The pending buy stop is $104.81. Each row is an independent hypothetical branch, with one share and no claim about observed market results.

  • A bar that reaches both the buy stop and protective stop does not reveal their order from OHLC alone. Inspect lower-timeframe data and record the broker-emulator assumption. Do not automatically score it as an entry followed by a favorable move.
  • A rising market can keep the oscillator extreme, and a valid breakout can reverse. Keep losses from valid signals separate from calculation bugs, missing bars and expired orders.
BranchObservationRequired outcome
Trigger and stopPrice fills the buy at $104.81, then fills the protective stop at $103.60.Gross loss = $1.21. At assumed total round-trip costs of $0.04, net loss = $1.25.
No penetrationAll post-10:30 highs remain at or below $104.80 until 15:50.Zero fills. Cancel the pending order; a later rally cannot revive it.
Gap through entryAn eligible later bar opens at $105.10 beyond the pending stop.Use the executable fill, not $104.81. At a $105.10 fill, planned distance to L is $1.50 before costs.
Carry then gap downEntry fills at $104.81 and the 15:50 close is $105.20; the next regular session opens at $102.90.The gross carry condition passes, but an exit at $102.90 loses $1.91 before costs. The $1.21 planned stop distance was not a guaranteed loss cap.
Threshold boundaryPrevious daily RSI is exactly 30, or is undefined.No long setup, regardless of the later first-hour breakout.

Verify the setup before comparing parameters

Start with an event log containing daily reading, setup date, entry-session date, H, L, order creation, cancellation, fills and exit reason. Reconcile every branch above before examining returns. The daily indicator supplied here is only an input check; it is not the complete intraday strategy.

  • Ask Pine Script AI Coding Agent to implement the written long-only version, including session guards, pending-order expiry and the scheduled exit. Review the generated source, run syntax validation and check timestamps against the event log.
  • Once the baseline is correct, expose the long threshold and entry buffer as inputs. A predeclared comparison of thresholds 25, 30 and 35 with buffers of one and two ticks has six combinations. Keep RSI length 3, session and exits fixed. These are sensitivity tests, not recommended settings.
  • Strategy Optimizer can compare exposed strategy inputs through its TradingView extension. Select settings on earlier dates, freeze them, then evaluate a later untouched period separately. Reserve that period yourself and retain all six results.
  • Backtest Deep Report accepts supported TradingView trade CSV data. Review net profit, profit factor and drawdown calculated from closed-trade equity. Such a report cannot reconstruct unfilled setups or every intratrade loss; retain the separate event log and chart settings.
  • Include commission, slippage and overnight gaps in the comparison. No performance run is reported here. Code generation, syntax checks and parameter searches do not establish profitability or execute brokerage orders for this page.
Where Pineify fits

Pine Script AI Coding Agent

Turn the explicit session, trigger and expiry rules into a strategy draft, then review its source and verify each event against the worked cases.

Also useful: Strategy Optimizer. Compare declared threshold and tick-buffer inputs after validating the baseline. Keep later evaluation dates separate from parameter selection.

Draft the Momentum Pinball rules

Frequently asked questions

Educational strategy research, not investment advice. The rule adaptation and prices are illustrative, with no measured performance claim. Trading can lose money; gaps can exceed planned stop distances. Historical tests do not guarantee future results.

Sources and verification

Published by Pineify. Pineify is an independent product and is not affiliated with TradingView. Sources support the technical explanations; examples do not establish trading performance.