PR

Claude CodeでPine Script開発を本格化する【CLAUDE.md・フォルダ設計・カスタムコマンド完全ガイド】

未分類

この記事でわかること

  • Claude Code CLIとチャットボット版Claudeの本質的な違い
  • Pine Script開発に最適なフォルダ構成とCLAUDE.mdの実装例(全文)
  • カスタムスラッシュコマンドとlearnings管理によるセッション間引き継ぎの仕組み

「Claudeにコードを貼って聞く」のと「Claude Codeでプロジェクトを構築する」のは、似て非なる作業です。前者はチャット画面にコードを貼り付けて返答をもらうだけ。セッションが変わればClaudeは何も覚えていない。後者はCLIツールとしてのClaude Codeがプロジェクトフォルダを丸ごと読み込み、前回のセッションの知見も引き継いで作業します。

この記事では、Pine Script開発に特化したClaude Codeプロジェクトの構築方法を解説します。CLAUDE.mdの実際の中身、フォルダ構成、カスタムコマンドまで、全部見せます。

📊 この記事はTradingViewユーザー向けです

TradingViewをまだ使っていない方は、まず無料アカウントを作成してみましょう。登録は30秒、クレジットカード不要です。

無料でTradingViewを始める →

Claude Code CLIとは何か

機能 Claude.ai(チャット) Claude Code(CLI)
ファイル読み込み 手動で貼り付けるだけ プロジェクトフォルダを自動で読む
セッション間の記憶 なし(毎回リセット) CLAUDE.mdとメモリファイルで引き継ぐ
複数ファイルの操作 不可 ファイルの作成・編集・参照が可能
カスタムコマンド なし .claude/commands/ で定義できる
起動方法 ブラウザ ターミナルで claude

Pine Script開発プロジェクトのフォルダ構成

tradingview-pine/
├── CLAUDE.md
├── .claude/
│   └── commands/
│       ├── new-indicator.md
│       ├── debug-error.md
│       └── review-code.md
├── indicators/
│   ├── completed/
│   └── wip/
├── strategies/
├── learnings/
│   ├── v5-syntax.md
│   ├── errors-and-solutions.md
│   └── tradingview-quirks.md
└── docs/
    └── session-log.md

CLAUDE.mdの設計(Pine Script特化版・全文)

# Pine Script v5 開発プロジェクト

## 言語・バージョン設定
- 使用言語: Pine Script v5(固定・v4は絶対に使わない)
- ファイル拡張子: .pine

## コーディング規則
### 必須ルール
1. 1行目は必ず //@version=5
2. var変数はグローバルスコープのみ
3. request.security()には[1] + barmerge.lookahead_on必須
4. 関数定義はスクリプトの先頭にまとめる

### 禁止事項(v4→v5 変換表)
v4(NG)→ v5(OK)
study() → indicator()
rsi() → ta.rsi()
ema() → ta.ema()
crossover() → ta.crossover()
security() → request.security()
input(type=input.integer) → input.int()

### 命名規則
- ローカル変数: camelCase
- 入力パラメータ: 末尾にLen/Pct/Lvl

## よく使うパターン(コピペ用)
### リペイントしないMTF取得
htfValue = request.security(syminfo.tickerid, "D", close[1], barmerge.lookahead_on)

### strategy()の最低限の設定
strategy("名前", overlay=true, initial_capital=1000000,
    default_qty_type=strategy.percent_of_equity, default_qty_value=10,
    commission_type=strategy.commission.percent, commission_value=0.05,
    slippage=1, pyramiding=0)

## ファイル構成と参照先
- 文法確認: learnings/v5-syntax.md
- エラーが出たとき: learnings/errors-and-solutions.md
- 完成済みコード: indicators/completed/

## 作業ルール
1. 新しいインジケーターを作るとき: indicators/wip/に保存
2. 動作確認後: indicators/completed/に移動
3. セッション終了前: learnings/に追記するよう依頼

このCLAUDE.mdを使うと、「Pine Script v5で書いて」「リペイント防止して」という指示が毎回不要になります。

カスタムスラッシュコマンドの設計

.claude/commands/フォルダにMarkdownファイルを置くと、/コマンド名として呼び出せます。

new-indicator.md(新規インジケーター作成コマンド)

---
description: Pine Script v5の新規インジケーターを仕様から作成する
---
以下の仕様でPine Script v5インジケーターを作成してください。
制約(CLAUDE.mdのルールに従う)://@version=5必須・var変数はグローバルスコープ・
request.security()は[1]+barmerge.lookahead_on・コードはindicators/wip/に保存
$ARGUMENTS
出力形式:1.ファイル名 2.完全なコード 3.貼り付け手順 4.追加できる機能3つ

使い方:/new-indicator RSI(14)が30を下回ったときに買いサイン表示。アラートも設定する。

