TradingViewスクリプトで優位性ある戦略を作る方法:検証から運用判断までの実践ガイド

システムトレード
スポンサーリンク
【DMM FX】入金

TradingViewスクリプトは「売買アイデアを検証する道具」である

TradingViewはチャートを見るためのツールとして使われることが多いですが、本当に価値が出るのは、売買アイデアをスクリプト化して検証できる点です。多くの個人投資家は、チャートを見ながら「この形は上がりやすい」「この移動平均線を割ったら弱い」と判断します。しかし、目視の判断だけでは再現性がありません。たまたま印象に残った成功例だけを覚え、失敗例を忘れてしまうからです。

そこで重要になるのが、TradingViewのPine Scriptを使ってルールを明文化することです。たとえば「20日移動平均線を上回っている」「直近20本の高値を更新した」「出来高が平均の1.5倍以上」「損切りは直近安値割れ」という条件をコードに落とし込めば、過去チャート上で同じ条件を機械的に検証できます。これにより、感覚ではなくデータを基準に戦略を評価できます。

ただし、ここで勘違いしてはいけません。TradingViewでバックテストをしたからといって、将来の利益が保証されるわけではありません。バックテストは未来予測ではなく、仮説検証です。目的は「完璧な聖杯を見つけること」ではなく、「明らかに期待値が低い売買を排除し、勝ちやすい条件を絞り込むこと」です。この視点を持てるかどうかで、スクリプト活用の成果は大きく変わります。

優位性ある戦略に必要な3つの条件

優位性のある戦略とは、単に過去の成績が良い戦略ではありません。少なくとも、論理的根拠、統計的な確認、運用可能性の3つが必要です。この3つのうち1つでも欠けると、実際の売買では機能しにくくなります。

1. なぜその条件で利益が出るのか説明できる

まず、戦略には市場構造に基づいた理由が必要です。たとえばブレイクアウト戦略であれば、「一定期間の高値を超えた銘柄には、損切り注文の巻き戻し、新規買い、ショートカバーが同時に入りやすい」という需給面の説明ができます。移動平均線の押し目買いであれば、「上昇トレンド中の短期的な利益確定を拾う」という説明ができます。

一方で、「RSIが37.5を下回ったら買い、64.2を超えたら売ると過去成績が良かった」というだけでは危険です。数値を細かく調整した結果、過去データにだけ合った可能性が高いからです。数値は多少変わっても機能する必要があります。優位性とは、ピンポイントの魔法の数字ではなく、市場参加者の行動から説明できる構造です。

2. 複数の相場局面で致命傷を避けられる

強い戦略ほど、特定局面で爆発的に勝つだけでなく、苦手局面で大きく負けない構造を持っています。たとえばトレンドフォローは上昇相場や下落相場の一方向の動きには強いですが、横ばい相場ではダマシが増えます。逆張りはレンジ相場では機能しやすい一方、強いトレンドに逆らうと損切りが連続します。

したがって、TradingViewで戦略を作る場合は、勝てる局面だけを見るのではなく、負ける局面の損失をどこまで抑えられるかを確認する必要があります。成績表では純利益よりも、最大ドローダウン、連敗回数、プロフィットファクター、勝率、平均損益、保有期間を同時に見ます。特に最大ドローダウンは重要です。利益が大きくても、途中で資金の40%を失う戦略は、多くの投資家にとって実運用が難しいからです。

3. 実際に発注できるルールになっている

バックテスト上では勝っていても、実際に執行できない戦略は使えません。小型株で流動性が低い場合、表示価格では約定できないことがあります。暗号資産やFXではスプレッド拡大、株式では寄り付きのギャップ、ETFでは指数と基準価額の乖離なども考慮が必要です。

TradingViewのストラテジーテスターは便利ですが、現実のスリッページや手数料を完全に再現するものではありません。したがって、必ず手数料設定を入れ、約定価格に余裕を持たせ、売買回数が多すぎる戦略は慎重に評価します。短期売買ほど、見かけの利益はコストで削られます。日足や4時間足の戦略より、1分足や5分足の戦略の方が、コストの影響を強く受けます。

戦略作成の基本手順

