TradingViewスクリプトで優位性ある戦略を作る方法

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

TradingViewスクリプトは「売買サインを出す道具」ではなく「仮説を検証する道具」です

TradingViewのPine Scriptを使う最大の価値は、チャート上に矢印を出すことではありません。投資家が頭の中で考えている売買ルールを明文化し、過去データに当てはめ、期待値があるかどうかを検証できる点にあります。多くの人は「移動平均線がゴールデンクロスしたら買い」「RSIが30以下なら反発狙い」といった単純な条件から始めます。しかし、それだけでは優位性のある戦略にはなりません。なぜなら、同じようなルールは市場参加者の多くが知っており、単体ではすでに陳腐化していることが多いからです。

優位性のある戦略を作るには、まず「なぜその条件で利益が出る可能性があるのか」という市場構造の仮説が必要です。たとえば、出来高を伴うブレイクアウトは、単なる価格上昇ではなく、新しい買い手が継続的に入っている可能性を示します。高値更新後にすぐ崩れない銘柄は、売りたい投資家の売りを吸収している可能性があります。逆に、急騰後に出来高が細りながら上値が重くなる場合は、短期資金の逃げ場になっている可能性があります。Pine Scriptは、このような仮説を数値条件に落とし込むためのツールです。

この記事では、TradingViewスクリプトを使って、単なるシグナル表示ではなく、実際に投資判断に使える戦略を作る流れを解説します。対象は株式、ETF、FX、暗号資産など幅広く応用できますが、どの市場でも共通するのは「ルールを固定し、検証し、改善し、運用前にリスクを数値で把握する」という姿勢です。

優位性とは何かを数値で理解する

投資戦略における優位性とは、毎回勝つことではありません。長期的に同じルールを繰り返したとき、手数料やスリッページを差し引いても資金が増える構造があることです。勝率が高くても、損失が大きければ資産は減ります。勝率が低くても、利益幅が損失幅を大きく上回れば資産は増えます。したがって、TradingViewで戦略を作るときは、勝率だけを見てはいけません。

最低限見るべき指標は、純利益、最大ドローダウン、プロフィットファクター、平均利益、平均損失、勝率、取引回数、保有期間、連敗数です。特に重要なのは最大ドローダウンです。バックテスト上で利益が出ていても、途中で資産が40%減るような戦略は、多くの個人投資家にとって運用継続が困難です。理論上の期待値よりも、実際に耐えられるリスクのほうが重要です。

期待値は簡単に言えば、1回の取引あたり平均してどれだけ資金が増減するかです。たとえば勝率45%、平均利益8%、平均損失3%の戦略であれば、単純計算では期待値はプラスになります。一方、勝率70%でも平均利益2%、平均損失7%なら、急な負けで利益を吐き出す可能性があります。TradingViewのバックテスト結果を見るときは、見た目の右肩上がりよりも、1回あたりの期待値と損益分布を重視すべきです。

最初に作るべき戦略仮説

優位性あるPine Scriptを作るには、いきなりコードを書かないほうがいいです。最初に紙やメモで、戦略の仮説を文章化します。たとえば次のように定義します。「上昇トレンド中の銘柄が一時的に短期移動平均線まで押したあと、出来高を伴って反発した場合、再び高値更新に向かいやすい」。この文章には、トレンド、押し目、出来高、反発という要素があります。これを数値条件に変換します。

具体的には、上昇トレンドは「終値が200日移動平均線より上」「50日移動平均線が200日移動平均線より上」と定義できます。押し目は「終値が20日移動平均線に接近」「直近高値から5%以上下落」と定義できます。反発は「当日の終値が前日高値を上回る」「陽線で終値が日中値幅の上位25%にある」と定義できます。出来高は「当日出来高が20日平均出来高の1.5倍以上」と設定できます。

このように文章から条件へ落とし込むことで、曖昧な裁量判断を排除できます。Pine Scriptの強みは、こうした条件をすべてコード化し、銘柄や時間軸を変えて検証できることです。感覚で「良さそう」と思ったチャートだけを選ぶと、都合の良い事例だけを見てしまいます。コード化することで、不利な局面も含めて機械的に評価できます。

Pine Scriptで戦略を作る基本構造

Pine Scriptには、インジケーター用のスクリプトと戦略検証用のスクリプトがあります。売買検証を行う場合は、indicatorではなくstrategyを使います。strategyを使うと、エントリー、決済、損切り、利確、ポジションサイズなどを定義でき、TradingViewのストラテジーテスターで結果を確認できます。

