CommunitySchreiben & Editierengithub.com

jpantsjoha/pinescript-plugin

Pine Script v6-Fähigkeiten und MCP-Tooling für Coding-Agenten – unterstützt durch einen echten Validator, nicht durch Prosa.

Was ist pinescript-plugin?

Dieses Skill-Paket versetzt KI-Coding-Agenten in die Lage, korrekte Pine Script v6-Indikatoren und -Strategien für TradingView zu generieren, indem es ein echtes Validierungs- und Referenz-Toolset über das Model Context Protocol (MCP) bereitstellt. Es vermeidet typische Fehler wie das Raten von Parameternamen (z.B. `colour` statt `color`) und stellt sicher, dass Skripte tatsächlich kompilieren, bevor sie ausgegeben werden. Der Skill deckt kritische Konzepte ab: das einmalige Ausführungsmodell pro Balken, die Verwendung von `var` zur Beibehaltung von Zuständen, die korrekte Positionierung von `ta.*`-Funktionen außerhalb von Bedingungen, Anti-Repainting-Muster mit `lookahead=barmerge.lookahead_off`, überladene Konstruktoren (`line.new`, `label.new`, `box.new`), Plattformbeschränkungen und neuere API-Funktionen ab 2025. Er ist für Plattformen wie Claude Code, Cursor, Codex oder jeden MCP-kompatiblen Agenten konzipiert und liefert über `validate_pine_script` strukturierte Fehler mit Zeilennummern sowie über `lookup_pine_reference` exakte Funktionssignaturen.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add jpantsjoha/pinescript-plugin

Installed? Explore more Schreiben & Editieren skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Pine Script v6

Validieren, bevor du behauptest, es funktioniert

Pine scheitert zur Kompilierzeit auf Arten, die auf dem Bildschirm gut lesbar aussehen. Gib niemals ein Skript zurück, das du nicht überprüft hast.

validate_pine_script    # MCP-Tool – gibt strukturierte Fehler mit Zeilennummern zurück
lookup_pine_reference   # MCP-Tool – echte Signatur für jedes v6-Symbol

Wenn der MCP-Server nicht verfügbar ist, sage, dass das Skript unvalidiert ist, anstatt zu implizieren, dass es kompiliert.

Rate keine Parameternamen. lookup_pine_reference existiert, weil Raten der häufigste einzelne Fehler ist: colour für color erfinden, shape= für style=, oder textalign bei einer Funktion, die text_halign erwartet.

Das Ausführungsmodell bestimmt alles

Ein Skript wird einmal pro Balken ausgeführt, von links nach rechts durch die Historie, dann bei jedem Tick des live-Balkens.

// FALSCH – setzt jeden Balken zurück, also ist es immer 1
int count = 0
count := count + 1

// RICHTIG – `var` initialisiert einmal und bleibt bestehen
var int count = 0
count := count + 1

= deklariert. := weist neu zu. Zweimal = für denselben Namen ist ein Fehler.

ta.*-Funktionen müssen auf jedem Balken ausgeführt werden. Sie behalten internen Zustand, daher führt ein Aufruf innerhalb einer Bedingung stillschweigend zu Korruption:

// FALSCH – ta.sma schreitet nur fort, wenn die Bedingung wahr ist
value = condition ? ta.sma(close, 20) : na

// RICHTIG – unbedingt berechnen, dann auswählen
smaValue = ta.sma(close, 20)
value = condition ? smaValue : na

Überladene Konstruktoren

line.new, label.new und box.new akzeptieren jeweils zwei Formen. Beide sind gültig:

line.new(x1=bar_index[1], y1=low[1], x2=bar_index, y2=high)          // Koordinaten
line.new(first_point=chart.point.now(low), second_point=chart.point.now(high))

label.new(x=bar_index, y=high, text="hi")                            // Koordinaten
label.new(point=chart.point.now(high), text="hi")

box.new(left=bar_index[5], top=high, right=bar_index, bottom=low)    // Koordinaten
box.new(top_left=p1, bottom_right=p2)

Parameternamen unterscheiden sich je nach Funktion und können leicht verwechselt werden: label.new nimmt textalign entgegen; box.new und table.cell nehmen text_halign / text_valign.

Anti-Repainting

// REPAINT – der aktuelle höherzeitliche Balken bildet sich noch
d = request.security(syminfo.tickerid, "D", close)

// STABIL – der vorherige, abgeschlossene Balken
d = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_off)

Cache den Aufruf in einer Variable; wiederhole ihn niemals inline. Schütze Divisionen von security-abgeleiteten Werten mit nz().

Plattformbeschränkungen

GrenzwertWert
plot()-Aufrufe64
request.*()-Aufrufe40
Skriptgröße80.000 Tokens
Schleifenzeit500 ms
Zeichenobjekte500 je Linie/Label/Box (erhöhbar über max_*_count)

Seit 2025 hinzugefügte API – oft übersehen

FunktionVeröffentlicht
box.set_xloc()März 2025
active bei jedem input.*()Juli 2025
timeframe_bars_back bei time() / time_close()Okt. 2025
syminfo.isinNov. 2025
request.footprint(), footprint / volume_row-TypenJan. 2026
sort_field bei array.sort() / matrix.sort()Apr. 2026
Mehrzeilige Strings """…"""Apr. 2026
calc_on_every_history_tick bei strategy()Juli 2026

Regeln werden auch entfernt: TradingView hat die Einrückungsbeschränkungen für umgebrochene Zeilen im Dezember 2025 aufgehoben, sodass eine Fortsetzung mit vier Leerzeichen eingerückt oder gar nicht eingerückt legal ist. Überprüfe die Release Notes, bevor du behauptest, ein Symbol sei ungültig.

Skriptstruktur

//@version=6
indicator("Titel", overlay=true)     // oder strategy(...)
// imports -> typen -> konstanten -> eingaben -> funktionen
// -> berechnungen -> orders -> plots -> alerts

Häufige Kompilierungsfehler

NachrichtUrsache
end of line without line continuationNachgestellte Leerzeichen nach einem Operator oder ein unterbrochener umgebrochener Ausdruck
Undeclared identifierVariable nur innerhalb eines if zugewiesen; vorher mit var oder einem Standardwert deklarieren
Cannot call 'ta.sma' with 'series' wo simple erforderlichEin length-Argument muss simple int sein – Eingaben sind es, Serienwerte nicht
Mismatched input ... expecting= für Neuzuweisung verwendet, wo := erforderlich ist

Referenzen

Verwandte Skills