このページでは、以前海外で紹介されていた手法をもとに、トレーディングビュー用のオリジナルインジケーターを作って使いやすくしたものを紹介しています。
今回はSuperTrend(スーパートレンド)とボリンジャーバンドを組み合わせたシンプルなトレンドフォロー手法です。
SuperTrendとボリンジャーバンドの組み合わせ手法

以前、海外のYouTubeで紹介されていた手法で、現在は動画が非公開になっています。
基本的なコンセプトはシンプルで、
- SuperTrendでBUY/SELLのシグナルを取る
- ボリンジャーバンドの中心線(SMA)でトレンド方向をフィルタリングする
という2ステップだけです。
SuperTrendは一般的なインジケーターで、ATR(真の値幅)をベースにしたトレンド追従型のラインを引いてくれます。価格がラインを上抜けたらBUY、下抜けたらSELLというシンプルな構造です。
ただ、SuperTrend単品だとレンジ相場でダマシにつかまることが多いです。
そこでボリンジャーバンドの中心線(SMA50)をフィルターとして使います。
SMAより上ならBUYシグナルだけ、SMAより下ならSELLシグナルだけを有効にする、という考え方ですね。
エントリールール
BUYの場合:
- ローソク足がボリンジャーバンドの中心線(SMA)より上にある
- SuperTrendが上昇に転換(BUYシグナル点灯)
- そのままエントリー
SELLの場合はその逆です。
損切りはATRベースで自動設定、リスクリワードは1:1.5です。
SuperTrend BB Filter [STB] について
元の手法をベースに、バックテストもアラートも全部入りのオリジナルインジを作りました。
名前はSuperTrend BB Filter [STB]です。
設定項目
設定はグループごとにまとまっています。
SuperTrend
- ATR期間:10(デフォルト)
- 乗数:3.0(デフォルト)
乗数を上げるとラインが広くなってシグナルが減り、下げると逆に増えます。
ボリンジャーバンド
- BB期間:50(デフォルト。SMAフィルターの期間にもなります)
- BB乗数:2.0(デフォルト)
リスク管理
- SLのATR倍率:1.5(デフォルト)
- RR比率:1.5(デフォルト。SL幅の1.5倍をTPに設定)
チャートに貼ると、SuperTrendラインとボリンジャーバンドが表示されて、シグナル時に「BUY」「SELL」のラベルが出ます。
アラートについて
アラート条件は3つ用意しています。
- BUY/SELL統合(1枠で両方拾える)
- BUY単独
- SELL単独
アラートメッセージには通貨名と時間足が自動で入るので、複数ペアに設定してもどの通貨のどの足かすぐわかります。
バックテスト結果
GOLD 5分足

短い足だと手数料負けが激しいですし、ダマシにもあって成績が全く良くありません。
1~4時間足も同じ感じ。
GOLD 1日足

ただ、1日足みたいな大きな足になると結果は右肩上がりですね。
プロフィットファクターも1.4.
GOLD 一週間足

一週間足も結果は今のところプラスですね。プロフィットファクターも1.8。
かなり長い目で見ることになると思いますが、現状はいい結果といえるのではないでしょうか。
BTC 5分足

短い足は他の通貨も関係なく成績が悪いですね。
BTC 1日足

ビットコインはGOLDと違って可もなく不可もなく。ということは使えないということですね。
上下が大きいと結果もジグザグになるようです。
BTC 一週間足

BTC一週間足はまだサンプルになるローソク足が少ないので、一応大きくプラスプではありますが、先が全く読めませんね。
そのほか人気通貨
他にも
- EUR/USD
- USD/JPY
- GBP/USD
- AUD/USD
- USD/CAD
で調べましたが、