基本構造は、まず戦略名と初期資金、手数料、ポジションサイズを設定し、次に指標を計算し、最後にエントリー条件と決済条件を記述します。たとえば移動平均線を使うなら、ta.smaやta.emaで移動平均を計算します。RSIを使うならta.rsiを使います。条件はtrueまたはfalseで判定し、条件がtrueになったときにstrategy.entryで買いまたは売りを出します。決済はstrategy.exitやstrategy.closeで管理します。

重要なのは、検証時点で現実に近い条件を入れることです。手数料をゼロにしたまま検証すると、短期売買戦略は実際より大幅に良く見えます。スリッページも考慮すべきです。特に小型株や暗号資産、流動性の低い時間帯のFXでは、表示価格で必ず約定できるとは限りません。バックテストでわずかに勝っている程度の戦略は、実運用ではコストで負ける可能性が高いです。

実用的な戦略例:トレンド中の押し目反発を狙う

ここでは、実際に使いやすい戦略例として「上昇トレンド中の押し目反発」を考えます。この戦略の狙いは、すでに強い銘柄や資産を高値で飛び乗るのではなく、一時的な調整後に再上昇する局面を狙うことです。ブレイクアウト戦略よりもエントリー価格を抑えやすく、逆張り戦略よりも大きな下落トレンドに巻き込まれにくいという特徴があります。

条件は次のように設計できます。第一に、終値が200日移動平均線を上回っていること。第二に、50日移動平均線が200日移動平均線を上回っていること。第三に、直近10日以内に終値が20日移動平均線付近まで調整していること。第四に、当日の終値が前日高値を上回り、短期反発を確認できること。第五に、出来高が20日平均を上回っていることです。これにより、単なる下落中の反発ではなく、上昇トレンド内の押し目に絞り込みます。

決済ルールは、利確と損切りを明確にします。たとえば、エントリー価格から8%上昇で半分利確、20日移動平均線を終値で割ったら撤退、またはエントリー価格から5%下落で損切りというルールが考えられます。ここで重要なのは、利確と損切りを後から都合よく変更しないことです。バックテストで結果を見ながら条件を何度もいじると、過去データにだけ合う戦略になってしまいます。

コードを書く前に決めるべき7つの項目

1. 対象市場

同じロジックでも、日本株、米国株、FX、暗号資産では結果が変わります。日本株は寄り付きギャップやストップ高・ストップ安の影響があり、米国株は決算後のギャップが大きく、FXは24時間連続で取引され、暗号資産は土日も動きます。TradingViewで検証する前に、どの市場に使う戦略なのかを明確にします。

2. 時間軸

日足戦略なのか、4時間足なのか、15分足なのかで、必要な条件は大きく変わります。短期足になるほどノイズが増え、手数料やスリッページの影響も大きくなります。初めて戦略を作るなら、日足または4時間足から始めるほうが検証しやすいです。

3. エントリー条件

エントリー条件は少なすぎても多すぎても問題です。少なすぎるとノイズを拾い、多すぎると取引回数が減り、たまたま良かった過去の局面だけに適合しやすくなります。最初は3〜5個程度の条件に絞るのが現実的です。

4. 決済条件

戦略の成績は、エントリーより決済で大きく変わります。利確を固定%にするのか、移動平均線割れにするのか、トレーリングストップにするのかで、利益の伸ばし方が変わります。勝率を上げたいだけなら早めに利確すればよいですが、それでは大きなトレンドを取り逃す可能性があります。

5. 損切り条件

損切りは資金を守るための保険です。損切り幅が狭すぎるとノイズで刈られ、広すぎると一回の負けが大きくなります。固定%、ATR、直近安値割れなど複数の方法がありますが、戦略の性質に合わせる必要があります。

6. ポジションサイズ

優位性がある戦略でも、ポジションサイズを誤ると破綻します。1回の取引で総資産の10%以上を失う可能性がある設計は危険です。実践では、1回の損失を資産の1〜2%以内に抑える考え方が現実的です。

7. 取引しない条件

多くの戦略では、エントリー条件よりも「やらない条件」が重要です。決算直前は避ける、出来高が少ない銘柄は避ける、指数が下落トレンドのときは買わない、急騰後の過熱局面は見送るなど、負けやすい環境を除外することで成績が改善することがあります。

バックテストで最も危険な落とし穴

