· 简体 · 繁體 · English · 한국어

AIが作成したPine Scriptでエラーが出る理由とは?主要論点と解決手順

ChatGPTの出力を TradingView のPine Editorに貼り付けた直後、赤いエラーが大量に表示されて困った経験はありませんか。このガイドでは代表的な12の問題を「症状 → 原因 → 解決」の順で整理し、AIにロジックを勝手に変えさせないための修正テンプレートと、8段階の人間検証フローを提供します。エラーメッセージや文法基準はPine Editorおよび 公式Pine Scriptドキュメント に準拠します。

AIコードを貼ると画面が赤エラーだらけになりますか?

よくある状況です。「EMAのゴールデンクロス通知スクリプトを作って」と依頼し、貼り付けて保存した瞬間に赤いエラーが連続表示されます。さらに厄介なのは、文法を直した後もシグナル位置がずれる、通知が鳴らない、Strategy Testerが空、再読み込み後に表示が変わるといったケースです。

これは珍しいことではありません。原因は主にバージョン、スクリプトタイプ、売買ロジックの解釈が重なって起きます。Pine Editorコンパイルエラー実行時エラー警告を分けて扱うため、「保存できるか」「実行できるか」「結果を信頼できるか」は別々に評価する必要があります。

デバッグ原則: AIに全コードを一気に書き直させない

「とにかく直して」とだけ依頼すると、エラーは減ってもロジックが変わったコードを返されやすくなります。

安全な順序は次のとおりです。

  1. Pine Scriptバージョンを先に固定する。
  2. indicatorstrategyかを先に確定する。
  3. Pine Editorのエラーを1行ずつ解消する。
  4. コンパイル通過後にチャートの意味を検証する。
  5. その後でアラート / Strategy Testerを確認する。
  6. 最後にリペイント、データ、タイムフレーム、実時間挙動を検証する。

宣言関数であるindicator()strategy()library()は種類ごとに利用可能機能とコンパイル制約が異なります。デバッグ前にスクリプトタイプを必ず確定してください。

問題1: Pine Scriptバージョンの混在

症状:

  • Could not find function or function reference / Undeclared identifier
  • The script must contain one declaration statement(宣言が壊れた場合に併発)
  • 先頭が//@version=5なのに本文はv6文法、またはv6要求なのにstudy()が残る

原因: バージョンごとに文法・互換ルールが異なり、AIが古いサンプルを混在させることが多いためです。v6には互換性へ影響する変更点があるため、バージョン行の差し替えだけでは不足します。

解決: 単一バージョンを固定し、AIへ移行だけを指示してください。例:

Convert this code to Pine Script v6 only.
Requirements:
1. First line: //@version=6.
2. Use indicator(), not study().
3. No v4/v5 syntax mixed in.
4. Keep the original signal logic; fix version and syntax only.

問題2: 宣言の欠落または宣言タイプの誤り

症状:

  • The script must contain one declaration statement
  • 1ファイル内にindicator(...)strategy(...)が同時に存在

原因: 宣言はコンパイラにスクリプト種別を伝える必須要素です。AIがコード断片を混ぜる過程で宣言が重複・欠落しやすくなります。

解決:

  • 可視化/通知目的なら:
    indicator("My Indicator", overlay=true)
  • バックテスト注文目的なら:
    strategy("My Strategy", overlay=true)

宣言は必ず1つにし、部分コードをそのまま全文として貼り付けないでください。

問題3: indicator と strategy の混同

症状:

  • indicator()スクリプト内でstrategy.entry() / strategy.close()を呼んでいる
  • 戦略を期待したのに実体がindicator()で、Strategy Testerが空になる

原因: 指標スクリプトはブローカーエミュレーターを動かしません。注文シミュレーションは戦略スクリプトに限定されます。チャートにBUY/SELLが表示されても、バックテスト可能な戦略とは限りません。

解決:

  • 通知専用ならstrategy.*を除去し、plot / plotshape / alertcondition中心で組む。
  • バックテスト目的ならstrategy()宣言で入口/出口を注文関数で明示し、「シミュレーション結果」である点を明確化する。

問題4: 関数未定義またはネームスペース誤り

症状: 'ema''rsi'が見つからない、crossover未定義などのエラーが出ます。

原因: 最新Pineでは多くの関数がta.*ネームスペースです。例: ta.ema()ta.rsi()ta.crossover()

fast = ta.ema(close, 20)
slow = ta.ema(close, 50)
bull = ta.crossover(fast, slow)
bear = ta.crossunder(fast, slow)

AIには存在しない関数の創作禁止全ネームスペースの検証を明示してください。

問題5: inputパラメータ利用の不整合

症状: Cannot call input.int with argument...、simpleが必要な箇所にseriesを渡す、UI変更が反映されない等が起こります。

fastLen = input.int(20, "Fast EMA Length", minval=1)
slowLen = input.int(50, "Slow EMA Length", minval=1)
fast = ta.ema(close, fastLen)

問題6: 型不一致(series / simple / bool)

症状: An argument of 'series ...' ... but 'simple ...' expected、またはローカルifブロック内でのplot呼び出しエラー。

解決: AIに型推論の根拠を説明させ、条件計算は先に行い、plotshape/plotはトップレベルスコープへ配置します。

問題7: 改行・インデント・括弧の不整合

症状: end of line without line continuationMismatched input...

signal = (
    close > emaFast and rsiVal > 50
)

問題8: 履歴参照または配列インデックス範囲超過