debug-error.md(エラーデバッグコマンド)

---
description: TradingViewのエラーを診断して修正する
---
以下のエラーを診断して修正してください。$ARGUMENTS
手順:1.原因を1文で説明 2.修正後のコードを示す 3.learnings/errors-and-solutions.mdに追記

使い方:/debug-error "Cannot call 'rsi' with argument 'source'"

review-code.md(コードレビューコマンド)

---
description: 完成したPine Scriptコードをレビューしてcompletedに移動する
---
$ARGUMENTSのコードをレビューしてください。
チェック項目://@version=5・var変数配置・request.security()設定・max_xxx_count・minval/maxval
問題なければindicators/wip/からindicators/completed/に移動する。

learnings/ディレクトリの管理フロー

v5-syntax.md の実際の中身

# Pine Script v5 文法・関数リファレンス

## テクニカル指標(すべてta.プレフィックス)
ta.rsi(close, 14) / ta.ema(close, 20) / ta.sma(close, 200)
ta.atr(14) / ta.crossover(a, b) / ta.crossunder(a, b)
ta.macd(close, 12, 26, 9) → [macdLine, signalLine, hist]を返す
ta.pivothigh(src, leftBars, rightBars) → rightBars本後に判定が返る

## request.security(リペイントしない書き方)
htfVal = request.security(syminfo.tickerid, "D", close[1], barmerge.lookahead_on)
[htfSMA, htfRSI] = request.security(syminfo.tickerid, "D",
    [ta.sma(close, 200)[1], ta.rsi(close, 14)[1]], barmerge.lookahead_on)

errors-and-solutions.md の書き方

## 2026-06-03

### エラー: Cannot call 'rsi' with argument 'source'
原因: v4の書き方(rsi())を使った / 解決: ta.rsi(close, 14) に修正

### エラー: Cannot use 'request.security' in local scope of 'if'
原因: if/forブロック内に書いた / 解決: グローバルスコープに移動

### エラー: Study References Another Study
原因: overlay=falseでチャート価格を描画しようとした / 解決: overlay=trueに変更

実際のセッション例(起動から完成まで)

$ cd ~/tradingview-pine && claude

Claude Code が起動しました。CLAUDE.md を読み込みました。

You: /new-indicator 20EMAと200SMAのクロスを検出。上抜け=緑ラベル、下抜け=赤ラベル、アラート付き。

Claude: CLAUDE.mdのルールに従い作成します。
[indicators/wip/ema_sma_cross.pine を作成]

//@version=5
indicator("EMA×SMAクロス", overlay=true)
emaLen = input.int(20, "短期EMA", minval=1)
smaLen = input.int(200, "長期SMA", minval=1)
ema20  = ta.ema(close, emaLen)
sma200 = ta.sma(close, smaLen)
goldenCross = ta.crossover(ema20, sma200)
deadCross   = ta.crossunder(ema20, sma200)
plot(ema20, "20EMA", color=color.blue, linewidth=2)
plot(sma200, "200SMA", color=color.orange, linewidth=2)
if goldenCross
    label.new(bar_index, low, "GC", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)
    alert("ゴールデンクロス発生", alert.freq_once_per_bar)
if deadCross
    label.new(bar_index, high, "DC", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)
    alert("デッドクロス発生", alert.freq_once_per_bar)

You: TradingViewで動作確認できた。
Claude: /review-code ema_sma_cross を実行します。
[✓] //@version=5  [✓] var変数配置  [✓] minval設定
問題なし。indicators/completed/ に移動しました。

You: 今日学んだことをlearningsに追記して
Claude: learnings/v5-syntax.md に alert() の使い方を追記しました。

まとめ

実装ステップ

  1. tradingview-pine/ フォルダを作る
  2. CLAUDE.mdに禁止事項・パターン・ファイル参照を書く
  3. .claude/commands/ にカスタムコマンドを3本置く
  4. learnings/ ディレクトリを作り初期ファイルを用意する
  5. cd tradingview-pine && claude で起動

実際にインジケーターを動かして検証するにはTradingViewのアカウントが必要です。プランの選び方はTradingViewの有料プランはどれを選ぶ?を参考にしてください。完成したインジケーターの実装例はClaude Code × TradingViewでオリジナルインジケーターを作る完全ガイドにまとめています。

📊 TradingViewプラン比較

プラン 月額 主な特徴
Basic(無料) $0 1チャート・広告あり・インジケーター3つ
Essential $12.95〜 広告なし・インジケーター5つ・アラート20件
Plus ⭐人気 $24.95〜 インジケーター10個・アラート100件・同期チャート2つ
Premium $49.95〜 インジケーター25個・アラート無制限・同期チャート8つ
TradingViewを無料で始める

まずは無料プランで試して、必要なら有料プランへアップグレード

タイトルとURLをコピーしました