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

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

TradingViewスクリプトで戦略を作る意味

投資やトレードで安定した成績を目指すうえで、最初に捨てるべきものは「なんとなく上がりそう」「チャートの形が良さそう」という曖昧な判断です。もちろん裁量判断そのものが悪いわけではありません。しかし、判断基準が言語化されていない売買は、後から検証できません。検証できないものは改善できず、改善できないものは再現性を持ちません。

TradingViewのスクリプト、特にPine Scriptを使う最大の価値は、売買ルールをコードとして固定できる点にあります。移動平均線を上抜けたら買う、RSIが一定水準から反転したら買う、損切りは直近安値割れ、利確はリスクリワード2倍など、頭の中にある曖昧なルールを明文化し、過去チャートに当てはめて検証できます。

ここで重要なのは、TradingViewを「聖杯探しの道具」として使わないことです。スクリプトを書けば勝てるのではありません。スクリプトは、仮説を検証するための測定器です。測定器の使い方を間違えると、過去にだけ都合よく勝てる戦略を作ってしまいます。いわゆるカーブフィッティングです。本記事では、初心者でも実践できるよう、戦略設計の考え方から、条件作成、バックテスト、改善、運用時の注意点まで順番に解説します。

優位性ある戦略とは何か

優位性とは、特定の条件で売買を繰り返したときに、偶然では説明しにくいプラスの期待値がある状態を指します。単に勝率が高いことではありません。勝率が70%でも、負けるときに大きく損をする戦略であれば資金は減ります。反対に、勝率が40%でも、勝つときの利益が負けるときの損失より大きければ、長期的に資金が増える可能性があります。

期待値は大まかに、平均利益、平均損失、勝率の組み合わせで決まります。たとえば、勝率45%、平均利益が6%、平均損失が3%の戦略なら、単純計算では1回あたりの期待値はプラスになります。一方、勝率65%でも平均利益が2%、平均損失が5%なら、トータルではマイナスになりやすいです。

TradingViewスクリプトで戦略を作るときは、最初から勝率だけを追わないことが重要です。勝率を上げようとすると、利益確定を浅くし、損切りを深くする方向に調整しがちです。その結果、バックテスト上は勝率が高く見えても、実運用では一度の急落で大きく資金を削られる危険があります。

戦略に必要な3つの要素

優位性ある戦略には、最低限3つの要素が必要です。第一に、なぜその条件で値動きが発生しやすいのかという市場構造上の理由です。第二に、その条件を客観的に判定できるルールです。第三に、損失を限定する出口ルールです。

たとえば「上昇トレンド中の押し目買い」は、市場参加者の心理として理解しやすい戦略です。上昇中の銘柄は、買い遅れた投資家が押し目を待っているため、一定の下落局面で買いが入りやすい可能性があります。この仮説をスクリプト化するなら、200日移動平均線より上にあること、20日移動平均線まで下落したこと、反発足が出たこと、直近安値を割れたら撤退すること、などの条件に分解できます。

TradingView戦略作成の基本手順

いきなりコードを書き始めると、ほぼ失敗します。戦略作成では、先に売買ロジックを文章で設計する必要があります。具体的には、対象市場、時間軸、エントリー条件、決済条件、損切り条件、ポジションサイズ、検証期間を決めます。

対象市場は、日本株、米国株、FX、暗号資産などで値動きの性質が異なります。日本株は取引時間が限られ、ギャップが発生しやすいです。FXは24時間に近い取引ができ、流動性が高い一方、レンジが長く続くことがあります。暗号資産は休日も動き、急変動が発生しやすいです。同じスクリプトでも、市場によって結果は大きく変わります。

時間軸も重要です。日足戦略は売買回数が少なく、ノイズが比較的小さい一方で、検証に必要なデータ期間が長くなります。5分足や15分足の短期戦略は売買回数が多く、統計的な検証はしやすいですが、スプレッド、手数料、スリッページの影響が大きくなります。最初は日足または4時間足など、過度に細かすぎない時間軸で始める方が現実的です。

最初に作るべきシンプルな戦略

初心者が最初に作るべきなのは、複雑なインジケーターを大量に組み合わせた戦略ではありません。むしろ、移動平均線、出来高、直近高値安値など、意味が明確な条件だけで構成したシンプルな戦略です。シンプルな戦略は弱そうに見えますが、失敗したときに原因を特定しやすいという大きな利点があります。

