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.*() に active | 2025年7月 |
time() / time_close() に timeframe_bars_back | 2025年10月 |
syminfo.isin | 2025年11月 |
request.footprint()、footprint / volume_row 型 | 2026年1月 |
array.sort() / matrix.sort() に sort_field | 2026年4月 |
複数行文字列 """…""" | 2026年4月 |
strategy() に calc_on_every_history_tick | 2026年7月 |
ルールは削除もされています:TradingViewは2025年12月に折り返し行のインデント制限を撤廃したため、4スペースまたはインデントなしの継続行が合法になりました。シンボルが無効だと主張する前に、リリースノートを確認してください。
スクリプト構造
//@version=6
indicator("Title", overlay=true) // または strategy(...)
// インポート -> 型 -> 定数 -> 入力 -> 関数
// -> 計算 -> 注文 -> プロット -> アラート
一般的なコンパイルエラー
| メッセージ | 原因 |
|---|---|
end of line without line continuation | 演算子の後の末尾空白、または壊れた折り返し式 |
Undeclared identifier | if 内だけで代入された変数;事前に var またはデフォルト値で宣言する |
Cannot call 'ta.sma' with 'series' where simple required | length 引数は simple int でなければならない—入力はそれ、系列値はそうではない |
Mismatched input ... expecting | 再代入が必要な場所で := の代わりに = が使用されている |