導入:ボリンジャーバンドによる動的フィルターの真髄
先日の「エンベロープ版」に引き続き、今回はエンベロープを**「ボリンジャーバンド (BB)」**に置き換えたTradingView専用インジケーターのPineスクリプト(v6)を無料公開します。
エンベロープが「固定のパーセンテージ」で乖離幅を測るのに対し、ボリンジャーバンドは「標準偏差(σ)」を用いて相場のボラティリティ(変動率)に合わせてバンド幅が動的に収縮・拡大します。これにより、ボラティリティの低い相場でのチャンスを逃さず、逆にボラティリティが爆発している時のダマシを回避しやすくなります。
🚀 このインジケーターの3つの強み
-
MTF(マルチタイムフレーム)ボリンジャーバンド 上位足のSMAと標準偏差をベースにしたBBを表示。価格がBBの±2σ(設定で変更可能)の外側に達した時のみ、逆張りの極度の警戒(チャンス)ゾーンとして判定します。相場のボラティリティに追従するのが最大の特徴です。
-
3種のオシレーターとの強固な連携 BBの外側にいる時だけ、「RSIダイバージェンス」「ストキャスティクス・クロス」「MACD・クロス」のサインを点灯。バンドウォーク(BBに沿って一方向に進み続ける現象)に巻き込まれるリスクを、オシレーターの反転確認によって軽減します。
-
3x3 DMA(ずらし移動平均)による早期撤退センサー 前回同様、ディナポリの手法である「3x3 DMA」を搭載。エントリー後にこのラインを割り込んだら早期撤退するという明確なルール作りが可能です。
🔍 プロはどうやってダマシを回避しているのか?
今回のロジックも優秀ですが、長年ランキング上位に居続けるプロのロジックは、さらに複雑な環境認識や独自のボラティリティフィルターを何層も実装しています。
自作インジケーターの成績が行き詰まった時は、実際に長期間利益を出し続けている「本物の市販EAやロジック」の挙動(エントリーと決済のタイミング)を観察することが一番の勉強になります。
公開:Pineスクリプト (v6) コード全文
TradingViewの「Pineエディタ」を開き、以下のコードをコピペして「チャートに追加」をクリックするだけで、すぐにご利用いただけます。(※末尾のアラート条件はBB用に補完してあります)
//@version=6
indicator("MTF SMA & ボリンジャーバンド + 3x3 DMA (MACD搭載)", overlay=true, max_labels_count=500)
// --- 1. 設定グループ ---
string GRP_MAIN = "基準となるSMA・BBの設定"
mtf_res = input.timeframe("D", title="基準とする時間足 (変更可能)", group=GRP_MAIN)
sma_len = input.int(20, title="SMAの期間", group=GRP_MAIN)
// 🌟 今回の変更:エンベロープの幅を削除し、ボリンジャーバンドの標準偏差に変更
bb_mult = input.float(2.0, title="ボリンジャーバンドの標準偏差(σ)", step=0.1, group=GRP_MAIN)
string GRP_MACRO = "長期トレンド設定"
use_macro = input.bool(true, title="長期トレンドSMAを表示", group=GRP_MACRO)
macro_len = input.int(75, title="長期トレンドSMAの期間", group=GRP_MACRO)
string GRP_DMA = "早期撤退センサー"
show_dma = input.bool(true, title="3x3 DMA を表示", group=GRP_DMA)
// --- 2. オシレーターのパラメータ設定 ---
string GRP_OSC = "反転補助シグナル設定(BB外限定)"
use_rsi_div = input.bool(true, title="① RSIダイバージェンスを表示", group=GRP_OSC)
rsi_len = input.int(14, title=" ▶ RSI 期間", group=GRP_OSC)
use_stoch_cross = input.bool(true, title="② ストキャスティクスを表示", group=GRP_OSC)
stoch_len = input.int(14, title=" ▶ ストキャス 期間", group=GRP_OSC)
stoch_k_len = input.int(3, title=" ▶ ストキャス %K", group=GRP_OSC)
stoch_d_len = input.int(3, title=" ▶ ストキャス %D", group=GRP_OSC)
stoch_ob = input.int(80, title=" ▶ 買われすぎ水準", group=GRP_OSC)
stoch_os = input.int(20, title=" ▶ 売られすぎ水準", group=GRP_OSC)
use_macd_cross = input.bool(true, title="③ MACDクロスを表示", group=GRP_OSC)
macd_fast = input.int(8, title=" ▶ MACD 短期", group=GRP_OSC)
macd_slow = input.int(17, title=" ▶ MACD 長期", group=GRP_OSC)
macd_sig = input.int(9, title=" ▶ MACD シグナル", group=GRP_OSC)
// --- 3. 3x3 DMA の計算と描画 ---
dma3 = ta.sma(close, 3)
plot(show_dma ? dma3 : na, color=color.fuchsia, linewidth=2, offset=3, title="3x3 DMA")
// --- 4. MTF移動平均線と標準偏差(BB用)の取得 ---
sma_main_calc = ta.sma(close, sma_len)
sma_macro_calc = ta.sma(close, macro_len)
// 🌟 今回の変更:ボリンジャーバンド用の標準偏差を計算
stdev_calc = ta.stdev(close, sma_len)
is_mtf = timeframe.in_seconds(mtf_res) > timeframe.in_seconds("")
sma_main_mtf = is_mtf ? request.security(syminfo.tickerid, mtf_res, sma_main_calc, lookahead=barmerge.lookahead_off) : sma_main_calc
sma_macro_mtf = is_mtf ? request.security(syminfo.tickerid, mtf_res, sma_macro_calc, lookahead=barmerge.lookahead_off) : sma_macro_calc
stdev_mtf = is_mtf ? request.security(syminfo.tickerid, mtf_res, stdev_calc, lookahead=barmerge.lookahead_off) : stdev_calc
// --- 5. 基準SMAの描画 ---
plot(sma_main_mtf, color=color.aqua, linewidth=3, title="基準SMA")
plot(use_macro ? sma_macro_mtf : na, color=color.orange, linewidth=2, title="長期トレンドSMA")
// --- 6. 🌟 MTFボリンジャーバンドの計算と描画 ---
bb_upper = sma_main_mtf + (bb_mult * stdev_mtf)
bb_lower = sma_main_mtf - (bb_mult * stdev_mtf)
plot(bb_upper, color=color.new(color.red, 50), title="BB(上限)")
plot(bb_lower, color=color.new(color.green, 50), title="BB(下限)")
// --- 7. ① RSIダイバージェンス ---
rsi_val = ta.rsi(close, rsi_len)
rsi_ph = ta.pivothigh(rsi_val, 2, 2)
rsi_pl = ta.pivotlow(rsi_val, 2, 2)
var float last_ph_rsi = na
var float last_ph_price = na
var float last_pl_rsi = na
var float last_pl_price = na
bearish_div = not na(rsi_ph) and high[2] > last_ph_price and rsi_val[2] < last_ph_rsi
bullish_div = not na(rsi_pl) and low[2] < last_pl_price and rsi_val[2] > last_pl_rsi
if not na(rsi_ph)
last_ph_rsi := rsi_val[2]
last_ph_price := high[2]
if not na(rsi_pl)
last_pl_rsi := rsi_val[2]
last_pl_price := low[2]
// 🌟 エンベロープからBBへの条件変更
final_bearish_div = bearish_div and high[2] >= bb_upper[2]
final_bullish_div = bullish_div and low[2] <= bb_lower[2]
gap = ta.atr(14) * 0.2
if use_rsi_div and final_bearish_div
label.new(x=bar_index[2], y=high[2] + gap[2], text="RSI Div", color=color.new(color.red, 30), textcolor=color.white, style=label.style_label_down, size=size.small)
if use_rsi_div and final_bullish_div
label.new(x=bar_index[2], y=low[2] - gap[2], text="RSI Div", color=color.new(color.green, 30), textcolor=color.white, style=label.style_label_up, size=size.small)
// --- 8. ② ストキャスティクス・クロス ---
raw_stoch = ta.stoch(close, high, low, stoch_len)
stoch_k_val = ta.sma(raw_stoch, stoch_k_len)
stoch_d_val = ta.sma(stoch_k_val, stoch_d_len)
stoch_cross_down = ta.crossunder(stoch_k_val, stoch_d_val) and (stoch_k_val >= stoch_ob or stoch_d_val >= stoch_ob)
stoch_cross_up = ta.crossover(stoch_k_val, stoch_d_val) and (stoch_k_val <= stoch_os or stoch_d_val <= stoch_os)
plotshape(use_stoch_cross and stoch_cross_down and high >= bb_upper, title="ストキャス売", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.normal)
plotshape(use_stoch_cross and stoch_cross_up and low <= bb_lower, title="ストキャス買", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.normal)
// --- 9. ③ MACD・クロス ---
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_sig)
macd_cross_down = ta.crossunder(macd_line, signal_line)
macd_cross_up = ta.crossover(macd_line, signal_line)
plotshape(use_macd_cross and macd_cross_down and high >= bb_upper, title="MACD売", style=shape.diamond, location=location.abovebar, color=color.orange, size=size.normal)
plotshape(use_macd_cross and macd_cross_up and low <= bb_lower, title="MACD買", style=shape.diamond, location=location.belowbar, color=color.aqua, size=size.normal)
// --- 10. アラート条件の設定 ---
touch_upper = high >= bb_upper
touch_lower = low <= bb_lower
alertcondition(touch_upper, title="【売】BB上限タッチ", message="BB上限にタッチ!下位足で反転サインと3x3 DMA抜けを監視してください。")
alertcondition(touch_lower, title="【買】BB下限タッチ", message="BB下限にタッチ!下位足で反転サインと3x3 DMA抜けを監視してください。")
ご自身のトレードスタイルやボラティリティに合わせて、設定画面からBBの標準偏差(初期値は2.0)や、MTFの基準時間足を自由にカスタマイズ可能です!