導入:トレンドと逆張りを極める複合インジケーター

今回は、TradingViewで使える非常に強力な複合インジケーターのPineスクリプト(v6)を無料公開します。

このインジケーターは、**「マルチタイムフレーム(MTF)のSMAとエンベロープ」**を軸に、相場の行き過ぎ(買われすぎ・売られすぎ)からの反発を精緻に捉える設計になっています。単なる逆張りではなく、複数のフィルターを組み合わせることでダマシを極限まで減らす工夫が施されています。

🚀 このインジケーターの3つの強み

  1. MTF(マルチタイムフレーム)エンベロープによる環境認識 上位足のSMAをベースにしたエンベロープ(乖離バンド)を表示。価格がエンベロープの外側に達した時のみ、逆張りの警戒ゾーンとして判定します。

  2. 3種の強力なオシレーターによる反転シグナル(エンベロープ外限定) エンベロープの外側にいる時だけ、「RSIのダイバージェンス」「ストキャスティクスのクロス」「MACDのクロス」のサインをチャート上に点灯させます。意味のない場所でのクロスを無視できるため、勝率が格段に上がります。

  3. 3x3 DMA(ずらし移動平均)による早期撤退センサー ジョー・ディナポリの手法で有名な「3x3 DMA」を搭載。エントリー後にこのラインを割り込んだら早期撤退(または利確)するという、決済の目安として非常に機能します。

🔍 プロはどうやってダマシを回避しているのか?

今回のロジックも優秀ですが、長年ランキング上位に居続けるプロのロジックは、さらに複雑な環境認識や独自のボラティリティフィルターを何層も実装しています。
自作インジケーターの成績が行き詰まった時は、実際に長期間利益を出し続けている「本物の市販EAやロジック」の挙動(エントリーと決済のタイミング)を観察することが一番の勉強になります。

👉 プロのフィルターロジックが詰まった実績EA(一本勝ち)を参考にする

公開:Pineスクリプト (v6) コード全文

TradingViewの「Pineエディタ」を開き、以下のコードをコピペして「チャートに追加」をクリックするだけで、すぐにご利用いただけます。

//@version=6
indicator("MTF SMA & エンベロープ + 3x3 DMA (MACD搭載)", overlay=true, max_labels_count=500)

// --- 1. 設定グループ ---
string GRP_MAIN = "基準となるSMAの設定"
mtf_res = input.timeframe("D", title="基準とする時間足 (変更可能)", group=GRP_MAIN)
sma_len = input.int(20, title="SMAの期間", group=GRP_MAIN)
kairi_threshold = input.float(1.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 = "反転補助シグナル設定(エンベロープ外限定)"

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)

// 🌟 今回の追加:MACDの設定(初期値はディナポリ仕様)
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移動平均線の取得 ---
sma_main_calc = ta.sma(close, sma_len)
sma_macro_calc = ta.sma(close, macro_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

// --- 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エンベロープの計算と描画 ---
env_upper = sma_main_mtf * (1 + (kairi_threshold / 100))
env_lower = sma_main_mtf * (1 - (kairi_threshold / 100))
plot(env_upper, color=color.new(color.red, 50), title="エンベロープ(上限)")
plot(env_lower, color=color.new(color.green, 50), title="エンベロープ(下限)")

// --- 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]

final_bearish_div = bearish_div and high[2] >= env_upper[2]
final_bullish_div = bullish_div and low[2] <= env_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 >= env_upper, title="ストキャス売", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.normal)
plotshape(use_stoch_cross and stoch_cross_up and low <= env_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 >= env_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 <= env_lower, title="MACD買", style=shape.diamond, location=location.belowbar, color=color.aqua, size=size.normal)


// --- 10. アラート条件の設定 ---
touch_upper = high >= env_upper
touch_lower = low <= env_lower
alertcondition(touch_upper, title="【売】エンベロープ上限タッチ", message="エンベロープ上限にタッチ!下位足で反転サインと3x3 DMA抜けを監視してください。")
alertcondition(touch_lower, title="【買】エンベロープ下限タッチ", message="エンベロープ下限にタッチ!下位足で反転サインと3x3 DMA抜けを監視してください。")

設定画面から、監視する時間足やインジケーターの表示ON/OFFを自由にカスタマイズ可能です。ぜひご自身のトレードスタイルに合わせて調整してみてください!