この記事でわかること
- indicator()とstrategy()の違いと、バックテスト用スクリプトを設計する手順
- エントリー・エグジット・ポジションサイジング・手数料設定の実装パターン
- バックテスト結果で見るべき6指標と、Claudeを使った改善サイクルの回し方
インジケーターでシグナルを確認する段階から、実際に「このロジックは過去どれだけ機能したか」を数値で検証する段階へ進むには、Pine ScriptのStrategy機能が必要です。
ただ、strategy()の設計はindicator()より複雑で、手数料・スリッページ・ポジションサイズの設定を適切に行わないとバックテスト結果が実態からかけ離れます。この記事では、Claudeとのやり取りで設計品質を確保するためのプロンプト設計と、実際のバックテスト結果の読み方を解説します。
📊 この記事はTradingViewユーザー向けです
TradingViewをまだ使っていない方は、まず無料アカウントを作成してみましょう。登録は30秒、クレジットカード不要です。
無料でTradingViewを始める →indicator()とstrategy()の違い
| 項目 | indicator() | strategy() |
|---|---|---|
| 用途 | シグナル・ゾーンの描画 | エントリー・エグジットのバックテスト |
| 使える関数 | plot / label / line / box など | strategy.entry / strategy.exit / strategy.close など |
| 手数料・スリッページ設定 | なし | あり(戦略の現実性に直結) |
| ポジション管理 | なし | あり(1トレードあたりの資金配分を制御) |
strategy()の宣言で設定すべき項目
//@version=5
strategy(
title = "戦略名",
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 = 2
)
この設定を省いたまま動かすと、手数料ゼロ・スリッページゼロの非現実的な条件でバックテストが走ります。
Claudeへのプロンプト:strategy()設計の必須指定
Pine Script v5でstrategy()を使ったバックテストスクリプトを書いてください。
【戦略の基本設定】戦略名:"MA×RSI戦略"、overlay=true、初期資金:1,000,000円
ポジションサイズ:資金の10%(strategy.percent_of_equity)
手数料:片道0.05%(strategy.commission.percent)、スリッページ:1 tick
【エントリー条件(買い)】終値 > 200SMA、終値が20EMAを上抜け(ta.crossover)、RSI(14) > 50
【エグジット条件】損切り:エントリーから2%下落、利確:4%上昇、EMA下抜けで強制クローズ
買いエントリーのみ(ショートなし)、pyramiding=0
完成コード:MA×RSI戦略
//@version=5
strategy(
title = "MA×RSI戦略", 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
)
emaLen = input.int(20, "短期EMA期間")
smaLen = input.int(200, "長期SMA期間")
rsiLen = input.int(14, "RSI期間")
rsiFilter = input.int(50, "RSIフィルター閾値")
stopPct = input.float(2.0, "損切り幅(%)", minval=0.1)
tpPct = input.float(4.0, "利確幅(%)", minval=0.1)
ema20 = ta.ema(close, emaLen)
sma200 = ta.sma(close, smaLen)
rsiVal = ta.rsi(close, rsiLen)
longEntry = close > sma200 and ta.crossover(close, ema20) and rsiVal > rsiFilter
longExit = ta.crossunder(close, ema20)
if longEntry
strategy.entry("Long", strategy.long)
strategy.exit("Long Exit", from_entry="Long",
stop=strategy.position_avg_price * (1 - stopPct / 100),
limit=strategy.position_avg_price * (1 + tpPct / 100))
if longExit and strategy.position_size > 0
strategy.close("Long", comment="EMA下抜け")
plot(ema20, "20EMA", color=color.blue, linewidth=2)
plot(sma200, "200SMA", color=color.orange, linewidth=2)
TradingViewで実際に試してみよう
この記事の内容はTradingViewで今すぐ実践できます。無料プランでも十分対応できます。
▶ TradingViewを無料で開くクレジットカード不要・いつでも解約OK
バックテスト結果の読み方:見るべき6指標
| 指標 | 目安 | 意味 |
|---|---|---|
| 純利益(Net Profit) | プラス | 期間全体の損益 |
| プロフィットファクター(PF) | 1.5以上 | 総利益 ÷ 総損失 |
| 勝率(Win Rate) | 50%以上が目安 | 勝ちトレードの割合 |
| 最大ドローダウン(Max DD) | 純利益の50%未満 | 資産曲線の山から谷までの最大下落幅 |
| トレード回数 | 30回以上 | 統計的な信頼性の最低ライン |
| シャープレシオ | 1.0以上 | リスク調整後の効率性 |
⚠️ 過学習(オーバーフィッティング)に注意
パラメータを調整して特定の期間に合わせすぎると、未来のデータでは機能しなくなります。まずロジックを固定してから広い期間でテストするのが基本です。
Claudeを使った改善サイクルの回し方
現在のMA×RSI戦略のバックテスト結果:純利益+12.3%、PF:1.31、勝率:48%、最大DD:-18.2%、94回
PFが1.5未満で最大ドローダウンが大きい。改善のためにコードに追加できるフィルター条件を3つ提案してください。
strategy()設計でよくあるエラー
| エラー | 原因 | 対処 |
|---|---|---|
| strategy.entry / exitが反応しない | 条件式がすべてfalse | 「条件確認のためplotshapeを追加して」 |
| PFが高すぎる(10以上) | 手数料・スリッページがゼロ設定 | 「commission_value=0.05、slippage=1を追加して」 |
| バックテストと実運用で結果が違う | リペイント | 「シグナル条件に[1]を付けて前バーの確定値のみ使うように変更して」 |
まとめ
strategy()の設計で最初に時間をかけるべきは「手数料・スリッページ・ポジションサイズの現実的な設定」です。Claudeへのプロンプトにこの3点を明示するのが、バックテストの品質を確保する最短ルートです。
バックテストを継続的に回す場合は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つ |
まずは無料プランで試して、必要なら有料プランへアップグレード

