PR

Pineのstrategyとindicatorの違い【実機比較】

Pine Scriptのstrategyとindicatorの違い TradingView

この記事でわかること

  • Pine Scriptのindicatorとstrategyで、できることがどう違うか
  • 同じロジックを両方で書いたコードと、実機での表示
  • strategy()の既定値と、約定・アラートの注意点

移動平均線のゴールデンクロスで売買したら、過去にどれくらい勝てたのか。これを確かめたいのに、チャートに三角の目印が出るだけで止まっているなら、書いているのはindicatorです。損益まで出すにはstrategyで書き直す必要があります。

そこで同じSMAクロスのロジックを、indicatorとstrategyの両方で書いてみました。どちらも無料アカウントのチャートに追加して、表示とできることの違いを確かめています。

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

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

無料でTradingViewを始める →

indicatorとstrategyの違い

Pine Scriptのスクリプトは、最初にindicator()かstrategy()(ライブラリならlibrary())のどれか1つを宣言します。宣言によって、できることが次のように変わります。

項目 indicator strategy
主な用途 線や目印を表示する 売買をシミュレーションする
売買の命令 なし strategy.entry()などが使える
結果の表示 チャート上の線・目印 チャート下のストラテジーレポート
アラート alertcondition()とalert() alert()と注文約定のアラート
Pineスクリーナー 使える 使えない
無料プランの枠 1個として数える 1個として数える

strategyでもplot()で線は描けます。strategyはindicatorの機能に、売買のシミュレーションを足したものと考えると分かりやすいです。

最後の行は、無料アカウントで確かめた結果です。チャートにMACD系のインジケーターとstrategyを入れた状態でRSIを足そうとすると、上限のメッセージが出ました。そこに並ぶ適用中の一覧には、strategyも入っていました。無料プランの数え方はTradingView無料プランでインジケーターを増やす方法にまとめています。

同じロジックを2通りで書く

20本と50本のSMAのクロスを例にします。短期が長期を上に抜けたら買い、下に抜けたら手仕舞いです。

indicator版

//@version=6
indicator("SMAクロス(indicator版)", overlay = true)

fastLen = input.int(20, "短期SMA", minval = 1)
slowLen = input.int(50, "長期SMA", minval = 1)

fast = ta.sma(close, fastLen)
slow = ta.sma(close, slowLen)
plot(fast, "短期SMA", color = color.orange)
plot(slow, "長期SMA", color = color.blue)

longSig = ta.crossover(fast, slow)
exitSig = ta.crossunder(fast, slow)
plotshape(longSig, "買い", shape.triangleup, location.belowbar, color.teal, size = size.small)
plotshape(exitSig, "手仕舞い", shape.triangledown, location.abovebar, color.red, size = size.small)

alertcondition(longSig, "ゴールデンクロス", "短期SMAが長期SMAを上抜け")
alertcondition(exitSig, "デッドクロス", "短期SMAが長期SMAを下抜け")
indicator版のSMAクロスをアップルの日足に表示した画面
indicator版。クロスした場所に三角の目印が出るだけで、損益は計算されない

indicator版が出すのは「どこでクロスしたか」までです。alertcondition()を書いておくと、アラート作成の画面で「ゴールデンクロス」を条件に選べます。

strategy版

//@version=6
strategy("SMAクロス(strategy版)", overlay = true, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.05)

fastLen = input.int(20, "短期SMA", minval = 1)
slowLen = input.int(50, "長期SMA", minval = 1)

fast = ta.sma(close, fastLen)
slow = ta.sma(close, slowLen)
plot(fast, "短期SMA", color = color.orange)
plot(slow, "長期SMA", color = color.blue)

longSig = ta.crossover(fast, slow)
exitSig = ta.crossunder(fast, slow)

if longSig
    strategy.entry("Long", strategy.long)
if exitSig
    strategy.close("Long")

主な変更は3か所です(目印とアラートの行は外しました)。1行目の宣言をstrategy()にして、資金・数量・手数料を指定しました。目印の代わりにstrategy.entry()で買い、strategy.close()で手仕舞います。

strategy版のSMAクロスとストラテジーレポートを表示した画面
strategy版。チャートに売買の矢印が出て、下にストラテジーレポートが開く

チャートに追加すると、下に「ストラテジーレポート」が開きます(以前の名前はストラテジーテスター)。日本語の画面では「主要統計」「パフォーマンス分析」「トレード分析」の順に結果が並びます。アップルの日足で出た主要統計は次のとおりです。