例として、上昇トレンド中の押し目買い戦略を考えます。条件は次のように設計できます。価格が200日移動平均線より上にある。20日移動平均線が50日移動平均線より上にある。終値が一度20日移動平均線付近まで下落する。その後、前日高値を上抜けたら買う。損切りは直近押し安値割れ。利確は損切り幅の2倍、または20日移動平均線割れです。

この戦略の仮説は明確です。大局的には上昇トレンドであり、短期的な利益確定売りが一巡した後、再び買いが入る局面を狙います。高値を追いかけるのではなく、上昇基調の中で一時的に下げたところからの再上昇を狙うため、心理的にも実行しやすい戦略です。

Pine Scriptで戦略を組むときの考え方

Pine Scriptには、インジケーターを表示するためのスクリプトと、売買戦略を検証するためのストラテジースクリプトがあります。バックテストを行う場合は、strategy関数を使う形式で作成します。エントリーにはstrategy.entry、決済にはstrategy.exitやstrategy.closeを使います。

コードを書くときは、いきなり完成形を目指さず、段階的に作るべきです。第一段階では、移動平均線などの基本指標をチャート上に表示します。第二段階で、買い条件が発生した場所にシグナルを出します。第三段階で、実際にエントリーと決済を記述します。第四段階で、損切り、利確、手数料、ポジションサイズを調整します。

この段階分けをしないと、バックテスト結果だけを見て「なぜここで買ったのか」「なぜここで売ったのか」が分からなくなります。スクリプトは単なる計算ではなく、自分の売買判断を可視化する道具です。シグナルが意図した場所に出ているかを必ず目視確認してください。

疑似コードで考える

初心者は、最初からPine Scriptの文法を覚えようとするより、まず疑似コードで考える方が効率的です。たとえば次のように書きます。

価格が長期移動平均線より上なら上昇トレンドと判定する。短期移動平均線が中期移動平均線より上なら買い優勢と判定する。価格が短期移動平均線付近まで下落した後、前日高値を超えたら反発確認として買う。買った後は、直近安値を割れたら損切りし、損切り幅の2倍上昇したら利確する。

このように文章化できれば、コード化は比較的簡単になります。逆に、文章で説明できない戦略は、コードにしても使いこなせません。

具体例:押し目買い戦略の設計

ここでは、日足を想定した押し目買い戦略を例にします。対象は流動性のある株式、ETF、主要暗号資産などです。極端に出来高が少ない銘柄では、バックテスト上の価格で約定できない可能性が高いため、対象から外します。

エントリー条件は、終値が200日移動平均線より上、20日移動平均線が50日移動平均線より上、終値が過去5日以内に20日移動平均線を下回ったことがある、当日終値が前日高値を上回る、という形にします。これにより、上昇トレンド中に一度押し目を作り、そこから反発した局面だけを抽出できます。

損切りは、過去10日間の安値を下回った場合とします。利確は、リスク幅の2倍に到達した場合、または終値が20日移動平均線を明確に下回った場合です。前者は固定リスクリワード型、後者はトレンド追随型です。どちらが優れているかは市場によって異なるため、両方を検証するとよいです。

条件を増やしすぎない

戦略がうまく機能しないと、条件を追加したくなります。RSIも見る、MACDも見る、出来高も見る、ボリンジャーバンドも見る、曜日も見る、月末月初も見る、という具合です。しかし条件を増やすほど、過去データにだけ合った戦略になりやすくなります。

条件追加の判断基準は、「その条件に市場構造上の理由があるか」です。たとえば出来高増加を条件に加えるなら、押し目からの反発局面で新規買いが入っていることを確認する意味があります。一方、適当にRSIが55以上などと加えるだけでは、過去の数字合わせになりやすいです。

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

TradingViewのストラテジーテスターでは、純利益、勝率、最大ドローダウン、プロフィットファクター、取引回数などを確認できます。初心者は純利益に目が行きがちですが、最も重視すべきなのは、最大ドローダウンと取引回数です。

最大ドローダウンは、資金がピークからどれだけ減ったかを示します。たとえば最終的に資金が3倍になっていても、途中で60%のドローダウンがある戦略は、多くの人が実運用できません。運用を続けられない戦略は、数字上どれだけ優秀でも意味がありません。