GBPの一週間足が唯一右上に向かっているかなという結果に。
何にしても大きな足前提ですね。
5分や、〇時間足はどれも結果が良くありませんでした。
Pine Scriptコード(無料・コピペOK)
Pine Script v6で書いたオリジナルコードです。バックテスト機能つきなので、TradingViewのStrategy Testerでそのまま検証できます。
トレーディングビューでも SuperTrend BB Filter [STB] という名前で無料公開しています。
ただ説明文が英語なので、日本語が良い方は下のコードで使ってください。
//@version=6
strategy("SuperTrend BB Strategy [STB]",
overlay = true,
commission_type = strategy.commission.percent,
commission_value = 0.05,
default_qty_type = strategy.fixed,
default_qty_value = 1,
initial_capital = 100000)
// ─── SuperTrend設定 ──────────────────────────────────────────
st_atr = input.int (10, "ATR期間", minval=1, group="SuperTrend")
st_mult = input.float(3.0, "乗数", minval=0.1, step=0.1, group="SuperTrend")
// ─── ボリンジャーバンド設定 ──────────────────────────────────
bb_period = input.int (50, "BB期間(SMAフィルター)", minval=1, group="ボリンジャーバンド")
bb_mult = input.float(2.0, "BB乗数", minval=0.1, step=0.1, group="ボリンジャーバンド")
// ─── リスク管理 ──────────────────────────────────────────────
sl_atr_mult = input.float(1.5, "SLのATR倍率", minval=0.1, step=0.1, group="リスク管理")
rr_ratio = input.float(1.5, "RR比率", minval=0.1, step=0.1, group="リスク管理")
// ─── 計算 ────────────────────────────────────────────────────
[st_line, dir] = ta.supertrend(st_mult, st_atr)
bb_mid = ta.sma(close, bb_period)
bb_dev = ta.stdev(close, bb_period)
bb_upper = bb_mid + bb_mult * bb_dev
bb_lower = bb_mid - bb_mult * bb_dev
atr14 = ta.atr(14)
// ─── シグナル(確定足のみ) ──────────────────────────────────
st_up = dir == -1 and dir[1] == 1
st_down = dir == 1 and dir[1] == -1
buy_signal = barstate.isconfirmed and st_up and close > bb_mid
sell_signal = barstate.isconfirmed and st_down and close < bb_mid
// ─── エントリー・エグジット ──────────────────────────────────
if buy_signal and strategy.position_size == 0
sl = close - atr14 * sl_atr_mult
tp = close + (close - sl) * rr_ratio
strategy.entry("Long", strategy.long)
strategy.exit ("Long Exit", "Long", stop=sl, limit=tp)
if sell_signal and strategy.position_size == 0
sl = close + atr14 * sl_atr_mult
tp = close - (sl - close) * rr_ratio
strategy.entry("Short", strategy.short)
strategy.exit ("Short Exit", "Short", stop=sl, limit=tp)
// ─── 表示 ────────────────────────────────────────────────────
plot(st_line, "SuperTrend", dir < 0 ? color.teal : color.red, linewidth=2)
p_upper = plot(bb_upper, "BB Upper", color.new(color.blue, 70), linewidth=1)
p_mid = plot(bb_mid, "BB Mid(SMAフィルター)", color.orange, linewidth=1)
p_lower = plot(bb_lower, "BB Lower", color.new(color.blue, 70), linewidth=1)
fill(p_upper, p_lower, color.new(color.blue, 90))
plotshape(buy_signal, "BUY", shape.labelup, location.belowbar,
color=color.new(color.teal, 0), text="BUY", textcolor=color.white, size=size.small)
plotshape(sell_signal, "SELL", shape.labeldown, location.abovebar,
color=color.new(color.red, 0), text="SELL", textcolor=color.white, size=size.small)
// ─── アラート ────────────────────────────────────────────────
alertcondition(buy_signal or sell_signal,
title = "STB BUY/SELL",
message = "{{ticker}} {{interval}} | BUY/SELLシグナル発生")
alertcondition(buy_signal,
title = "STB BUY",
message = "{{ticker}} {{interval}} | BUYシグナル")
alertcondition(sell_signal,
title = "STB SELL",
message = "{{ticker}} {{interval}} | SELLシグナル")
コピーしてTradingViewのPineエディタに貼り付けるだけで使えます。
バックテスト結果と感じたこと
結果を見て一番強く感じたのは、足の大きさで明確に明暗が分かれるということです。
5分足や数時間足はどのペアも成績が悪く、手数料負けとダマシが重なってほぼ使い物になりませんでした。
人気の通貨では調べましたが、目的は人それぞれだと思うので、興味のある方は無料なので使ってみてください。
あくまで個人的な感想なので、まずはご自身でバックテストして感触を確かめてみてください。
※ 本インジケーターおよびバックテスト結果は情報提供を目的としたものであり、将来の利益を保証するものではありません。実際のトレードにおける損益についての責任は負いかねますので、ご自身の判断のもとでご利用ください。



コメント