pine-patterns

Lightweight scaffold for Pine Script v5/v6 indicator development.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "pine-patterns" with this command: npx skills add lgbarn/trading-indicator-plugins/lgbarn-trading-indicator-plugins-pine-patterns

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

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

tradovate-patterns

No summary provided by upstream source.

Repository SourceNeeds Review
General

ninja-patterns

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

finishing-a-development-branch

No summary provided by upstream source.

Repository SourceNeeds Review