TradingViewスクリプトで戦略を作るときは、いきなり複雑なコードを書かない方がよいです。最初から複数の条件を詰め込むと、どの条件が有効で、どの条件が無駄なのか分からなくなります。実践では、単純なコアロジックを作り、1つずつフィルターを追加して効果を確認します。

ステップ1:売買仮説を1文で書く

最初に、戦略の仮説を1文で書きます。たとえば「上昇トレンド中に直近高値を更新した銘柄は、短期的な買いが続きやすい」という形です。この1文が曖昧だと、コードも曖昧になります。「なんとなく強そうなところで買う」という戦略は、検証できません。

良い仮説は、条件と理由が明確です。たとえば「終値が200日移動平均線より上にあり、かつ20日高値を更新したときだけ買う。理由は、長期上昇トレンド内のブレイクアウトに限定することで、下落トレンド中のダマシを避けるため」という形です。

ステップ2:エントリー条件を作る

次に、エントリー条件をコードにします。移動平均線、ブレイクアウト、RSI、MACD、出来高、ボラティリティなど、使う指標は多くありますが、最初は2つ程度に絞るべきです。条件が多すぎると、過去データに合いすぎた戦略になりやすいからです。

たとえば、長期トレンド確認に200日移動平均線、短期の買いシグナルに20日高値更新を使うとします。この場合、単純に20日高値更新だけで買うよりも、下落トレンド中の無駄な買いを減らせます。戦略の核は「トレンド方向にだけブレイクアウトを買う」という考え方です。

ステップ3:撤退条件を先に決める

多くの投資家は、買い条件ばかり考えます。しかし戦略の成績を大きく左右するのは、むしろ撤退条件です。損切りをどこに置くか、利確を固定するか、トレーリングストップにするか、移動平均線割れで手仕舞うかによって、同じエントリーでも結果はまったく変わります。

特に初心者がやりがちな失敗は、損切りを遠くしすぎて勝率だけを上げることです。損切り幅を大きくすると、一見すると勝率は上がります。しかし1回の負けが大きくなり、最終的な期待値が悪化することがあります。逆に損切りが近すぎると、ノイズで刈られてから本来の方向へ進むケースが増えます。したがって、損切り幅はチャートのボラティリティに合わせるのが合理的です。

基本となるPine Script戦略の例

以下は、TradingViewのPine Scriptで作るシンプルなブレイクアウト戦略の考え方です。長期トレンドが上向きのときだけ、一定期間の高値更新で買い、ATRを使って損切りと利確を設定します。ATRとは平均的な値幅を表す指標で、ボラティリティに応じて損切り幅を変えるために使えます。

//@version=5
strategy("Trend Breakout ATR Strategy", overlay=true, initial_capital=1000000, commission_type=strategy.commission.percent, commission_value=0.1)

maLen = input.int(200, "Long MA")
breakLen = input.int(20, "Breakout Length")
atrLen = input.int(14, "ATR Length")
stopAtr = input.float(2.0, "Stop ATR")
takeAtr = input.float(4.0, "Take Profit ATR")

ma = ta.sma(close, maLen)
atr = ta.atr(atrLen)
highestHigh = ta.highest(high, breakLen)[1]

trendFilter = close > ma
entrySignal = trendFilter and close > highestHigh

if entrySignal
    strategy.entry("Long", strategy.long)

if strategy.position_size > 0
    stopPrice = strategy.position_avg_price - atr * stopAtr
    takePrice = strategy.position_avg_price + atr * takeAtr
    strategy.exit("Exit", "Long", stop=stopPrice, limit=takePrice)

plot(ma, color=color.orange)
plot(highestHigh, color=color.blue)

このコードのポイントは、売買条件が明確であることです。200日移動平均線より上にあるときだけ買うため、長期的に弱い相場をある程度避けられます。また、直近20本の高値を更新したときにエントリーするため、勢いが出た局面を狙います。さらにATRで損切りと利確を決めるため、銘柄や時間足によって値幅が違っても調整しやすくなります。

ただし、このまま実運用に使うのは早いです。ここから検証が必要です。まずは対象銘柄や時間足を変え、成績が極端に変わらないかを見ます。特定の銘柄だけで勝っている場合、その銘柄の過去相場に偶然合っただけかもしれません。複数の市場である程度似た傾向が出るかを確認することが重要です。