取引回数も重要です。10年間で10回しか取引していない戦略が高成績でも、それが偶然かどうか判断しにくいです。日足なら最低でも数十回、短期足なら数百回以上の取引が欲しいところです。ただし、売買回数が多すぎる戦略は手数料とスリッページに弱くなります。取引回数が多ければ良いという単純な話ではありません。

プロフィットファクターの見方

プロフィットファクターは、総利益を総損失で割った指標です。1.0を超えれば利益が損失を上回っていることを示します。ただし、極端に高いプロフィットファクターは疑って見るべきです。取引回数が少ない、損切りが遅すぎる、利確条件が過去データに最適化されすぎている、などの可能性があります。

実戦的には、プロフィットファクターだけで判断せず、勝率、平均利益、平均損失、最大ドローダウン、連敗数をセットで確認します。特に連敗数は重要です。過去に最大7連敗している戦略なら、将来10連敗程度は起こる前提で資金管理を組むべきです。

カーブフィッティングを避ける方法

バックテストで最も危険なのは、過去データに合わせすぎることです。パラメータを何度も調整して、最も利益が大きくなる数値を探すと、見た目は素晴らしい戦略ができます。しかし、それは過去の値動きに合わせた暗記であり、将来に通用する保証はありません。

カーブフィッティングを避けるには、まずパラメータに意味を持たせることです。移動平均線の期間を20日、50日、200日とするのは、多くの市場参加者が意識しやすい期間であり、一定の理由があります。一方、37日や143日が最も成績が良かったから採用する、という考え方は危険です。

次に、検証期間を分けることです。たとえば2015年から2021年までを開発期間、2022年以降を確認期間とします。開発期間で作った戦略が、確認期間でも大きく崩れないかを見ます。これをアウトオブサンプル検証と考えると理解しやすいです。

さらに、複数の銘柄や市場で確認することも有効です。特定の1銘柄だけで機能する戦略は、その銘柄固有の偶然かもしれません。似た性質を持つ複数銘柄で一定の傾向が出るなら、戦略としての信頼度は高まります。

手数料とスリッページを必ず入れる

バックテストでよくある失敗が、手数料とスリッページを無視することです。特に短期売買では、これだけで利益が消えます。売買回数が多い戦略ほど、コストの影響は大きくなります。

スリッページとは、理論上の価格と実際の約定価格のズレです。流動性の低い銘柄では、チャート上の終値で買えるとは限りません。買い注文を出した瞬間に価格が上がることもありますし、売りたいときに買い板が薄いこともあります。TradingView上で優秀に見える小型株戦略ほど、実際には約定面で不利になる可能性があります。

そのため、スクリプトの設定では、手数料を少し厳しめに入れることを推奨します。株式なら売買手数料だけでなく、実質的な価格ズレも考慮します。FXや暗号資産ならスプレッドも意識します。バックテストでギリギリ利益が出る程度の戦略は、実運用ではマイナスになる可能性が高いです。

ポジションサイズの考え方

戦略そのものが優秀でも、ポジションサイズを間違えると資金は簡単に壊れます。1回の取引で資金の20%を失う可能性があるような運用は、長期継続に向きません。戦略設計では、エントリー条件だけでなく、1回の負けでどれだけ資金を失うかを決める必要があります。

実践的には、1回の損失を総資金の1%から2%以内に抑える考え方が使いやすいです。たとえば資金100万円で、1回の最大損失を1万円に抑えたい場合、損切り幅が5%なら20万円分まで買えます。損切り幅が10%なら10万円分までです。このように、購入金額は「買いたい金額」ではなく「許容損失」から逆算します。

TradingViewのバックテストでも、固定数量ではなく資金比率やリスクベースで考えると、より現実的な検証になります。ただし、Pine Script上で完全なリスクベース管理を実装するには工夫が必要な場合があります。最初は、資金の一定割合を投資する設定から始め、後で損切り幅に応じた調整を検討するとよいです。

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

バックテストが良好でも、すぐに資金を投入するのは危険です。実運用前には、最低限のチェックリストを用意します。まず、シグナルが意図した条件で発生しているかをチャートで確認します。次に、過去の大きな下落局面でどのような損失が出たかを確認します。さらに、直近相場だけでなく、上昇相場、下落相場、レンジ相場のそれぞれで結果を見ます。

