Indicator · Pine Script v6 · On the chart

Launch Pad Setup

by major

This indicator identifies consolidation by checking if the closing price stays within a user-defined percentage of three moving averages: a 21-period SMA, a 50-period SMA, and a 65-period EMA.

View on GitHub

Repaints

GitHub stars2on the repository
Pine versionv6current
Lines of code111
Settings12inputs
LicenceApache-2.0
Last update3 months ago29 Jul 2026

Add It to Your TradingView Chart

  1. 1Copy the scriptPress Copy script above, or the copy button on the code below.
  2. 2Open the Pine EditorOpen a TradingView chart and choose Pine Editor at the bottom of the screen.
  3. 3Paste over the templateCreate a new indicator, select all of the template text and paste. Press Save and give it a name.
  4. 4Add it to the chartPress Add to chart, then adjust the settings with the gear icon next to its name.

Source Code

111 lines of Pine Script v6 from launch_pad/launch_pad.pine, published under Apache-2.0. Keep the author's credit and licence lines when you reuse it.

launch_pad.pine
//@version=6
// Inspired by DeepVue's Launch Pad indicator
// https://deepvue.com/indicators/launch-pad-the-early-entry-technique/
indicator("Launch Pad Setup", shorttitle="Launch Pad", overlay=true, max_labels_count=500)

// =============================================================================
// LAUNCH PAD SETUP INDICATOR
// =============================================================================
// Reverse-engineered from DeepVue's Launch Pad indicator
// https://deepvue.com/indicators/launch-pad-the-early-entry-technique/
//
// The Launch Pad fires when price consolidates tightly near all three MAs,
// signaling a potential breakout. This equilibrium between buyers and sellers
// typically precedes a directional move.
//
// Signal Logic:
// - Closing price must be within threshold% of ALL THREE moving averages:
//   * 21-period Simple Moving Average (SMA)
//   * 50-period Simple Moving Average (SMA)
//   * 65-period Exponential Moving Average (EMA)
// =============================================================================

// === INPUTS ===
grpSignal = "Signal Settings"
threshold = input.float(3.0, "Proximity Threshold (%)", minval=0.5, maxval=10.0, step=0.5, group=grpSignal, tooltip="Price must be within this percentage of all three MAs to trigger signal")

grpMA = "Moving Averages"
showMAs = input.bool(false, "Show Moving Averages", group=grpMA)
ma1Length = input.int(21, "Fast SMA Length", minval=1, group=grpMA)
ma2Length = input.int(50, "Medium SMA Length", minval=1, group=grpMA)
ma3Length = input.int(65, "Slow EMA Length", minval=1, group=grpMA)

grpVisual = "Visual Settings"
signalColor = input.color(color.lime, "Signal Color", group=grpVisual)
showLabel = input.bool(false, "Show 'Launch Pad' Label", group=grpVisual)

grpMAColors = "Moving Average Colors"
ma1Color = input.color(color.new(color.blue, 30), "21 SMA Color", group=grpMAColors)
ma2Color = input.color(color.new(color.orange, 30), "50 SMA Color", group=grpMAColors)
ma3Color = input.color(color.new(color.purple, 30), "65 EMA Color", group=grpMAColors)

// === CALCULATE MOVING AVERAGES ===
sma21 = ta.sma(close, ma1Length)
sma50 = ta.sma(close, ma2Length)
ema65 = ta.ema(close, ma3Length)

// === LAUNCH PAD SIGNAL LOGIC ===
// Calculate percentage distance from each MA
thresholdDecimal = threshold / 100.0

dist21 = math.abs(close - sma21) / sma21
dist50 = math.abs(close - sma50) / sma50
dist65 = math.abs(close - ema65) / ema65

// Signal fires when price is within threshold of ALL THREE MAs
launchPadSignal = dist21 <= thresholdDecimal and dist50 <= thresholdDecimal and dist65 <= thresholdDecimal

// === PLOT MOVING AVERAGES ===
plot(showMAs ? sma21 : na, "21 SMA", color=ma1Color, linewidth=2)
plot(showMAs ? sma50 : na, "50 SMA", color=ma2Color, linewidth=2)
plot(showMAs ? ema65 : na, "65 EMA", color=ma3Color, linewidth=2)

// === PLOT SIGNAL ===
// Plot the signal marker (green X below candle, matching DeepVue style)
plotchar(launchPadSignal, title="Launch Pad Signal", location=location.belowbar, color=signalColor, char="🚀", size=size.tiny)

// Optional text label
if showLabel and launchPadSignal
    label.new(bar_index, low, "Launch Pad", style=label.style_label_up, color=color.new(signalColor, 80), textcolor=signalColor, size=size.small)

// === INFO TABLE ===
grpTable = "Info Table"
showTable = input.bool(true, "Show Info Table", group=grpTable)
tablePosition = input.string("top_right", "Table Position", options=["top_left", "top_center", "top_right", "middle_left", "middle_center", "middle_right", "bottom_left", "bottom_center", "bottom_right"], group=grpTable)

tablePos = switch tablePosition
    "top_left" => position.top_left
    "top_center" => position.top_center
    "top_right" => position.top_right
    "middle_left" => position.middle_left
    "middle_center" => position.middle_center
    "middle_right" => position.middle_right
    "bottom_left" => position.bottom_left
    "bottom_center" => position.bottom_center
    "bottom_right" => position.bottom_right
    => position.top_right

var table infoTable = table.new(tablePos, 2, 5, bgcolor=color.new(color.black, 80), border_width=1)