症状: 読み込み後にIndex is out of bounds、バッファ関連実行時エラーでスクリプトが停止します。

if array.size(myArr) > 0
    v = array.get(myArr, 0)

enoughBars = bar_index > 50
signal = enoughBars and close > close[50]

問題9: request.security() の使い方の誤り

症状: 履歴では完璧に見えるのに、実時間または再読込後にシグナルが変化し、上位足シグナルが下位足で先出し表示されるように見えることがあります。

Review request.security() for repainting risk:
1) Which timeframe is requested?
2) Are confirmed bars used?
3) No future data; if non-repaint cannot be guaranteed, state the risk clearly.

初学者はまず単一タイムフレームでの整合性を固め、その後にマルチタイムフレームを段階導入する方が安全です。

問題10: リペイントを見落とす

症状: エラーはなくても、シグナルが場中には出るのに終値確定で消える、または再読込で位置が変わります。

rawSignal = ta.crossover(fastMa, slowMa)
signal = rawSignal and barstate.isconfirmed

注意: barstate.isconfirmedは実時間の揺れを減らしますが、すべてのリペイントを解消するわけではありません

問題11: alertcondition / アラート挙動の不一致

症状: Conditionドロップダウンに項目が出ない、過剰通知、スクリプト修正後も古い意味で通知が動く。

alertcondition(bullSignal, title="Bull Signal", message="Up on {{ticker}}")
alertcondition(bearSignal, title="Bear Signal", message="Down on {{ticker}}")

問題12: 戦略は動くがバックテストを信用しにくいケース

症状: 損益曲線が不自然に滑らか、勝率が高すぎる、回転率が極端に高い、別銘柄で性能が急低下する。

Strategy Tester: 人間検証の重要項目(要約)
確認項目重要な理由
エントリー条件は明確か主観的な曖昧条件を排除できます。
決済/反転ルールは完結しているかAI戦略はエントリーのみで決済が弱いことが多いためです。
手数料とスリッページコスト未反映では短期損益が過大評価されます。
リペイントと未来データ履歴成績が非現実的に良く見える要因になります。
銘柄/時間軸の横断検証単一市場への過剰最適化を識別できます。
小規模の実時間観察約定と遅延の現実性を確認できます。

Pine Script v5 vs v6: AIが混在させやすい論点

テーマ旧版/混在パターン推奨アプローチ
宣言study()indicator()
指標+注文の混在混在実装目的を1つに固定して段階検証
TA関数ema()/rsi()ta.*接頭辞
パラメータハードコード定数input.*
マルチタイムフレーム不透明なsecurity()実装確定条件とリペイント境界を明示
トリガータイミング場中即時発火必要に応じてbarstate.isconfirmedを活用

AI修正プロンプトテンプレート(そのまま利用可)

Fix this TradingView Pine Script for me.

Requirements:
1. Use Pine Script v6.
2. Do not rewrite into a different strategy—fix errors and obvious syntax only.
3. If logic must change, explain why first.
4. Decide indicator vs strategy; if mixed, point it out and correct.
5. Check for v4/v5/v6 mixing.
6. Check missing functions, wrong namespaces, type mismatches, local scope errors.
7. Check repainting risk—especially request.security(), unconfirmed bars, future data.
8. If strategy, remind me backtests ≠ live trading; list fees, slippage, timeframe, data source to verify.
9. Output full copy-pasteable code.
10. End with a "changes made" bullet list.

TradingView error messages:
[paste full red errors from Pine Editor]

Original code:
[paste full Pine Script]

推奨される人間検証フロー

  1. Pine Editorで赤エラー0件を確認
  2. 宣言が目的と一致しているか確認
  3. チャート上の意味を目視検証
  4. 複数タイムフレームで再生検証
  5. 複数銘柄で再生検証
  6. 実時間バー挙動を観察
  7. Conditionドロップダウンでアラート作成テスト
  8. 戦略の場合はTesterのコスト・ポジション・データソース・過剰最適化を点検

まとめ: 問題はAIそのものより「階層的検証の欠落」

多くのエラーは曖昧な要件 + 古い情報の混在 + スクリプトタイプ制約の無視から始まります。順序を守ってください。バージョン → スクリプトタイプ → コンパイル → チャート意味 → アラート → バックテスト信頼性。最新仕様の確認は 公式Pine Scriptマニュアル を基準に行うのが最も安全です。

FAQ: AI生成Pine Scriptのエラー対処

AIが作成したPine Scriptでエラーが出たら、コードは全部捨てるべきですか?

いいえ。まず文法エラーとロジック/実行時問題を分離してください。公式ドキュメントもコンパイル、実行時、警告を別レイヤーで説明しています。

AIにはPine Script v5で依頼すべきですか?それともv6ですか?

新規スクリプトはv6優先で検討できますが、ファイル全体APIは1バージョンに統一する必要があります。移行は//@version行の変更だけでは完了しません。

インジケーターは表示されるのにStrategy Testerに取引が出ないのはなぜですか?

多くはindicator宣言のままだからです。Strategy Testerを使うにはstrategy()宣言と注文シミュレーション条件が必要です。

エラーはないのに再読込でシグナルが消えるのはなぜですか?

リペイント、未確定価格、request.security()の使い方、リアルタイムバーが履歴バー化する際の確定値差を合わせて点検する必要があります。

バックテスト成績が良ければすぐ実運用してもいいですか?

推奨されません。将来優位は保証されないため、コスト、サンプル、チャート種別、リペイント、過剰最適化を交差検証し、実時間観察を併用してください。