Smithery Logo
MCPsSkillsDocsPricing
Login
NewFlame, an assistant that learns and improves. Available onTelegramSlack
    lgbarn

    pine-patterns

    lgbarn/pine-patterns
    Coding
    4

    About

    SKILL.md

    Install

    • Telegram
      Telegram
    • Slack
      Slack
    • Claude Code
      Claude Code
    • Codex
      Codex
    • OpenClaw
      OpenClaw
    • Cursor
      Cursor
    • Amp
      Amp
    • GitHub Copilot
      GitHub Copilot
    • Gemini CLI
      Gemini CLI
    • Kilo Code
      Kilo Code
    • Junie
      Junie
    • Replit
      Replit
    • Windsurf
      Windsurf
    • Cline
      Cline
    • Continue
      Continue
    • OpenCode
      OpenCode
    • OpenHands
      OpenHands
    • Roo Code
      Roo Code
    • Augment
      Augment
    • Goose
      Goose
    • Trae
      Trae
    • Zencoder
      Zencoder
    • Antigravity
      Antigravity
    • Download skill
    ├─
    ├─
    └─
    Smithery Logo

    Give agents more agency

    Resources

    DocumentationPrivacy PolicySystem Status

    Company

    PricingAboutBlog

    Connect

    © 2026 Smithery. All rights reserved.

    About

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

    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:

    • 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
    Recommended Servers
    vastlint - IAB XML VAST validator and linter
    vastlint - IAB XML VAST validator and linter
    OpenZeppelin
    OpenZeppelin
    Nimble MCP Server
    Nimble MCP Server
    Repository
    lgbarn/trading-indicator-plugins
    Files