Claude Code Plugins

Community-maintained marketplace

Feedback

Pine Script v5/v6 indicator scaffold and patterns. Provides structure guidance and triggers doc-researcher for current syntax verification. Use when developing TradingView indicators.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

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 access
  • max_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 SVP
  • import jmosullivan/Session/5 as Session

Documentation Sources

Use Ref MCP to search:

  • TradingView Pine Script Reference
  • Pine Script User Manual