Communityライティング&編集github.com

jpantsjoha/pinescript-plugin

Pine Script v6のスキルとMCPツール——実際のバリデーターに基づいており、説明文だけではありません。コーディングエージェント向け。

pinescript-plugin とは?

このスキルは、AIエージェント(Claude Code、Cursor、Codexなど)がPine Script v6コードを正確に記述・検証できるようにするためのプラグインです。単なる説明文ではなく、実際のMCPツール(validate_pine_script と lookup_pine_reference)を提供し、コンパイルエラーやパラメータ名の誤りをリアルタイムで検出します。これにより、人間が読み間違えやすい構文の問題(例えば colour と color の混同)を防ぎます。また、Pine Scriptの実行モデル(バーごとに1回、履歴→ライブ)、repaint防止、プラットフォーム制限、2025年以降に追加された新機能など、開発者が陥りやすい罠を網羅しています。対応プラットフォームはTradingViewのPine Script v6です。

対応~Claude Code~Codex CLI~Cursor
npx skills add jpantsjoha/pinescript-plugin

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Pine Script v6

動作確認してから主張せよ

Pineはコンパイル時に、ページ上では問題なく読めてもエラーになる方法で失敗します。チェックしていないスクリプトを決して返してはいけません。

validate_pine_script    # MCPツール — 行番号付きの構造化エラーを返す
lookup_pine_reference   # MCPツール — v6の任意のシンボルの実際のシグネチャ

MCPサーバーが利用できない場合は、スクリプトがコンパイルされることを暗示するのではなく、未検証であると伝えてください。

パラメータ名を推測しないでください。 推測が最も一般的な失敗の原因であるため、lookup_pine_reference が用意されています:color を colour、style= を shape=、text_halign を期待する関数に textalign と発明することです。

実行モデルがすべてを決める

スクリプトはバーごとに1回、履歴全体を左から右へ実行し、その後ライブバーの各ティックで実行されます。

// 間違い — バーごとにリセットされるため、常に1になる
int count = 0
count := count + 1

// 正しい — `var` は一度初期化され、持続する
var int count = 0
count := count + 1

= は宣言。:= は再代入。同じ名前に = を2回使うとエラーになります。

ta.* 関数はすべてのバーで実行する必要があります。 これらは内部状態を保持するため、条件内で呼び出すと静かに状態を破壊します:

// 間違い — 条件が真のときだけ ta.sma が進む
value = condition ? ta.sma(close, 20) : na

// 正しい — 無条件に計算し、その後選択する
smaValue = ta.sma(close, 20)
value = condition ? smaValue : na

オーバーロードされたコンストラクタ

line.new、label.new、box.new はそれぞれ2つの形式を受け入れます。どちらも有効です:

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

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

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

パラメータ名は関数ごとに異なり、混同しやすいです:label.new は textalign、box.new と table.cell は text_halign / text_valign を取ります。

リペイント防止

// リペイントする — 現在の高時間枠のバーはまだ形成中
 d = request.security(syminfo.tickerid, "D", close)

// 安定 — 前の閉じたバー
d = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_off)

呼び出しを変数にキャッシュし、インラインで繰り返さないでください。security派生値を除算する場合は nz() でガードしてください。

プラットフォーム制限

制限値
plot() 呼び出し64
request.*() 呼び出し40
スクリプトサイズ80,000 トークン
ループ時間500 ms
描画オブジェクトライン/ラベル/ボックス 各500 (max_*_count で引き上げ可能)

2025年以降に追加されたAPI — 見落とされがち

機能リリース日
box.set_xloc()2025年3月
すべての input.*() に active2025年7月
time() / time_close() に timeframe_bars_back2025年10月
syminfo.isin2025年11月
request.footprint()、footprint / volume_row 型2026年1月
array.sort() / matrix.sort() に sort_field2026年4月
複数行文字列 """…"""2026年4月
strategy() に calc_on_every_history_tick2026年7月

ルールは削除もされています:TradingViewは2025年12月に折り返し行のインデント制限を撤廃したため、4スペースまたはインデントなしの継続行が合法になりました。シンボルが無効だと主張する前に、リリースノートを確認してください。

スクリプト構造

//@version=6
indicator("Title", overlay=true)     // または strategy(...)
// インポート -> 型 -> 定数 -> 入力 -> 関数
// -> 計算 -> 注文 -> プロット -> アラート

一般的なコンパイルエラー

メッセージ原因
end of line without line continuation演算子の後の末尾空白、または壊れた折り返し式
Undeclared identifierif 内だけで代入された変数;事前に var またはデフォルト値で宣言する
Cannot call 'ta.sma' with 'series' where simple requiredlength 引数は simple int でなければならない—入力はそれ、系列値はそうではない
Mismatched input ... expecting再代入が必要な場所で := の代わりに = が使用されている

参考文献

関連スキル