if showTable and barstate.islast
    // Header
    table.cell(infoTable, 0, 0, "Launch Pad", text_color=signalColor, text_size=size.small)
    table.cell(infoTable, 1, 0, launchPadSignal ? "ACTIVE" : "—", text_color=launchPadSignal ? signalColor : color.gray, text_size=size.small)
    
    // MA distances
    table.cell(infoTable, 0, 1, "21 SMA", text_color=ma1Color, text_size=size.tiny)
    table.cell(infoTable, 1, 1, str.tostring(dist21 * 100, "#.##") + "%", text_color=dist21 <= thresholdDecimal ? color.green : color.red, text_size=size.tiny)
    
    table.cell(infoTable, 0, 2, "50 SMA", text_color=ma2Color, text_size=size.tiny)
    table.cell(infoTable, 1, 2, str.tostring(dist50 * 100, "#.##") + "%", text_color=dist50 <= thresholdDecimal ? color.green : color.red, text_size=size.tiny)
    
    table.cell(infoTable, 0, 3, "65 EMA", text_color=ma3Color, text_size=size.tiny)
    table.cell(infoTable, 1, 3, str.tostring(dist65 * 100, "#.##") + "%", text_color=dist65 <= thresholdDecimal ? color.green : color.red, text_size=size.tiny)
    
    // Threshold
    table.cell(infoTable, 0, 4, "Threshold", text_color=color.white, text_size=size.tiny)
    table.cell(infoTable, 1, 4, str.tostring(threshold, "#.#") + "%", text_color=color.white, text_size=size.tiny)

// === ALERTS ===
alertcondition(launchPadSignal, title="Launch Pad Signal", message="{{ticker}}: Launch Pad setup detected - price within threshold of 21 SMA, 50 SMA, and 65 EMA")
alertcondition(launchPadSignal and not launchPadSignal[1], title="New Launch Pad Signal", message="{{ticker}}: NEW Launch Pad setup - early entry opportunity detected")

Overview

When the condition holds, it plots a green X marker below the candle and optionally adds a label. Users can enable or disable the moving averages and customize their colors, set the proximity threshold, and display an information table. The setup helps spot equilibrium points on the price chart that may precede moves. It repaints on the live bar.

Details

Published by

major on GitHub

Type

Indicator, Pine Script v6

Draws

On the price chart

Category

Moving averages, Breakout

Markets

Any symbol

Timeframes

Any timeframe

Risk Notes

  • Signals can change on the live bar or after it closes (repainting)

Settings

The inputs you can change from the gear icon on the chart. Defaults are the author's.

SettingTypeDefaultVariable
Proximity Threshold (%)float3.0threshold
Show Moving AveragesboolfalseshowMAs
Fast SMA Lengthint21ma1Length
Medium SMA Lengthint50ma2Length
Slow EMA Lengthint65ma3Length
Signal Colorcolorcolor.limesignalColor
Show 'Launch Pad' LabelboolfalseshowLabel
21 SMA Colorcolorcolor.new(color.blue, 30)ma1Color
50 SMA Colorcolorcolor.new(color.orange, 30)ma2Color
65 EMA Colorcolorcolor.new(color.purple, 30)ma3Color
Show Info TablebooltrueshowTable
Table Positionstringtop_righttablePosition
Third-party code. ForexR did not write, test or endorse this script, and the summary above was generated automatically from its code and README. Indicators describe the past, and a strategy's backtest can look better than live trading, especially when a script repaints. Check it in the Strategy Tester and on a demo account before you rely on it.

Similar Pine Scripts

Acceleration Bands

by capissimo
114 stars

Acceleration Bands is an overlay indicator that plots a volatility envelope around a central simple moving average. It calculates upper and lower boundary bands scaled by the high-to-low bar range relative to the midpoint price, smoothed by an SMA over a user-

Indicator v4 Volatility & bandsMoving averages
Updated 1 year ago · None stated GitHub repository of Acceleration Bands

RSC Trend Trading Study

by readysetcryptocodes
43 stars

This indicator plots Donchian Channels alongside fast and slow simple moving averages directly on the price chart. It generates bullish breakout signals when the high reaches the upper channel while the close is above the 50 SMA (and optionally the 200 SMA). B

Indicator v4 TrendBreakout
Updated 2 years ago · None stated GitHub repository of RSC Trend Trading Study

Candle Stage Analysis

by ChartsLector
41 stars

This indicator classifies market trends into structured stages based on moving average alignments, compression, and ATR distance from the 50-period SMA. It tracks multiple exponential moving averages against the 50 SMA to detect basing phases, breakouts, trend

Indicator v6 TrendMoving averages
Updated 2 days ago · None stated GitHub repository of Candle Stage Analysis

This indicator detects compressed corrective coils inside a higher-timeframe trend and signals when they resolve into clean directional breaks. It plots compression bands, fractal boxes, efficiency scores, and a light dashboard on the price chart. Signals clas

Indicator v6 Volatility & bandsSMC / ICT / price action
Updated yesterday · MIT GitHub repository of Compression Fractal Release [WavesUnchained]

5000x Breakout Scanner

by jmragsdale
8 stars

This indicator marks momentum breakouts on the price chart. A signal appears only when the bar makes a new high over the lookback, volume is at least a chosen multiple of the 20-bar average, the percentage change from the prior close meets a minimum, the close

Indicator v5 BreakoutVolume
Updated 7 weeks ago · None stated GitHub repository of 5000x Breakout Scanner

More indicators

Trade Your Charts With a Regulated Broker

Compare brokers that connect to TradingView, with spreads, minimum deposits and leverage side by side.

Compare brokers