PR

TradingViewバーリプレイ検証の手順【記録コード付き】

TradingView

この記事でわかること

  • バーリプレイの起動から1本ずつ進めるまでの操作手順
  • 結果がぶれない手動フォワードテストの進め方(回数・期間の決め方)
  • 検証中の記録を助けるPine Scriptコード(損切り幅・R倍率を自動表示)

バックテストの成績は良いのに、いざ自分で同じルールを回すと勝てない。その差は「チャートの右端で判断できるか」にあります。過去チャート全体を見渡せる状態と、次の足が見えない状態では、同じルールでも下す判断が変わるからです。

TradingViewのバーリプレイは、この「右端の状態」を再現する機能です。この記事では、バーリプレイで手動フォワードテストを回す手順と、検証中の記録を補助するPine Scriptを紹介します。

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

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

無料でTradingViewを始める →

バックテストとバーリプレイは何を検証しているのか

どちらも過去データを使いますが、検証している対象が違います。

手法 検証している対象
strategyバックテスト ルール自体の期待値。人の判断は入らない
バーリプレイ(手動) そのルールを自分が実行できるか

バックテストが教えてくれるのは「このルールは過去に機能したか」です。一方で、含み損に耐えられるか、シグナルを見送らずに入れるかは分かりません。バーリプレイはそこを埋めます。

ルール自体の期待値をまず出したい段階なら、バックテストを実行する方法から始めるほうが早いです。ルールが固まったあとの最終確認としてバーリプレイを使う、という順番が実用的です。

ステップ1:バーリプレイを起動する

チャート上部のパネルにある「バーリプレイ」ボタンを押すと、リプレイモードに入ります。ビデオの「巻戻し」記号に似たアイコンです。再生ボタンではないので、探すときは巻戻しの形を目印にしてください。

  1. 「バーリプレイ」ボタンをクリックする
  2. ハサミの付いた青い縦線が現れるので、検証を始めたい日時のバーをクリックする
  3. クリックした位置から右のバーが隠れ、そこがチャートの右端になる
  4. 「進む」ボタンで1本ずつ送る(再生ボタンは自動送りなので使わない)

手動フォワードテストでは自動再生を使わないでください。再生させると、判断する前に足が進んでしまいます。1本ずつ送り、そのつど「今エントリーするか」を決めるのが検証の本体です。

ショートカットを覚えると速く回せます。Shift + → でバーを1本進め、Shift + ↓ で再生と一時停止を切り替えます。矢印キー単体では動かないので、Shiftとの組み合わせで押してください。

開始点はクリック以外にも選べます。リプレイパネルのドロップダウンから「日時を選択」で特定日を指定できます。「ランダムに選択」を使うと、結果を知らないバーから始められます。自分が値動きを覚えている局面を避けたいなら、ランダム選択のほうが検証として正直です。終了して現在に戻るときは「現在のバーにジャンプ」を押します。

無料プランでは日足までしか検証できない

ここが最初にぶつかる壁です。バーリプレイ自体は無料プラン(Basic)でも使えますが、使えるのは日足以上に限られます。分足・時間足の過去データがBasicには割り当てられていないため、日中足のリプレイは事実上できません。

プラン 分足の過去データ 秒足の過去データ
Basic(無料) × ×
Essential 180日 ×
Plus 365日 ×
Premium / Ultimate すべて すべて

日足以上の過去データはどのプランでも「すべて」使えます。スイングトレードのルールを日足で検証するだけなら、無料プランで足ります。

一方、1時間足や15分足で検証したいなら有料プランが要ります。ここで注意したいのがEssentialの180日という上限です。1時間足で30トレード分のシグナルを集めるには半年前後を見ておきたいので、180日だとぎりぎり届かない場面が出ます。時間足で腰を据えて検証するならPlus(365日)以上が現実的です。プランごとの差は有料プランの選び方で比較しています。

分足で過去まで遡るときのコツ

有料プランでも、いきなり1分足でリプレイを始めようとすると遠い過去を開始点に選べません。公式が案内している手順は、いったん日足に切り替えてから開始点を選び、そのあと下位足に切り替えるというものです。

  1. 日足に切り替え、リプレイモードをオンにする
  2. 「バーを選択」で開始したい日をクリックする
  3. 1分足など目的の時間足に切り替える
  4. 「進む」ボタンで送り始める

この順番を踏まないと、チャート左下に「データポイントが利用できません」と出て時間足が変わりません。知らないと詰まるポイントです。

