Skip to content
Back to skills

Pinescript

ASecurity

Pine Script v6: syntax, performance, error diagnosis, backtesting, visualization. Use when writing or debugging `.pine` files or TradingView Pine indicators/strategies.

  • 11 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 10, 2026
testingrustgotestingdebuggingsecurityperformancedocumentation

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned September 10, 2026

npx -y skills add luokai0/ai-agent-skills-by-luo-kai --skill pinescript --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Pinescript?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Pinescript
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/luokai0-pinescript/badge)](https://www.skillsdirectory.com/skills/luokai0-pinescript)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: pinescript
class: language
description: >-
  Pine Script v6: syntax, performance, error diagnosis, backtesting,
  visualization. Use when writing or debugging `.pine` files or TradingView
  Pine indicators/strategies.
paths: "**/*.pine"
---

# Pine Script Development

**Verify before implementing**: For Pine Script version-specific syntax or new built-in functions, search current docs via `search_docs` before writing code. TradingView updates Pine Script frequently and training data may be stale.

## Critical Syntax Rules

- **Ternary operators MUST stay on one line** -- splitting across lines causes "end of line without line continuation" error. For complex ternaries, use intermediate variables:
  ```
  isBull = close > open
  barColor = isBull ? color.green : color.red
  ```
- **Continuation lines MUST be indented MORE than the starting line** -- same indentation = error
- **NEVER use plot() inside local scopes** (if/for/functions) -- use conditional value instead: `plot(condition ? value : na)`
- **barstate.isconfirmed** -- use to prevent repainting on real-time bars

## Platform Limits

500 bars history for `request.security()` | 500 plot calls | 64 drawing objects | 40 `request.security()` calls | 100KB compiled size

## Performance

- **Tuple security calls** -- one `request.security()` returning `[close, high, low]` instead of 3 separate calls
- Pre-allocate arrays with `array.new<type>(size)` instead of push-and-resize
- Short-circuit signals: build conditions incrementally, exit early when first condition fails
- Cache repeated calculations in variables -- Pine recalculates every bar

## Debugging

TradingView has no console or debugger. Use these patterns:

- **Label debugging**: `label.new(bar_index, high, str.tostring(myVar))` to inspect values
- **Table monitor**: `table.new()` with `barstate.islast` for real-time variable dashboard
- **Debug mode toggle**: wrap all debug code in `if input.bool("Debug", false)` -- remove before publishing
- **Repainting detector**: track `previousValue = value[1]`, flag when historical values change

## Strategy & Backtesting

- Use `strategy.*` functions: `strategy.wintrades`, `strategy.losstrades`, `strategy.grossprofit`
- Drawdown tracking: `maxEquity = math.max(strategy.equity, nz(maxEquity[1]))`, then `dd = (maxEquity - strategy.equity) / maxEquity * 100`
- Sharpe: `dailyReturn * 252 / (stdDev * math.sqrt(252))`
- **Walk-forward validation** -- optimize on period 1, test on period 2, re-optimize on period 2, test on period 3. If metrics degrade > 30%, parameters are overfit.
- **Indicator accuracy testing** -- use forward-looking `close[lookforward]` to measure prediction accuracy, track true/false positive rates

## Visualization

- `color.from_gradient()` for trend strength coloring
- Adaptive text sizing: `size.small` for intraday, `size.normal` for daily+
- Dynamic table rows -- resize based on enabled features via input toggles
- Professional color constants: define BULL_COLOR, BEAR_COLOR, NEUTRAL_COLOR once with transparency

## Publishing

- Documentation goes at TOP of .pine file as comments before `indicator()`/`strategy()`
- Use `@version`, `@description`, `@param` tags
- Multi-line tooltips: `tooltip="Line 1" + "\n" + "Line 2"`
- **TradingView House Rules**: no financial advice, no performance guarantees, no external links, no obfuscated code, no donation requests

## Common Coding Mistakes

- Indicator stacking (RSI + Stochastics + CCI) -- all measure the same thing (momentum). Use indicators from different categories instead.
- Overfitting parameters: if optimal values are oddly specific (RSI 23 instead of 20), the backtest is curve-fitted. Use round numbers and `input()` with sensible defaults.
- Missing `barstate.isconfirmed` guard -- calculations on unconfirmed bars cause repainting. Always guard entry signals.
- Hardcoded thresholds without `input()` -- makes the script untestable across instruments.

## Workflow

1. Write indicator/strategy in Pine Editor
2. Test with bar replay and strategy tester on multiple timeframes
3. Walk-forward validate before trusting backtest results (see Strategy & Backtesting above)
4. Verify: run on 3+ symbols and 2+ timeframes

## Verify

- Indicator compiles without errors on TradingView
- No repainting: `barstate.isconfirmed` guard present where needed
- Walk-forward tested on 3+ symbols across different timeframes

Files in this skill

  • SKILL.md4.3 KB
  • SPEC.md4.3 KB
  • references/evidence/findings-log.md1.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.