Indicator Scripts

Three indicators. Two languages. One discipline. The chart layer in copy-pasteable form.

The three indicators below are the framework’s chart layer in copy-pasteable form. WebullScript is the syntax of record. It is the language the framework actually runs against on the Webull SPX 1-minute and 5-minute charts. Pine Script is translation reference for traders on TradingView-native platforms; it has been written to compile under Pine Script v5 and is structurally faithful to the WebullScript original.

Each indicator appears below in canonical order (GEX Levels first, Expected Move second, Intraday HOD/LOD third), with the WebullScript block presented first and the Pine Script translation second. The order tracks the analytical sequence the framework prompts assume.

Strike values in every code block are placeholders. The premarket build resolves the day’s actual GEX levels from the chain data and the panel, and those values replace the placeholders before the indicator is loaded.

The indicators themselves are custom-created by the trader. Each is established once in the Webull Script Editor under a descriptive name (GEX Levels, Expected Move, Intraday HOD/LOD) and saved there. Every subsequent update is a copy-paste action: the AI generates the refreshed block from the day’s GEX data and the trader’s market read, the trader pastes it into the saved indicator, and Webull reloads the chart against the new values.

WebullScript conventions

The conventions below are the standing rules that govern the WebullScript code. They are not stylistic preferences; they are the working envelope inside which the framework treats the chart layer as reliable. Authoring outside these conventions is authoring outside the framework.

Pine Script translation discipline

The Pine Script blocks below are structurally faithful translations of the WebullScript indicators. They preserve the section ordering, the line-type conventions, the color assignments, and the placeholder strike values. They use Pine Script v5 syntax.

These blocks are reference material, not the operational record. Pine Script’s hline function and color constants behave differently from WebullScript’s in subtle ways: line styling is specified through line.style_dashed and line.style_solid rather than WebullScript’s hline.type_dashed; the available color palette is not identical; and Pine Script requires a version directive and an indicator declaration as the first non-comment lines, neither of which exists in WebullScript. Compile each block on your own TradingView build, load it on an SPX or SPY chart, and visually verify against a known-good WebullScript reference before relying on the Pine Script version during a live session.

GEX Levels

GEX Levels carries the full structural map for the session — the heaviest of the three indicators by code volume. The block is rebuilt every premarket from the day’s GEX analysis. Every named gamma level is plotted as a horizontal line at the price the level resolves to.

WebullScript

// GT & GB & Pin
hline(price=5400, name="GT", color=color.white, line_type=hline.type_solid, line_width=2)
hline(price=5395, name="GB", color=color.white, line_type=hline.type_solid, line_width=1)
hline(price=5405, name="PN", color=color.yellow, line_type=hline.type_solid, line_width=2)

// Resistance Zone
hline(price=5435, name="RT", color=color.red, line_type=hline.type_solid, line_width=1)
hline(price=5430, name="RB", color=color.red, line_type=hline.type_solid, line_width=1)

// Support Zone
hline(price=5380, name="ST", color=color.green, line_type=hline.type_solid, line_width=1)
hline(price=5375, name="SB", color=color.green, line_type=hline.type_solid, line_width=1)

// Danger Zone
hline(price=5360, name="DT", color=color.orange, line_type=hline.type_solid, line_width=1)
hline(price=5355, name="DB", color=color.orange, line_type=hline.type_solid, line_width=1)

// Walls
hline(price=5475, name="CW", color=color.maroon, line_type=hline.type_dashed, line_width=2)
hline(price=5325, name="PW", color=color.lime, line_type=hline.type_dashed, line_width=2)

Pine Script v5

//@version=5
indicator("GEX Levels", overlay=true)

// GT & GB & Pin
hline(5400, title="GT", color=color.white, linestyle=hline.style_solid, linewidth=2)
hline(5395, title="GB", color=color.white, linestyle=hline.style_solid, linewidth=1)
hline(5405, title="PN", color=color.yellow, linestyle=hline.style_solid, linewidth=2)

// Resistance Zone
hline(5435, title="RT", color=color.red, linestyle=hline.style_solid, linewidth=1)
hline(5430, title="RB", color=color.red, linestyle=hline.style_solid, linewidth=1)