バックテストで見るべき指標

TradingViewのストラテジーテスターには、純利益、勝率、最大ドローダウン、総取引数、プロフィットファクターなどが表示されます。初心者は純利益に注目しがちですが、純利益だけで判断するのは危険です。バックテスト期間や銘柄によって純利益は大きく変わるため、複数の指標を組み合わせて評価する必要があります。

純利益よりも最大ドローダウンを見る

最大ドローダウンとは、資産曲線のピークからどれだけ下落したかを示す指標です。たとえば100万円が150万円まで増えた後、90万円まで減った場合、ピークからの下落は40%です。このような戦略は、最終的に利益が出ていても精神的に続けるのが難しいです。

実運用では、ドローダウン時に戦略を止めたくなります。過去検証では耐えられるように見えても、実際に資金が減ると判断は揺れます。したがって、バックテスト段階で自分が耐えられる最大損失を決めておくべきです。たとえば「最大ドローダウンが20%を超える戦略は採用しない」と決めておくと、感情的な採用判断を避けやすくなります。

勝率ではなく平均損益を見る

勝率が高い戦略は魅力的に見えます。しかし、勝率が80%でも、負けるときに大きく負ければ資金は増えません。逆に勝率が40%でも、利益が損失の3倍以上あるなら、期待値はプラスになり得ます。重要なのは、1回あたりの平均利益と平均損失のバランスです。

たとえば、勝率45%、平均利益6%、平均損失3%の戦略を考えます。この場合、100回売買すれば45回勝ち、55回負けます。単純計算では、45回×6%=270%、55回×3%=165%となり、差し引きでプラスです。もちろん実際には複利や資金配分が絡みますが、勝率だけで判断できないことは分かります。

取引回数が少なすぎる戦略は信用しない

バックテストで10回しか取引していないのに成績が良い戦略は、偶然の可能性が高いです。最低でも数十回、できれば100回以上のサンプルが欲しいところです。ただし、長期投資型の戦略では取引回数が少なくなるため、その場合は複数銘柄や複数市場で検証してサンプルを増やします。

逆に、取引回数が多すぎる戦略も注意が必要です。1分足で何千回も売買している戦略は、手数料やスリッページの影響を強く受けます。バックテストでは利益が出ていても、実際の約定では利益が残らないことがあります。短期足で検証する場合は、手数料を厳しめに入れるべきです。

過剰最適化を避ける具体的な方法

TradingViewで戦略を作ると、パラメータを変えるだけで過去成績を簡単に改善できます。移動平均線を190日から205日まで変えたり、ATRの倍率を1.8から2.3まで調整したりすれば、もっとも成績が良い組み合わせが見つかります。しかし、それが将来も機能するとは限りません。むしろ、細かく合わせすぎた戦略ほど将来に弱くなります。

パラメータは「点」ではなく「範囲」で見る

有効な戦略は、パラメータを少し変えても大きく崩れません。たとえば20日ブレイクアウトで良い成績が出た場合、18日、22日、25日でも大きく悪化しないか確認します。20日だけが突出して良く、19日や21日では負けるなら、それは過去データに偶然合っただけの可能性があります。

同じようにATR損切り2.0倍が良い場合、1.8倍や2.2倍でも戦略の方向性が維持されるかを見ます。優位性のある戦略は、特定の数値に依存しすぎません。むしろ、ざっくりした範囲で機能する方が信頼できます。

検証期間を分ける

有効な方法は、データを「作成用」と「確認用」に分けることです。たとえば2015年から2021年までのデータで戦略を作り、2022年以降のデータで確認します。作成用期間で成績が良くても、確認用期間で崩れるなら、その戦略は過去に合わせすぎている可能性があります。

TradingViewだけで厳密なウォークフォワード分析を行うには限界がありますが、期間を変えて目視確認するだけでも効果があります。相場には上昇相場、下落相場、レンジ相場、急落相場があります。1つの期間だけで勝った戦略を信用しすぎないことが重要です。

条件を増やす前に「削る」

