pine-patterns
Pine Script v5/v6 indicator scaffold and patterns. Provides structure guidance and triggers doc-researcher for current syntax verification. Use when developing TradingView indicators.
When & Why to Use This Skill
This Claude skill acts as a specialized development framework for TradingView Pine Script (v5/v6). It streamlines the creation of financial indicators by providing standardized scaffolds, architectural patterns, and automated syntax verification. By enforcing best practices like input grouping, session detection, and robust error handling, it helps developers build high-performance, institutional-grade trading tools with the latest Pine Script features.
Use Cases
- Rapidly scaffolding new TradingView indicators with standardized headers, licenses, and organized input groups for a professional user interface.
- Implementing complex financial calculations such as session-aware VWAP, multi-type moving averages (EMA, SMA, HMA), and persistent state variables across daily resets.
- Migrating legacy indicators to Pine Script v6 by utilizing the built-in syntax verification and doc-researcher triggers to handle deprecated functions and signature changes.
- Enhancing script reliability through pre-defined error handling patterns, including division-by-zero checks, NA value management, and resource limit optimizations (max_bars_back).
- Developing session-specific trading logic for futures markets (like /ES or /NQ) using precise time-zone detection and RTH (Regular Trading Hours) filters.
| name | pine-patterns |
|---|---|
| description | Pine Script v5/v6 indicator scaffold and patterns. Provides structure guidance and triggers doc-researcher for current syntax verification. Use when developing TradingView indicators. |
Pine Script Patterns
Lightweight scaffold for Pine Script v5/v6 indicator development.
Before Generating Code
ALWAYS use doc-researcher agent or Ref MCP tools to verify:
- Current function signatures
- v5 vs v6 syntax differences
- Deprecated functions
File Conventions
- Version header:
//@version=6(prefer v6) - License: Mozilla Public License 2.0
- File naming:
LB_*.pine - Author: Luther Barnum
Input Group Structure
Standard groups (use group= parameter):
"Feature Toggles" - Master enable/disable switches
"VWAP Settings" - VWAP configuration
"VWAP Bands" - Standard deviation band settings
"Session Settings" - Time-based parameters
"Initial Balance" - IB configuration
"Opening Range" - OR settings
"Pivot Points" - Pivot configuration
"Display Options" - Visual settings
"Colors" - Color configuration
Session Defaults
- RTH: 9:30 AM - 4:00 PM ET
- Timezone: America/New_York
- Detection:
time(timeframe.period, sessionString)
Resource Limits
Set appropriately:
max_bars_back- Historical data accessmax_labels_count- Label objects (default 500)max_lines_count- Line objects (default 500)
Complete Example
Reference: /Users/lgbarn/Personal/Indicators/Tradingview/LB_RH_MAs.pine
//@version=6
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © lgbarn
indicator('LB Simple MA Crossover', shorttitle='LB_MACross', overlay=true)
// === INPUTS ===
fastLength = input.int(9, "Fast MA Length", minval=1, group="MA Settings")
slowLength = input.int(21, "Slow MA Length", minval=1, group="MA Settings")
useLightTheme = input.bool(false, "Light Theme", group="Display")
// === CALCULATIONS ===
fastMA = ta.ema(close, fastLength)
slowMA = ta.sma(close, slowLength)
// === COLORS ===
fastColor = useLightTheme ? color.new(#0000FF, 0) : color.new(#00FFFF, 0)
slowColor = useLightTheme ? color.new(#FF0000, 0) : color.new(#FF6600, 0)
// === PLOTS ===
plot(fastMA, title="Fast MA", color=fastColor, linewidth=2)
plot(slowMA, title="Slow MA", color=slowColor, linewidth=2)
Key Patterns
Persistent State (Session Reset)
var float cumulativeValue = 0.0
var float sessionHigh = na
var float sessionLow = na
if ta.change(time("D")) != 0
cumulativeValue := 0.0
sessionHigh := high
sessionLow := low
Session Detection
// Check if in RTH session
isSessionTime = time(timeframe.period, "0930-1600:23456")
// Detect new session start
isNewSession = ta.change(time("D")) != 0
// Session with timezone
isRTH = not na(time(timeframe.period, "0930-1600", "America/New_York"))
Theme Colors
useLightTheme = input.bool(false, "Light Theme", group="Display")
lineColor = useLightTheme ? color.new(#000000, 0) : color.lime
fillColor = useLightTheme ? color.new(#000000, 90) : color.new(color.lime, 90)
VWAP Calculation Pattern
var float cumVolume = 0.0
var float cumVwap = 0.0
var float cumVwap2 = 0.0
if isNewSession
cumVolume := 0.0
cumVwap := 0.0
cumVwap2 := 0.0
cumVolume += volume
cumVwap += volume * hlc3
cumVwap2 += volume * hlc3 * hlc3
vwapValue = cumVolume > 0 ? cumVwap / cumVolume : na
variance = cumVolume > 0 ? cumVwap2 / cumVolume - vwapValue * vwapValue : na
stdev = variance > 0 ? math.sqrt(variance) : na
upperBand = vwapValue + stdev
lowerBand = vwapValue - stdev
Moving Average Patterns
// Simple Moving Average
smaValue = ta.sma(close, length)
// Exponential Moving Average
emaValue = ta.ema(close, length)
// Weighted Moving Average
wmaValue = ta.wma(close, length)
// Hull Moving Average
hmaValue = ta.hma(close, length)
Error Handling Patterns
Check for NA values
// Use nz() to replace NA with default
safeValue = nz(calculatedValue, 0.0)
// Check if value is valid before use
if not na(vwapValue)
plot(vwapValue, color=color.blue)
Validate inputs
// Ensure slow > fast
validatedSlow = math.max(slowLength, fastLength + 1)
Handle division by zero
divisor = high - low
result = divisor != 0 ? (close - low) / divisor : 0.5
Check bar history
// Ensure enough bars for calculation
if bar_index >= length - 1
// Safe to calculate
value = ta.sma(close, length)
Runtime errors (v6)
if period < 1
runtime.error("Period must be >= 1")
Trading Context
- Focus: /ES, /NQ futures
- Timeframe: 5-minute
- Key concepts: VWAP+1SD, TWAP, IB, Classic Pivots
- Approach: Institutional over retail patterns
External Libraries
Available imports:
import jmosullivan/SessionVolumeProfile/12 as SVPimport jmosullivan/Session/5 as Session
Documentation Sources
Use Ref MCP to search:
- TradingView Pine Script Reference
- Pine Script User Manual