smithery.ai

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.

First seen Apr 3, 2026

Installation

$ npx skills add https://smithery.ai

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery.ai · top by installs.

npx skills add https://smithery.ai

Browse all from smithery.ai

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 5,180 B
  • docs SUMMARY.md 204 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 3 installs

SKILL.md

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:

  • maxbarsback - Historical data access
  • maxlabelscount - Label objects (default 500)
  • maxlinescount - Line objects (default 500)

Complete Example

Reference: /Users/lgbarn/Personal/Indicators/Tradingview/LBRHMAs.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 SVP
  • import jmosullivan/Session/5 as Session

Documentation Sources

Use Ref MCP to search:

  • TradingView Pine Script Reference
  • Pine Script User Manual