バックテスト成績を上げようとすると、条件を増やしたくなります。「RSIも加えよう」「MACDも見よう」「出来高条件も入れよう」「曜日フィルターも入れよう」と追加していくと、過去成績は改善しやすくなります。しかし、条件が増えるほど将来の再現性は落ちやすくなります。

実践では、条件を増やす前に、現在の条件が本当に必要かを検証します。たとえば出来高フィルターを入れた場合、入れる前と比べて最大ドローダウンが減ったのか、取引回数が減りすぎていないか、平均損益が改善したのかを確認します。改善がわずかなら、あえて入れない選択もあります。シンプルで説明可能な戦略の方が、長く運用しやすいからです。

出来高フィルターを使った改良例

ブレイクアウト戦略では、出来高フィルターが有効になることがあります。高値更新が起きても、出来高が伴っていなければ参加者が少なく、ダマシで終わる可能性があります。一方、平均出来高を大きく上回って高値更新した場合、大口や短期資金が入っている可能性が高まり、値動きが継続しやすくなります。

たとえば、20日高値更新に加えて「当日の出来高が20日平均出来高の1.5倍以上」という条件を入れます。これにより、静かな上抜けではなく、資金流入を伴う上抜けだけを拾えます。ただし、出来高条件を厳しくしすぎると、エントリー回数が大きく減ります。1.2倍、1.5倍、2.0倍などを比較し、取引回数と成績のバランスを見る必要があります。

volLen = input.int(20, "Volume Average Length")
volRate = input.float(1.5, "Volume Rate")

avgVol = ta.sma(volume, volLen)
volumeFilter = volume > avgVol * volRate

entrySignal = trendFilter and close > highestHigh and volumeFilter

このような改良では、単に純利益が増えたかだけを見るのではなく、負けトレードが減ったか、平均利益が上がったか、最大ドローダウンが下がったかを確認します。出来高フィルターで取引回数が減り、利益も減ったとしても、ドローダウンが大きく改善していれば採用価値があります。資金効率よりも安定性を優先する投資家には、その方が合う場合があります。

時間帯・曜日フィルターの考え方

株式、FX、暗号資産では、時間帯によって値動きの質が変わります。日本株なら寄り付き直後はギャップや成行注文の影響が強く、前場中盤は落ち着きやすく、後場は材料株の再加速や失速が起きやすいです。FXではロンドン時間、ニューヨーク時間、指標発表前後で流動性とボラティリティが変わります。暗号資産は24時間取引ですが、米国時間の影響を受けやすい局面があります。

TradingViewのスクリプトでは、時間帯を条件に入れることもできます。たとえばデイトレ戦略なら、寄り付き直後だけ売買する、または昼休み前後を避けるといった調整が可能です。ただし、時間帯フィルターも過剰最適化になりやすい要素です。「火曜日の10時15分だけ勝てる」といった細かすぎる条件は信用しにくいです。

使うなら、大きな市場構造に基づいた時間帯に限定します。たとえば「寄り付き後30分は流動性が高く、ブレイクが発生しやすい」「米国市場開始後はトレンドが出やすい」といった説明ができる条件です。時間帯フィルターは、勝つためというより、負けやすい時間を避けるために使う方が実践的です。

アラート運用で半自動化する方法

TradingViewの強みは、スクリプトで条件を作り、アラートを設定できることです。完全自動売買ではなくても、条件が出たときに通知を受け取り、手動で最終判断する運用ができます。これは個人投資家にとって現実的です。すべてを自動化しなくても、監視作業を大幅に減らせるからです。

たとえば、日足で「200日移動平均線上にあり、20日高値を更新し、出来高が平均の1.5倍以上」という条件が出た銘柄だけ通知する仕組みを作れます。これにより、毎日何百銘柄もチャートを見る必要がなくなります。通知が来た銘柄だけを確認し、決算予定、材料、流動性、地合いを見て売買判断をします。

アラートを使う場合、メッセージには銘柄名、時間足、エントリー条件、想定損切り価格を入れると便利です。通知だけでは何の条件か分からなくなるため、メッセージ設計も重要です。売買記録に残すことを前提に、後から検証しやすい形にします。

alertcondition(entrySignal, title="Breakout Entry", message="Breakout signal: trend, breakout, volume filter matched")