// Support Zone
hline(5380, title="ST", color=color.green, linestyle=hline.style_solid, linewidth=1)
hline(5375, title="SB", color=color.green, linestyle=hline.style_solid, linewidth=1)

// Danger Zone
hline(5360, title="DT", color=color.orange, linestyle=hline.style_solid, linewidth=1)
hline(5355, title="DB", color=color.orange, linestyle=hline.style_solid, linewidth=1)

// Walls
hline(5475, title="CW", color=color.maroon, linestyle=hline.style_dashed, linewidth=2)
hline(5325, title="PW", color=color.lime, linestyle=hline.style_dashed, linewidth=2)

Put Wall substitution rule. When the published Put Wall is structurally invalid, far out of the money, or above the Call Wall, the indicator substitutes the nearest put gamma cluster below the gamma flip in its place. The substitution is silent on the chart and decided in the analysis upstream of the chart. The PW value loaded into the block reflects the resolution, not the published value.

Gamma flip resolution rule. When the published gamma profile and the raw level data disagree on where the gamma flip sits, the analysis resolves it the way the framework canon does: GT is the operative CSV zero-crossing nearest spot, the sign change within the expected-move band, and the smoothed panel Gamma Flip is read as corroboration, not as an override. Whatever the analysis settles on as that operative crossing becomes GT, and GT is the only flip line plotted in the GEX Levels block.

Expected Move

Expected Move plots the structural range boundary against the gamma flip. EM+ and EM− are derived from the at-the-money straddle priced at the open. GT is replicated from the GEX Levels block so the structural range boundary and the regime anchor are read in the same indicator pane without switching surfaces.

WebullScript

// Expected Move
hline(price=5430, name="EM+", color=color.teal, line_type=hline.type_dashed, line_width=1)
hline(price=5370, name="EM-", color=color.teal, line_type=hline.type_dashed, line_width=1)

// Gamma Flip
hline(price=5400, name="GT", color=color.white, line_type=hline.type_solid, line_width=2)

Pine Script v5

//@version=5
indicator("Expected Move", overlay=true)

// Expected Move
hline(5430, title="EM+", color=color.teal, linestyle=hline.style_dashed, linewidth=1)
hline(5370, title="EM-", color=color.teal, linestyle=hline.style_dashed, linewidth=1)

// Gamma Flip
hline(5400, title="GT", color=color.white, linestyle=hline.style_solid, linewidth=2)

Intraday HOD/LOD

Intraday HOD/LOD plots the running session high and the running session low — the lightest of the three indicators by code volume. The two lines are dashed in fuchsia to distinguish them visually from the GEX zone lines and from the EM boundaries. In operational use the values are updated as the session prints new extremes.

WebullScript

// Intraday HOD
hline(price=5418, name="HOD", color=color.fuchsia, line_type=hline.type_dashed, line_width=1)

// Intraday LOD
hline(price=5392, name="LOD", color=color.fuchsia, line_type=hline.type_dashed, line_width=1)

Pine Script v5

//@version=5
indicator("Intraday HOD/LOD", overlay=true)

// Intraday HOD
hline(5418, title="HOD", color=color.fuchsia, linestyle=hline.style_dashed, linewidth=1)

// Intraday LOD
hline(5392, title="LOD", color=color.fuchsia, linestyle=hline.style_dashed, linewidth=1)

A note on TradingView’s automatic HOD and LOD plotting. TradingView ships several built-in session-extreme indicators that update intraday automatically as price prints new extremes. A trader on TradingView may legitimately use one of those built-in indicators in place of the static-hline translation above. The framework’s only requirement is that the running session high and the running session low be visible without lookup; the mechanism by which the values land on the chart is the trader’s to choose.

Rebuild cadence and discipline

The three indicators do not share a rebuild cadence, and the difference is operationally meaningful.

The discipline that matters most is the synchronization between the GEX Levels GT line and the Expected Move GT line. If one updates and the other does not, the chart shows two regime anchors at different prices, which is a defect the prompts will not catch on the trader’s behalf. The standing rule is that GT updates touch both blocks in the same edit and the edit is not considered complete until both indicators have been reloaded on the chart.

Companion content

Three indicators, two languages, one chart. The framework’s structural map, made readable.