TradingViewのストラテジーテスターは便利ですが、表示された成績をそのまま信じるのは危険です。特に多い失敗が、過剰最適化です。たとえば、移動平均線の期間を10、11、12、13と細かく変え、最も利益が出た数値を選ぶ行為です。過去データに対して最適な数値を探し続けると、実際の未来では機能しない戦略が完成します。

もう一つの落とし穴は、取引回数が少なすぎることです。バックテストで5回しか取引していないのに利益が出ている場合、それは優位性ではなく偶然かもしれません。最低でも数十回、できれば100回以上の取引サンプルが欲しいところです。ただし、長期投資戦略では取引回数が少なくなるため、その場合は複数銘柄や複数期間で検証する必要があります。

さらに、未来のデータを使ってしまうリペイントにも注意が必要です。一部のインジケーターや高時間軸データの扱い方によっては、過去チャート上では綺麗に見えるシグナルが、リアルタイムでは確定していなかったという問題が起きます。Pine Scriptでは、確定足ベースで条件を判定すること、lookaheadを不用意に使わないこと、リアルタイムでの挙動を確認することが重要です。

優位性を高めるためのフィルター設計

単純な売買条件にフィルターを加えることで、戦略の質は大きく変わります。ただし、フィルターは増やせばよいわけではありません。意味のある市場構造に基づくフィルターだけを使います。代表的なフィルターは、トレンドフィルター、出来高フィルター、ボラティリティフィルター、地合いフィルター、時間帯フィルターです。

トレンドフィルターは、買い戦略なら上昇トレンドのときだけ取引する仕組みです。たとえば、終値が200日移動平均線より上のときだけ買う、指数が50日移動平均線より上のときだけ個別株を買う、といった方法です。これにより、大きな下落相場で逆張り買いを続けるリスクを抑えられます。

出来高フィルターは、価格変動に参加者の裏付けがあるかを見るために使います。価格だけ上がっても出来高が伴わない場合、少数の買いで一時的に上がっただけの可能性があります。出来高が平均を上回る局面に限定すると、短期資金や機関投資家の参加を拾いやすくなります。

ボラティリティフィルターは、値動きが小さすぎる相場や大きすぎる相場を避けるために使います。ATRが極端に低いと利益幅が出にくく、ATRが極端に高いと損切り幅も広がります。戦略によっては、適度なボラティリティの範囲に限定することで安定性が上がります。

実践的なPine Script設計の考え方

Pine Scriptを書くときは、コードを一気に完成させようとしないほうがよいです。まずはインジケーターとして条件を表示し、チャート上で意図通りにシグナルが出ているか確認します。その後、strategyに変換してバックテストします。いきなり戦略化すると、条件の誤りに気づきにくくなります。

たとえば、押し目反発戦略なら、まず200日移動平均線、50日移動平均線、20日移動平均線を表示します。次に、トレンド条件が成立している背景色を表示します。さらに、押し目条件が成立したバーに印を付け、反発条件が成立したバーに買いサインを出します。こうすることで、どの条件がどの場面で機能しているか視覚的に確認できます。

そのうえで、strategy.entryを使って買い、strategy.exitで損切りと利確を設定します。コードの中には、後から検証しやすいようにinputを使ってパラメータを外部変更できるようにしておくと便利です。ただし、inputで変更できる項目を増やしすぎると過剰最適化の原因になります。最初は移動平均線期間、損切り幅、利確幅程度に留めるのが無難です。

サンプルロジックの考え方

ここではコードそのものよりも、どういうロジックを組むべきかを重視します。買い条件は、上昇トレンド、押し目、反発、出来高の4要素で構成します。上昇トレンドは終値が200日移動平均線より上、かつ50日移動平均線が200日移動平均線より上。押し目は直近5日以内に安値が20日移動平均線以下になったこと。反発は当日の終値が前日高値を上回ること。出来高は20日平均出来高以上とします。

この条件で買いシグナルが出たら、損切りはエントリー価格から5%下、利確は10%上、または20日移動平均線割れで撤退します。この設計は、リスクリワードをおおむね2対1に近づける意図があります。ただし、銘柄によって値動きの癖が異なるため、固定%が最適とは限りません。ボラティリティが大きい銘柄ではATRを使った損切りのほうが自然です。

この戦略の良い点は、仮説が明確なことです。強い上昇トレンドにある銘柄が、一時的に20日線まで押し、出来高を伴って反発したら、再び買いが集まりやすいという仮説です。悪い点は、相場全体が急落する局面では機能しにくいことです。そのため、指数フィルターを追加し、日経平均やS&P500が下落トレンドのときは新規買いを停止する改善が考えられます。