ステップ2:検証プロトコルを先に決める

バーリプレイで最も多い失敗は、ルールを途中で変えてしまうことです。負けが続くと「ここはフィルターを足すべきだった」と手が動きます。それをやると、ただ過去チャートに曲線を当てはめているだけです。

始める前に、次の4点を紙かメモに書き出して固定してください。

  • 検証回数:最低30トレード。20回以下だと連勝・連敗の偶然に飲まれます
  • 対象と時間足:1銘柄・1時間足なら3〜6か月分あればおおむね30回に届きます
  • エントリー条件:迷ったら見送りではなく、迷わない粒度まで言語化する
  • 損切りと利確:値幅を固定する。ATRの1.5倍で切り、3.0倍で利確、のように決め打ちする

ルールを変えたくなったら、その回で検証を打ち切って最初からやり直します。同じデータで条件だけ差し替えるのは検証ではありません。

TradingViewで実際に試してみよう

この記事の内容はTradingViewで今すぐ実践できます。無料プランでも十分対応できます。

▶ TradingViewを無料で開く

クレジットカード不要・いつでも解約OK

ステップ3:記録を補助するPine Scriptを入れる

1本ずつ送りながら手で損切り幅を計算するのは、かなり続きません。エントリー価格・損切り・利確・現在のR倍率をチャート右上に出しておくと、記録がそのまま写すだけです。

下のコードは、EMAクロスを検証ルールの例として、判断に必要な数値をテーブル表示します。ルール部分だけ自分の条件に差し替えて使ってください。

//@version=5
indicator("バーリプレイ検証ヘルパー", overlay=true)

// ── 入力(検証プロトコルの数値をここで固定する)
fastLen = input.int(20,  "短期EMA", minval=1)
slowLen = input.int(50,  "長期EMA", minval=1)
atrLen  = input.int(14,  "ATR期間", minval=1)
slMult  = input.float(1.5, "損切り幅(ATR倍)", step=0.1)
tpMult  = input.float(3.0, "利確幅(ATR倍)",   step=0.1)

// ── 検証したいルール(この2行を自分の条件に差し替える)
emaFast = ta.ema(close, fastLen)
emaSlow = ta.ema(close, slowLen)
longSig  = ta.crossover(emaFast, emaSlow)
shortSig = ta.crossunder(emaFast, emaSlow)

plot(emaFast, "EMA fast", color=color.aqua)
plot(emaSlow, "EMA slow", color=color.orange)
plotshape(longSig,  title="買い", style=shape.triangleup,
          location=location.belowbar, color=color.green, size=size.tiny)
plotshape(shortSig, title="売り", style=shape.triangledown,
          location=location.abovebar, color=color.red,   size=size.tiny)

// ── 直近シグナルを保持する
atr = ta.atr(atrLen)
var float entryPrice = na
var int   entryBar   = na
var int   dir        = 0        // 1=買い / -1=売り / 0=なし

if longSig
    entryPrice := close
    entryBar   := bar_index
    dir        := 1
if shortSig
    entryPrice := close
    entryBar   := bar_index
    dir        := -1

// ── 損切り・利確・現在のR倍率を計算する
riskWidth = atr * slMult
slPrice = dir ==  1 ? entryPrice - riskWidth :
          dir == -1 ? entryPrice + riskWidth : na
tpPrice = dir ==  1 ? entryPrice + atr * tpMult :
          dir == -1 ? entryPrice - atr * tpMult : na
rMult   = dir == 0 or na(entryPrice) ? na : (close - entryPrice) * dir / riskWidth

// ── 記録用テーブル
var table t = table.new(position.top_right, 2, 7, border_width=1)
if barstate.islast
    table.cell(t, 0, 0, "項目", bgcolor=color.new(color.blue, 60), text_color=color.white)
    table.cell(t, 1, 0, "値",   bgcolor=color.new(color.blue, 60), text_color=color.white)
    table.cell(t, 0, 1, "日時")
    table.cell(t, 1, 1, str.format_time(time, "yyyy-MM-dd HH:mm", syminfo.timezone))
    table.cell(t, 0, 2, "方向")
    table.cell(t, 1, 2, dir == 1 ? "買い" : dir == -1 ? "売り" : "—")
    table.cell(t, 0, 3, "エントリー")
    table.cell(t, 1, 3, na(entryPrice) ? "—" : str.tostring(entryPrice, format.mintick))
    table.cell(t, 0, 4, "損切り")
    table.cell(t, 1, 4, na(slPrice) ? "—" : str.tostring(slPrice, format.mintick))
    table.cell(t, 0, 5, "利確")
    table.cell(t, 1, 5, na(tpPrice) ? "—" : str.tostring(tpPrice, format.mintick))
    table.cell(t, 0, 6, "現在R / 経過")
    table.cell(t, 1, 6, na(rMult) ? "—" :
               str.tostring(rMult, "#.##") + "R / " +
               str.tostring(bar_index - entryBar) + "本")