アラート運用で特に重要なのは、通知が来たから必ず買うのではなく、最終チェックをルール化することです。たとえば、決算直前は避ける、流動性が低すぎる銘柄は避ける、指数が急落中ならロットを半分にする、といった判断基準を作ります。スクリプトは候補抽出、最終判断はリスク管理という役割分担が現実的です。

戦略をポートフォリオに組み込む考え方

1つのTradingView戦略だけに資金を集中させるのは危険です。どれだけ検証した戦略でも、相場環境が変われば機能しなくなる可能性があります。したがって、実運用では複数の戦略、複数の時間軸、複数の資産に分散する発想が必要です。

たとえば、日足のブレイクアウト戦略、週足のトレンドフォロー戦略、短期の押し目買い戦略を分けて運用します。日足ブレイクアウトが苦手なレンジ相場でも、押し目買い戦略が機能するかもしれません。また、日本株だけでなく、米国ETF、FX、暗号資産など、値動きの性質が違う市場で検証することで、特定市場への依存を下げられます。

資金配分では、1戦略あたりの最大損失を決めます。たとえば総資金100万円で、1回のトレード損失を1万円以内に抑えるなら、損切り幅から株数を逆算します。損切り幅が5%なら、20万円分まで買えます。損切り幅が10%なら、10万円分までです。このように、エントリー金額は「買いたい金額」ではなく「許容損失」から決めるべきです。

実践例:小型株ブレイクアウト戦略の設計

ここでは、個人投資家向けに、小型株のブレイクアウト戦略を例にします。小型株は流動性が低く値動きが荒い一方、材料や出来高増加をきっかけに大きく動くことがあります。大型株よりも非効率が残りやすく、個人投資家が優位性を作りやすい領域です。ただし、急落リスクも高いため、資金管理が必須です。

戦略仮説はこうです。「時価総額が小さく、長期移動平均線より上にあり、出来高を伴って直近高値を更新した銘柄は、短期資金の流入により数日から数週間の上昇が続きやすい」。この仮説をTradingViewで検証する場合、スクリプト上では時価総額を直接扱いにくい場合があります。そのため、銘柄選定は別途スクリーニングで行い、TradingViewではチャート条件を検証します。

具体的には、まず時価総額100億円から500億円程度、売買代金が一定以上、直近決算で大幅な悪化がない銘柄を候補にします。そのうえで、TradingViewのスクリプトで200日移動平均線上、20日高値更新、出来高平均1.5倍以上を条件にします。損切りはATR2倍、利確はATR4倍、または10日移動平均線割れで手仕舞うなどを比較します。

この戦略で注意すべきなのは、ストップ高や寄らずの値動きです。バックテスト上では理想的に約定していても、実際には買えない、または売れないことがあります。小型株では特に、寄り付きのギャップや板の薄さを考慮しなければなりません。実運用では、寄り付き成行ではなく、指値や分割エントリーを使う方が現実的です。

TradingViewだけで完結させない方がよい理由

TradingViewは非常に便利ですが、万能ではありません。特に日本株の詳細なファンダメンタルズ、信用残、決算進捗、株主構成、適時開示の読み込みなどは、別の情報源と組み合わせる必要があります。スクリプトは価格と出来高の検証には強い一方、企業の中身やイベントリスクの判断には限界があります。

たとえば、チャート上はきれいなブレイクアウトでも、翌週に決算発表を控えている場合、ギャップダウンのリスクがあります。また、出来高急増がポジティブな材料によるものなのか、悪材料出尽くしなのか、単なるSNS煽りなのかは、チャートだけでは判断できません。価格は重要ですが、価格だけに依存しすぎると、材料の質を見誤ります。

したがって、実践的には「TradingViewでシグナル抽出」「決算・材料・流動性を別途確認」「売買記録で事後検証」という流れが有効です。この3段階にすることで、機械的な抽出と人間の判断を分離できます。最初から完全自動化を目指すよりも、半自動化で検証精度を高める方が、個人投資家には現実的です。

売買記録と戦略改善の方法