検証は単一銘柄だけで終わらせない

TradingViewでありがちな失敗は、ひとつの銘柄で良い結果が出ただけで戦略を信じてしまうことです。たとえば、ある成長株で非常に良いバックテスト結果が出ても、それはその銘柄が過去に強烈な上昇トレンドを持っていただけかもしれません。戦略そのものに優位性があるかを確認するには、複数銘柄、複数市場、複数期間で検証する必要があります。

日本株なら、グロース株、大型株、高配当株、景気敏感株、小型株などに分けて検証します。米国株なら、NASDAQ大型株、S&P500構成銘柄、半導体株、ヘルスケア株などに分けます。FXなら、ドル円、ユーロドル、ポンド円のようにボラティリティの異なる通貨ペアで確認します。暗号資産なら、ビットコイン、イーサリアム、主要アルトコインで検証します。

複数の対象で検証したとき、すべてで高収益になる必要はありません。しかし、特定の1銘柄だけでしか機能しない戦略は危険です。理想は、似た性質を持つ複数銘柄で同じ方向の優位性が確認できることです。たとえば、上昇トレンド銘柄では機能しやすいが、レンジ相場では機能しにくいという傾向が分かれば、それは運用ルールに反映できます。

ウォークフォワードで未来耐性を確認する

バックテストで重要なのは、過去全期間を使って最適化しないことです。過去データを学習期間と検証期間に分ける考え方が必要です。たとえば、2018年から2022年までを設計期間、2023年から2025年までを検証期間とします。設計期間でルールを決めたあと、検証期間では一切条件を変更せずに成績を確認します。

もし設計期間では良い成績なのに、検証期間で急激に悪化するなら、その戦略は過去に合わせすぎている可能性があります。逆に、設計期間ほどではなくても検証期間でもプラスを維持できるなら、一定の耐久性があると考えられます。TradingView単体では高度なウォークフォワード分析に限界がありますが、期間を区切って目視で確認するだけでも効果があります。

また、相場環境別に分けることも重要です。上昇相場、下落相場、レンジ相場、急落相場、急反発相場で成績を比較します。ある戦略が上昇相場だけで利益を出し、下落相場で大きく負けるなら、指数フィルターや現金化ルールが必要です。戦略は万能である必要はありません。どの環境で使い、どの環境で休むかを決めることが重要です。

実運用前に確認すべきチェックリスト

バックテストで良い結果が出ても、すぐに資金を投入するのは危険です。実運用前には、最低限のチェックリストを通すべきです。第一に、シグナルが確定足ベースで出ているか。第二に、手数料とスリッページを入れても利益が残るか。第三に、最大ドローダウンに耐えられるか。第四に、取引回数が十分か。第五に、特定期間だけに利益が集中していないか。第六に、銘柄を変えてもある程度機能するか。第七に、実際に発注できる流動性があるかです。

特に流動性は見落とされがちです。バックテストでは終値で買えたことになっていても、現実には出来高が少なく、自分の注文で価格が動く可能性があります。小型株で大きな資金を入れる場合、バックテストの利益率よりも約定可能性のほうが問題になります。実践では、平均売買代金や板の厚さを確認し、売りたいときに売れる銘柄だけを対象にするべきです。

また、実運用では心理面も無視できません。バックテスト上では10連敗しても最終的に利益が出る戦略だとしても、実際に10連敗すれば多くの人はルールを止めたくなります。したがって、自分が耐えられる連敗数や損失幅を事前に把握し、それを超える戦略は採用しないほうがよいです。

アラート機能を使って運用負荷を下げる

TradingViewの強みは、Pine Scriptで作った条件をアラート化できることです。常にチャートを見続ける必要はありません。買い条件が成立したとき、決済条件に近づいたとき、損切りラインを割ったときに通知を出すようにすれば、運用負荷を大きく下げられます。

ただし、アラートは便利である一方、誤作動や設定ミスに注意が必要です。確定足で判定するつもりなのに、リアルタイム足の途中で通知が出る設定にしていると、終値では条件未成立になることがあります。アラートを使う場合は、バー確定時に通知するのか、条件成立の瞬間に通知するのかを明確にします。

また、通知が多すぎる戦略は実用性が低いです。毎日何十件も通知が来ると、重要なシグナルを見落とします。実践的な戦略では、通知数を絞り、重要度の高い局面だけを拾うほうが継続しやすいです。Pine Scriptで条件を厳密に定義する目的は、売買を増やすことではなく、不要な判断を減らすことです。