項目 結果
期間 1980年12月12日〜2026年11月6日
総損益 +790,532.07ドル(+7,905.32%)
最大ドローダウン 179,377.40ドル(76.54%)
勝率 42.71%(96回中41回)
プロフィットファクター 2.206

初期資金1万ドル、毎回資産の100%を投入、手数料0.05%の設定です。総損益は大きく見えますが、途中で資産が76%減った時期があることも同時に分かります。過去の結果で、将来の成績を示すものではありません。

TradingViewで実際に試してみよう

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

▶ TradingViewを無料で開く

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

strategy()の既定値に注意

strategy版で資金や数量をわざわざ指定したのは、既定値のままだと結果が読みにくいからです。公式マニュアルにある主な既定値は次のとおりです。

引数 既定値 意味
initial_capital 1,000,000 初期資金
default_qty_type / default_qty_value strategy.fixed / 1 毎回1単位だけ売買する
commission_value 0 手数料なし
pyramiding 1 同じ方向のポジションは1つまで
process_orders_on_close false 注文は次のバーで約定

既定値のままだと、100万の資金で1単位ずつ売買し、手数料もかかりません。損益率がほとんど動かず、手数料の分だけ結果が甘くなります。資金・数量・手数料の3つは宣言で指定しておくのがおすすめです。

約定は次のバーの始値

strategyは既定では、バーが確定した時点で計算します。そこで出した注文が約定するのは次のバーの始値です。日足なら、クロスした日の翌日の寄り付きで買う計算です。

process_orders_on_close = trueを宣言に足すと、同じバーの終値で約定させられます。ただし、終値を見てから同じ終値で売買するのは、現実にはほぼできません。成績を良く見せる方向に働くので、使うなら理由をはっきりさせてからにしてください。バーの途中と確定後で結果が変わる問題は、Pine Scriptのリペイント問題で扱っています。

アラートの違い

alertcondition()はindicator用の関数です。公式マニュアルによると、strategyに書いてもコンパイルエラーにはなりませんが、アラートは作れません。実際にstrategy版へ1行足してみても、エラーは出ずにチャートへ追加できました。気づかずに残しやすいので注意してください。

strategyでアラートを出すには、alert()関数を使うか、注文が約定したときのアラートを使います。Webhookで外部に通知する方法はPine ScriptのアラートをWebhookでDiscord通知する方法で解説しています。

どちらで書くか

売買のタイミングを目で確かめたいだけなら、indicatorで十分です。Pineスクリーナーで銘柄を絞り込みたい場合も、strategyは使えないのでindicatorで書きます。スクリーナー用の書き方はTradingView Pineスクリーナーの使い方を参照してください。

損益・勝率・ドローダウンを数字で見たいならstrategyです。indicatorで条件を作って確かめ、良さそうならstrategyに書き換える、という順番が手戻りが少ないと思います。strategyの設計はClaudeでTradingViewストラテジーを本格設計するで詳しく扱っています。

こんな場合はstrategyに向かない
strategyは1つのチャート(銘柄)を対象に検証します。複数の銘柄をまとめて持つポートフォリオの検証には向きません。また、無料プランでは、strategyも2個までのインジケーター枠に含まれます。

まとめ

  • 宣言はindicator()かstrategy()のどちらか1つで、strategyだけが売買をシミュレーションできる
  • strategyの結果はチャート下のストラテジーレポートに出る
  • strategy()の既定値は初期資金100万・1単位・手数料0なので、宣言で指定しておく
  • 注文は既定で次のバーの始値で約定する
  • alertcondition()はstrategyでは使えないので、alert()か注文約定のアラートを使う

今回の検証は無料アカウントでもできました。チャートに読み込まれている範囲より長い期間で検証したい場合、Premium以上ならディープバックテストが使えます。公式ヘルプによると、最大200万本のバーまで遡れる機能です。プランの違いはTradingViewの有料プランはどれを選ぶ?で比べてください。Pine Scriptの基本から確認したい場合はPine Script入門ガイドがおすすめです。

📊 TradingViewプラン比較

プラン 月額 主な特徴
Basic(無料) $0 1タブに1チャート・広告あり・インジケーター2つ・価格アラート3件
Essential $12.95 広告なし・1タブに2チャート・インジケーター5つ・アラート20件
Plus ⭐人気 $29.95 1タブに4チャート・インジケーター10個・アラート100件
Premium $59.95 1タブに8チャート・インジケーター25個・アラート400件
Ultimate $199.95 1タブに16チャート・インジケーター50個・アラート1,000件

月額は月払い。年払いなら最大17%お得(2026年11月の料金ページより)

TradingViewを無料で始める

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

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