TradingViewで戦略を作ったら、必ず売買記録を残します。記録すべき項目は、銘柄名、エントリー日、エントリー価格、損切り価格、利確目標、実際の決済価格、保有日数、損益率、エントリー理由、ルール違反の有無です。これを残さないと、戦略が悪かったのか、自分の運用が悪かったのか判断できません。

特に重要なのは、ルール通りのトレードとルール違反のトレードを分けることです。戦略自体は期待値があっても、早すぎる利確、遅すぎる損切り、根拠のないナンピンを行えば成績は崩れます。逆に、戦略が機能していないのに、たまたま裁量で助かっただけのケースもあります。記録を分けることで、改善すべき対象が明確になります。

1か月ごとに、勝ちトレードと負けトレードを見直します。勝ちトレードでは、どの条件が特に有効だったかを確認します。負けトレードでは、エントリー直後に逆行したのか、途中までは含み益だったのに利確できなかったのか、地合いが悪かったのかを分類します。この分類が、次のスクリプト改善につながります。

実運用前のチェックリスト

TradingViewで作った戦略を実運用する前に、最低限確認すべき項目があります。まず、手数料とスリッページを入れても利益が残るか。次に、複数の期間で成績が極端に崩れないか。さらに、パラメータを少し変えても戦略の方向性が維持されるか。これらを確認しないまま運用すると、過去にだけ合った戦略を信じてしまう危険があります。

また、1回あたりの損失額を事前に決める必要があります。どれだけ良い戦略でも連敗はあります。5連敗、10連敗しても継続できるロットにしなければ、戦略の期待値が発揮される前に退場します。たとえば1回の損失を総資金の1%以内に抑えれば、10連敗しても単純計算で約10%の損失に収まります。これなら再検証して立て直す余地があります。

最後に、戦略停止条件も決めておきます。たとえば「過去最大ドローダウンの1.5倍を超えたら停止」「20回連続で期待値がマイナスなら見直し」「市場環境が変化したと判断したらロットを半分にする」といったルールです。戦略は作るだけでなく、止め方まで決めて初めて運用可能になります。

TradingView戦略で個人投資家が狙うべき優位性

個人投資家が機関投資家と同じ土俵で速度や情報量を競うのは不利です。しかし、個人投資家には小回りの利く資金規模、自由な時間軸、ニッチな銘柄を扱える柔軟性があります。TradingViewスクリプトは、この強みを活かすための道具になります。

たとえば、大型株の超短期売買で機関投資家に勝とうとするよりも、小型株の出来高変化、テーマ株の初動、ETFの中期トレンド、暗号資産のサイクル変化など、個人でも観察しやすい領域に絞った方が現実的です。スクリプトで候補を機械的に抽出し、人間が材料と需給を確認する。この組み合わせは、情報処理能力と判断力のバランスが良い方法です。

重要なのは、TradingViewを「未来を当てるツール」と考えないことです。未来は分かりません。できるのは、過去に機能した構造を確認し、現在もその構造が残っているかを観察し、損失を限定しながら試すことです。この姿勢を徹底すれば、スクリプトは単なるチャート装飾ではなく、売買判断の質を高める武器になります。

まとめ

TradingViewスクリプトで優位性ある戦略を作るには、複雑なコードよりも、明確な仮説、シンプルな条件、厳格な検証、現実的な資金管理が重要です。まずは、なぜその条件で利益が出る可能性があるのかを説明できる戦略を作ります。次に、バックテストで純利益だけでなく、最大ドローダウン、平均損益、取引回数、連敗耐性を確認します。そして、パラメータを少し変えても機能するか、複数期間で崩れないかを検証します。

実運用では、TradingViewのアラートを使って候補を抽出し、最終判断では材料、流動性、地合い、決算日程を確認します。完全自動化を急ぐ必要はありません。むしろ、最初は半自動化で十分です。スクリプトは感情を排除し、売買候補を客観的に抽出するために使います。

投資で長く生き残るには、勝てる局面を増やすだけでなく、負ける局面で資金を守る必要があります。TradingViewとPine Scriptは、そのための検証環境として非常に有効です。感覚的な売買を続けるのではなく、仮説をコード化し、検証し、記録し、改善する。この地味な反復こそが、個人投資家が実践できる最も現実的な優位性の作り方です。

コメント

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