成績改善は「条件追加」より「負け方の分析」が先です

バックテスト結果が悪いと、多くの人は条件を追加して勝率を上げようとします。しかし、先にやるべきことは負けトレードの分析です。どの局面で負けているのか、急落相場なのか、レンジ相場なのか、出来高が少ない銘柄なのか、ギャップダウンなのかを分類します。負け方が分からないまま条件を追加しても、過剰最適化になるだけです。

たとえば、負けトレードの多くが指数下落中に発生しているなら、指数フィルターを追加すべきです。出来高が少ない銘柄で負けているなら、流動性条件を追加します。高値掴みが多いなら、直近上昇率が高すぎる銘柄を除外します。損切り後にすぐ反発するケースが多いなら、損切り幅が狭すぎる可能性があります。

改善の基本は、利益トレードをさらに良くすることではなく、大きな負けを減らすことです。投資戦略の長期成績は、数回の大損で大きく悪化します。Pine Scriptでは、負けやすい条件を可視化し、除外ルールとして検証できる点が大きな利点です。

TradingView戦略を実際の売買に使うときの現実的な運用方法

実運用では、バックテストで作った戦略をそのまま全自動で使うよりも、まずは半自動運用が現実的です。Pine Scriptでシグナルを出し、人間が最終確認をして発注します。確認する項目は、決算予定、重要ニュース、流動性、指数の状態、直近の急騰急落、板の状況などです。これにより、機械的な優位性と人間のリスク判断を組み合わせられます。

特に個別株では、決算や材料発表で過去データとは異なる値動きが発生します。スクリプトが買いサインを出しても、翌日に決算を控えているなら見送る判断も必要です。逆に、良い決算後に押し目反発シグナルが出た場合は、通常より信頼度が高まることもあります。Pine Scriptは判断材料を整理する道具であり、盲目的に従うものではありません。

運用開始時は、いきなり通常資金を入れず、ペーパートレードまたは小ロットで始めるべきです。実際の約定、通知タイミング、心理的負荷、損切り実行の難しさを確認します。1〜3か月程度のフォワードテストを行い、バックテストと大きく乖離しないかを確認してから資金を増やすほうが堅実です。

個人投資家が作るべき戦略は「複雑な戦略」ではなく「続けられる戦略」です

高度な数式や複雑な条件を使えば勝てるわけではありません。むしろ、個人投資家にとって重要なのは、理解できる戦略を作ることです。なぜ買うのか、なぜ売るのか、どの局面で負けるのかを説明できない戦略は、少し成績が悪化しただけで継続できなくなります。

優位性ある戦略は、意外とシンプルな構造を持っています。上昇トレンドに乗る、過熱しすぎたら避ける、出来高で参加者を確認する、損切りを固定する、地合いが悪いときは休む。このような基本を組み合わせるだけでも、感情的な売買よりは大きく改善できます。Pine Scriptは、その基本をブレずに実行するための補助装置です。

重要なのは、戦略を作ったあとも記録を残すことです。シグナル発生日時、銘柄、エントリー価格、決済価格、損益、見送り理由、実際の心理状態を記録します。これにより、バックテスト上の戦略と実運用のズレが見えてきます。多くの場合、戦略そのものよりも、運用者がルールを守れないことが成績悪化の原因になります。

まとめ:Pine Scriptで勝つ人はコードより先に仮説を作っている

TradingViewスクリプトで優位性ある戦略を作るには、コード技術だけでは不十分です。最初に必要なのは、市場でなぜその値動きが起こるのかという仮説です。その仮説を数値条件に分解し、Pine Scriptで検証し、複数銘柄・複数期間・複数相場で耐久性を確認します。そして、手数料、スリッページ、最大ドローダウン、流動性、心理的負荷まで含めて実運用可能かを判断します。

売買サインを出すだけなら、Pine Scriptは短時間で作れます。しかし、投資家にとって本当に価値があるのは、再現性のある判断基準を持つことです。感情で買わない、雰囲気で売らない、都合の良いチャートだけを見ない。そのためにTradingViewを使うべきです。

最初から完璧な戦略を作る必要はありません。まずは単純な仮説をひとつ選び、条件を明文化し、バックテストし、負け方を分析し、少しずつ改善します。その積み重ねによって、チャートを見るだけの投資家から、ルールを検証して運用する投資家へ変わることができます。TradingViewとPine Scriptは、その変化を実現するための強力な武器になります。

コメント

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