また、実際に発注できるかも重要です。TradingViewのシグナルは出ても、証券会社や取引所で同じタイミングに注文できるとは限りません。日本株の日足終値ベース戦略なら、終値確認後に翌営業日の寄り付きで売買する形になります。この場合、バックテスト上の終値約定とは結果が変わります。実運用ルールでは「シグナル確認後、いつ、どの注文方法で入るか」まで決めておく必要があります。

ペーパートレード期間を設ける

スクリプトが完成したら、いきなり本番資金で運用せず、一定期間ペーパートレードを行います。ペーパートレードでは、シグナルが出たら実際に注文するつもりで記録します。エントリー価格、損切り価格、利確価格、実際に約定できそうだった価格を残します。

この作業により、バックテストと実運用の差が見えてきます。シグナルが多すぎて管理できない、寄り付きで大きくギャップしてしまう、損切りが心理的に実行しづらい、複数銘柄で同時にシグナルが出て資金が足りない、などの問題は、実際に運用フローを試さないと分かりません。

アラート機能を活用する

TradingViewの強みは、スクリプトとアラートを組み合わせられることです。条件が成立したときに通知を受け取れば、チャートを常時監視する必要が減ります。ただし、アラートに依存しすぎるのも危険です。通知が遅れる、通信環境の問題で見逃す、条件が確定前に一時的に発生する、などのリスクがあります。

アラートを使う場合は、足が確定した後の条件で通知する設計にするのが基本です。たとえば日足戦略なら、日足確定後にシグナルを確認し、翌営業日に注文するという流れです。短期足でリアルタイムに売買する場合は、条件が足の途中で消えるリペイント問題にも注意が必要です。

リペイントとは、過去のシグナルが後から変わってしまう現象です。特に上位足のデータを参照する場合や、未確定足の高値安値を使う場合に発生しやすいです。バックテストでは綺麗に見えるのに、リアルタイムでは機能しない戦略の多くは、この問題を抱えています。

戦略改善の正しい順番

戦略改善では、いきなりパラメータを最適化するのではなく、まず負けトレードを分類します。負けトレードが発生したとき、それはトレンド転換による負けなのか、レンジ相場でのダマシなのか、急落イベントによる負けなのか、エントリーが遅すぎたのかを確認します。

たとえば、レンジ相場でのダマシが多いなら、トレンド判定を強化する意味があります。出来高が少ない銘柄で負けが多いなら、出来高条件を加える合理性があります。決算直前直後で損失が大きいなら、イベント回避ルールを検討できます。このように、負けの原因から条件を追加することが重要です。

反対に、利益を最大化するためだけに条件をいじると、過去最適化に近づきます。改善とは、過去の利益を増やす作業ではなく、将来も崩れにくい構造にする作業です。

複数戦略を組み合わせる発想

1つの戦略だけで全相場に対応しようとすると無理が出ます。上昇トレンドに強い戦略は、レンジ相場や急落相場で苦戦しやすいです。逆張り戦略は、レンジでは機能しても強いトレンド相場では踏まれやすくなります。

現実的には、複数の性質が異なる戦略を組み合わせる方が安定しやすいです。たとえば、日足の上昇トレンド押し目買い、短期の平均回帰、暴落時の段階買い、長期インデックス積立を分けて考えます。それぞれの戦略が利益を出す局面と苦手な局面を把握し、資金配分を調整します。

TradingViewでは、個別の戦略スクリプトを作って検証し、結果を比較できます。重要なのは、すべての戦略を同時に最適化しようとしないことです。まず単体の性質を理解し、その後でポートフォリオとして組み合わせる方が失敗しにくいです。

初心者がやりがちな失敗

最も多い失敗は、バックテスト結果の純利益だけを見て戦略を採用することです。純利益が高い戦略は魅力的に見えますが、最大ドローダウンが大きい、取引回数が少ない、特定期間だけで利益が出ている、手数料を入れていない、といった問題が隠れていることがあります。

次に多い失敗は、インジケーターを増やしすぎることです。RSI、MACD、ボリンジャーバンド、一目均衡表、ストキャスティクスをすべて同時に使えば精度が上がるように見えますが、実際には条件が複雑になりすぎ、何を検証しているのか分からなくなります。