値を保持するしくみ

  • varで直近シグナルを保持するvarを付けた変数はバーをまたいで値が残ります。これでクロスした足の価格を覚えておけます

計算と表示のポイント

  • R倍率=含み損益÷損切り幅(close - entryPrice) * dir / riskWidthで、買い・売りをまとめて計算しています。0.5Rで利確する癖などが数字で見えます
  • barstate.islastの中で描画する:テーブルは最終バーだけ更新すれば十分です。全バーで書き換えると重くなります

ルール部分をClaudeに書かせて差し替えるのも手です。プロンプトの組み立て方はstrategy設計とバックテストの完全実装ガイドで解説しています。

バーリプレイで結果が歪む2つの罠

罠1:上位足のインジケーターが未来を見ている

バーリプレイは右のバーを隠しますが、すべてのインジケーターが正しく過去だけを見ている保証はありません。とくにrequest.security()で上位足を参照している場合は注意が必要です。設定によっては未確定の上位足データを掴み、リプレイ中でも未来を先取りした線が引かれます。

これはバックテスト成績が異常に良くなる典型的な原因です。仕組みと回避コードはリペイント問題の解説にまとめています。上位足を使うルールを検証するなら、先にこちらを潰してください。

罠2:足の中の値動きが見えない

TradingViewは1本のバーをさらに細かく分割したリプレイには対応していません。つまり1時間足でリプレイすると、その1時間の中で価格がどう動いたかは分かりません。高値と安値のどちらに先に触れたかが不明なため、損切りと利確の両方に届く足では勝ち負けを判定できません。

対策はシンプルで、そういう足は「判定不能」として記録から外すことです。都合よく利確側とみなすと、成績が実態から離れます。どうしても判定したい場合は、その局面だけ下位足に切り替えて順番を確認します。

先に知っておきたい制約

ほかにも、検証の途中で気づくと面倒な制約があります。

  • リプレイ中はサーバー型アラートを新規作成できない:アラートで通知を受けながら検証する、という使い方はできません
  • 一部のチャートタイプでは動作しない:練行足・カギ足・ポイント&フィギュア・レンジ・新値足などは対象外です
  • 「回帰トレンド」と「固定期間出来高プロファイル」は無効:この2つをルールに組み込んでいる場合は検証できません

逆に助かる仕様もあります。バーリプレイは終了時にセッションを自動保存するため、次に開いたとき前回の続きから再開できます。記憶されるのはシンボル・時間足・最後に表示したバーの日時・リプレイ設定の4つです。30トレードを何日かに分けて消化する使い方と相性がいい仕様です。

こんな場合はバーリプレイは向かない

  • 完全自動売買のルールを作る場合:人の判断が入らないなら、strategyのバックテストのほうが速く正確です
  • ルールがまだ固まっていない場合:試行錯誤の段階では手動送りは時間がかかりすぎます。先にコードで期待値を確認しましょう
  • 数百回の試行が必要な場合:手動では現実的に30〜50回が限界です。統計的な検証はコードに任せる領域です

まとめ

  • バーリプレイは「ルールの期待値」ではなく「自分がルールを実行できるか」を検証する機能
  • 始める前に検証回数(最低30回)・時間足・損切り幅を固定し、途中で変えない
  • 記録ヘルパーで損切り幅とR倍率を自動表示すると、検証が続けやすくなる
  • 上位足参照のリペイントと、足の中の値動きが見えない点だけは先に潰しておく
  • 無料プランは日足まで。分足・時間足で検証するならEssential以上(180日)、腰を据えるならPlus以上(365日)

手動での検証は30〜50回が限界です。ルール自体をもっと多くのデータで確かめたくなったら、バックテストの実行方法に進むのが自然な流れです。

日足での検証なら無料プランで今すぐ試せます。分足・時間足でバーリプレイを回したくなったら、有料プランで過去データが解放されます(Essential 180日/Plus 365日/Premium以上はすべて)。

📊 TradingViewプラン比較

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

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

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