三つ目は、損切りを軽視することです。エントリー条件だけを磨いても、出口が曖昧なら戦略として未完成です。損切り条件、利確条件、時間切れ撤退条件の3つを必ず考えます。時間切れ撤退とは、一定期間経っても期待した方向に動かない場合に撤退するルールです。資金効率を考えるうえで有効です。

実践例:戦略ノートの作り方

スクリプトを作るときは、必ず戦略ノートを作成します。記録する項目は、戦略名、対象市場、時間軸、狙う相場環境、エントリー条件、損切り条件、利確条件、検証期間、取引回数、勝率、平均利益、平均損失、最大ドローダウン、改善点です。

たとえば、戦略名は「日足上昇トレンド押し目買い」。対象市場は流動性のある大型株とETF。時間軸は日足。狙う相場環境は、指数が200日移動平均線より上にある上昇相場。エントリー条件は、個別銘柄が20日移動平均線付近から反発したとき。損切りは直近10日安値割れ。利確はリスク幅2倍または20日移動平均線割れ。このように書きます。

戦略ノートを作ることで、後から改善するときに軸がブレません。スクリプトだけが残っている状態だと、なぜその条件を入れたのか忘れます。条件の意味を忘れた戦略は、相場が悪化したときに使い続けるべきか停止すべきか判断できません。

TradingView戦略を実運用に近づける工夫

バックテストを実運用に近づけるには、約定ルールを厳しめに見る必要があります。日足終値で買いシグナルが出たなら、実際には翌日の寄り付きや指値で入ることになります。したがって、終値で買った前提のバックテストよりも不利になる可能性があります。

この差を確認するには、シグナル翌日の始値で入る前提に近い設計を検討します。また、急騰銘柄ではシグナル翌日に大きくギャップアップすることがあります。その場合、理論上の期待値は高くても実際のリスクリワードが悪化します。注文価格が予定より不利になった場合は見送るルールを持つことが重要です。

たとえば、買いシグナル発生後、翌日始値が予定エントリー価格から3%以上上に飛んだ場合は見送る、というルールです。これにより、高値掴みを減らせます。バックテスト上は機会損失に見える場合もありますが、実運用では重要な防御策になります。

コードより先に売買思想を固める

TradingViewスクリプトは便利ですが、コードを書くこと自体が目的になると危険です。優れた戦略は、複雑なコードから生まれるのではなく、明確な売買思想から生まれます。自分はトレンドを取りたいのか、反発を取りたいのか、急騰初動を取りたいのか、暴落時の行き過ぎを取りたいのかを先に決める必要があります。

売買思想が決まれば、必要な指標は自然に絞られます。トレンドを取りたいなら移動平均線や高値更新が中心になります。反発を取りたいなら乖離率やRSIが候補になります。急騰初動を取りたいなら出来高やレンジブレイクが重要になります。暴落時の行き過ぎを狙うなら、ボラティリティや下落率、出来高の急増を見ることになります。

このように、指標から戦略を作るのではなく、狙う値動きから指標を選ぶことが重要です。

まとめ

TradingViewスクリプトで優位性ある戦略を作るには、コードの文法よりも、検証可能な売買ルールを設計する力が重要です。まず、どの市場で、どの時間軸で、どのような値動きを狙うのかを明確にします。次に、エントリー、損切り、利確、ポジションサイズを客観的な条件に落とし込みます。

バックテストでは、純利益だけでなく、最大ドローダウン、取引回数、勝率、平均利益、平均損失、連敗数を確認します。手数料やスリッページを入れ、過去データに合わせすぎないよう注意します。さらに、開発期間と確認期間を分け、複数銘柄や複数市場で検証することで、戦略の耐久性を見ます。

最終的に重要なのは、実運用できるかどうかです。どれだけバックテスト成績が良くても、損切りが心理的に無理、シグナルが多すぎて管理できない、約定価格が大きくズレる、という戦略は続きません。TradingViewは強力な道具ですが、道具を使いこなすには、仮説、検証、記録、改善のサイクルが必要です。

最初はシンプルな戦略で十分です。上昇トレンドの押し目買い、レンジ下限からの反発、出来高を伴う高値更新など、意味を説明できる条件から始めてください。そして、バックテスト結果を鵜呑みにせず、負けトレードの原因を一つずつ分析してください。その積み重ねが、感覚的な売買から、再現性のある戦略運用へ移行する最短ルートです。

コメント

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