DiNapoli Hybrid v5: MACD(True Scalable) & Stoch

「MACDとストキャスティクスを同じサブウィンドウに重ねて表示したい」 テクニカル分析を深く追求するトレーダーであれば、誰もが一度はぶつかる壁です。 ジョー・ディナポリが提唱する「MACD(Predictive Oscillator)」と「ストキャスティクス」の組み合わせは極めて強力なエッジを持ちますが、**「値幅に制限のないMACD」と「0〜100の中で動くストキャスティクス」**はスケール(目盛り)が全く異なるため、単純に重ねて表示することはできません。 この DiNapoli Hybrid v5 は、その長年のジレンマを「相対スケーリング」というアルゴリズムで解決した完全オリジナルのPine Scriptです。 インジケーターの特徴 ディナポリの「黄金パラメーター」をデフォルト実装 ストキャスティクスは (8, 3, 3)、MACDは (8.389, 17.518, 9.050) という、ディナポリ手法において最も機能するとされる数値を初期設定から組み込んでいます。 True Scalable(真のスケーリング)機能 過去100本の振幅を基準にMACDの数値を「-0.5〜+0.5」の割合に正規化し、それをストキャスティクスの「0〜100」のスケールに無理なくフィットさせます。 パラメーターの MACD 表示幅 (0-100) を調整することで、ボラティリティが異なるどんな銘柄でも、2つの波形を視覚的に美しくシンクロさせることが可能です。 「波の同調」による強烈なシグナル ストキャスティクスの反転と、MACDのゼロラインクロスやシグナルクロスが「同じ座標上」で重なった瞬間の視覚的インパクトは、裁量トレードにおける強力なトリガーとなります。 TradingViewへの追加方法 以下のPine Scriptコードをコピーし、TradingViewの画面下部にある「Pineエディタ」に貼り付けて「チャートに追加」をクリックしてください。 //@version=6 indicator("DiNapoli Hybrid v5: MACD(True Scalable) & Stoch", overlay=false, precision=4) // ========================================== // --- パラメーター --- // ========================================== // 1. Stochastic (8, 3, 3) grp_stoch = "Stochastic 設定" stochKPeriod = input.int(8, "%K 期間", group=grp_stoch) stochKSmooth = input.int(3, "%K 平滑化", group=grp_stoch) stochDPeriod = input.int(3, "%D 期間", group=grp_stoch) // 2. MACD (Predictive Oscillator: 8.389, 17.518, 9.050) grp_macd = "MACD (Predictive Oscillator) 設定" fastLen = input.float(8.389, "FastMA Length", group=grp_macd) slowLen = input.float(17.518, "SlowMA Length", group=grp_macd) signalLen = input.float(9.050, "Signal Length", group=grp_macd) // 3. 本当の拡大調整 grp_adj = "表示調整" // ★この数値を大きくするとMACDがストキャスの幅に対して大きく描画されます。 // デフォルト50は「センター50を中心に、上下25(つまり25-75の幅)で振る」設定です。100にすると0-100いっぱいに振ります。 macdScale = input.float(50.0, "MACD 表示幅 (0-100)", minval=1.0, maxval=200.0, step=5.0, group=grp_adj, tooltip="ストキャスの0-100の幅に対して、MACDをどれくらいの大きさで表示させるか。100にすると画面いっぱいに振れます。") // ========================================== // --- 計算ロジック --- // ========================================== // --- ストキャス計算 --- rawK = ta.stoch(close, high, low, stochKPeriod) kLine = ta.sma(rawK, stochKSmooth) dLine = ta.sma(kLine, stochDPeriod) // --- MACD計算 --- fastMA = ta.ema(close, math.round(fastLen)) slowMA = ta.ema(close, math.round(slowLen)) baseMacd = fastMA - slowMA baseSignal = ta.ema(baseMacd, math.round(signalLen)) // --- ★本当の拡大処理(相対スケーリング) --- // 1. まず、MACDの過去の特定の期間の振幅(最高値と最安値の幅)を取得する // これにより、価格帯が違う銘柄でも同じように扱えるようにする macdLookback = 100 // 直近100本を基準にする highestMacd = ta.highest(baseMacd, macdLookback) lowestMacd = ta.lowest(baseMacd, macdLookback) macdRange = highestMacd - lowestMacd // 2. MACDの生データを、直近の振幅に対する「割合(-0.5〜+0.5)」に変換する // (macdRangeが0の時のエラー回避を入れる) normMacd = macdRange != 0 ? (baseMacd - ((highestMacd + lowestMacd) / 2)) / macdRange : 0 normSignal = macdRange != 0 ? (baseSignal - ((highestMacd + lowestMacd) / 2)) / macdRange : 0 // 3. その割合に、ユーザーが設定した「表示幅(macdScale)」を掛け、 // センター50を中心に上下に振らせる。 // macdScale=100の時、normMacdが0.5なら、50 + (0.5 * 100) = 100 になる。 scaledMacd = 50 + (normMacd * macdScale) scaledSignal = 50 + (normSignal * macdScale) // ========================================== // --- 描画 --- // ========================================== // 基準線(0-100固定) hUpper = hline(80, "Stoch Overbought", color=color.new(color.gray, 60), linestyle=hline.style_dotted) hMid = hline(50, "Center (MACD Zero Line)", color=color.new(color.white, 60), linestyle=hline.style_dashed) hLower = hline(20, "Stoch Oversold", color=color.new(color.gray, 60), linestyle=hline.style_dotted) fill(hUpper, hLower, color=color.new(color.gray, 95)) // 1. Stochastic の描画 plot(kLine, title="Stoch %K", color=color.new(color.aqua, 0), linewidth=2) plot(dLine, title="Stoch %D", color=color.new(color.orange, 0), linewidth=1) // 2. MACD Lines の描画(スケーリング済み) // これで、macdScale=100にすれば、ストキャスの0-100の波と同じ大きさでMACDが動きます。 plot(scaledMacd, title="MACD Line", color=color.new(color.red, 0), linewidth=2) plot(scaledSignal, title="Signal Line", color=color.new(color.white, 30), linewidth=1) ▼ このオリジナル・インジケーターはTradingView専用です ▼ ...

2026年7月4日 · 2 min · AutoTrader

田向式MTF水平線 & MA & スクショ枠

「過去の高値・安値に水平線を引いて、ブレイクや反発を狙う」 これはシンプルでありながら最強の手法の一つです(日本でも著名なトレーダーである田向氏の著書等で有名ですね)。しかし、日足・4時間足・1時間足の高安にいちいち手作業で線を引くのは非常に手間がかかりますし、チャートが線だらけになってしまいます。 この 田向式MTF水平線 & MA & スクショ枠 は、その面倒な作業を完全に自動化し、さらに**「情報発信者(ブロガー・X民)に嬉しい特殊機能」**を搭載した変態的かつ実用的なインジケーターです。 インジケーターの特徴 MTF自動水平線(幽霊ラベル対策済み) 日足(赤)、4時間足(黄)、1時間足(青)の直近の高値・安値を自動で判定し、常に最新のレジスタンス(R)とサポート(S)を水平線として描画します。 特筆すべきは**「究極の縦軸ラベル表示ロジック」**です。通常のスクリプトでは過去の線にもラベルが残ってしまい縦軸がごちゃごちゃ(幽霊ラベル)になりますが、このインジでは「最新のローソク足」の時だけ価格を読み取ってラベルを表示するため、右端の価格軸が極めてクリアに保たれます。 スクショ用:直近本数フレーム機能 「X(Twitter)やブログにチャートのスクショを貼りたいけど、どこからどこまでを見せればいいか迷う……」という経験はありませんか? このインジケーターには、直近N本(デフォルト100本)の背景をハイライトし、開始地点に縦の点線を引く機能がついています。この「青い枠」の部分だけを切り取ってスクショすれば、**「誰が見ても同じ縮尺で、今一番重要な値動き」**を綺麗に共有することができます。 10 MA(移動平均線)同時表示機能 先ほど公開した「10 MA/DMA Flexible Master」の基本機能も内包しており、SMA・EMA・WMA・RMAを最大10本まで同時表示可能です。 TradingViewへの追加方法 以下のPine Scriptコードをコピーし、TradingViewの画面下部にある「Pineエディタ」に貼り付けて「チャートに追加」をクリックしてください。 //@version=6 indicator("田向式MTF水平線 & MA & スクショ枠", overlay=true, max_lines_count=100) // ========================================== // 1. MTF自動水平線(高安4本制限)の設定 // ========================================== show_labels = input.bool(true, title="価格ラベルを縦軸に表示", group="自動水平線:基本設定") leftBars = input.int(4, title="高安判定の左側足数", minval=1, group="自動水平線:基本設定") rightBars = input.int(4, title="高安判定の右側足数", minval=1, group="自動水平線:基本設定") show_d = input.bool(true, title="表示", group="自動水平線:日足", inline="d") col_d = input.color(color.red, title="色(赤)", group="自動水平線:日足", inline="d") width_d = input.int(2, title="太さ", minval=1, maxval=4, group="自動水平線:日足", inline="d") show_4h = input.bool(true, title="表示", group="自動水平線:4時間足", inline="4h") col_4h = input.color(color.yellow, title="色(黄)", group="自動水平線:4時間足", inline="4h") width_4h = input.int(2, title="太さ", minval=1, maxval=4, group="自動水平線:4時間足", inline="4h") show_1h = input.bool(true, title="表示", group="自動水平線:1時間足", inline="1h") col_1h = input.color(color.blue, title="色(青)", group="自動水平線:1時間足", inline="1h") width_1h = input.int(1, title="太さ", minval=1, maxval=4, group="自動水平線:1時間足", inline="1h") // 高安値取得関数 get_pivots() => ph = ta.pivothigh(high, leftBars, rightBars) pl = ta.pivotlow(low, leftBars, rightBars) ph_series = ta.valuewhen(not na(ph), ph, 0) pl_series = ta.valuewhen(not na(pl), pl, 0) [ph_series, pl_series] // 各時間足データの取得 [ph_d, pl_d] = request.security(syminfo.tickerid, "D", get_pivots(), barmerge.gaps_off, barmerge.lookahead_off) [ph_4h, pl_4h] = request.security(syminfo.tickerid, "240", get_pivots(), barmerge.gaps_off, barmerge.lookahead_off) [ph_1h, pl_1h] = request.security(syminfo.tickerid, "60", get_pivots(), barmerge.gaps_off, barmerge.lookahead_off) // オブジェクト管理変数 var line d_h1 = na, var line d_h2 = na var line d_l1 = na, var line d_l2 = na var line b4_h1 = na, var line b4_h2 = na var line b4_l1 = na, var line b4_l2 = na var line b1_h1 = na, var line b1_h2 = na var line b1_l1 = na, var line b1_l2 = na // ライン生成・消去ロジック(古い線は完全に消去されます) if ta.change(ph_d) != 0 line.delete(d_h2), d_h2 := d_h1, d_h1 := line.new(x1=bar_index-1, y1=ph_d, x2=bar_index, y2=ph_d, color=show_d ? col_d : na, width=width_d, extend=extend.both) if ta.change(pl_d) != 0 line.delete(d_l2), d_l2 := d_l1, d_l1 := line.new(x1=bar_index-1, y1=pl_d, x2=bar_index, y2=pl_d, color=show_d ? col_d : na, width=width_d, extend=extend.both) if ta.change(ph_4h) != 0 line.delete(b4_h2), b4_h2 := b4_h1, b4_h1 := line.new(x1=bar_index-1, y1=ph_4h, x2=bar_index, y2=ph_4h, color=show_4h ? col_4h : na, width=width_4h, extend=extend.both) if ta.change(pl_4h) != 0 line.delete(b4_l2), b4_l2 := b4_l1, b4_l1 := line.new(x1=bar_index-1, y1=pl_4h, x2=bar_index, y2=pl_4h, color=show_4h ? col_4h : na, width=width_4h, extend=extend.both) if ta.change(ph_1h) != 0 line.delete(b1_h2), b1_h2 := b1_h1, b1_h1 := line.new(x1=bar_index-1, y1=ph_1h, x2=bar_index, y2=ph_1h, color=show_1h ? col_1h : na, width=width_1h, extend=extend.both) if ta.change(pl_1h) != 0 line.delete(b1_l2), b1_l2 := b1_l1, b1_l1 := line.new(x1=bar_index-1, y1=pl_1h, x2=bar_index, y2=pl_1h, color=show_1h ? col_1h : na, width=width_1h, extend=extend.both) // ========================================== // ★ 究極の縦軸ラベル表示ロジック(幽霊ラベル対策済み) // barstate.islast(最新のローソク足)の時だけ、現在引かれている線の価格を読み取って縦軸に表示します // 過去の足にはデータが存在しなくなるため、マウスを動かしても古いラベルは一切出ません! // ========================================== plot(barstate.islast and show_labels and show_d and not na(d_h1) ? line.get_y1(d_h1) : na, title="日足R1", color=col_d, display=display.price_scale, editable=false) plot(barstate.islast and show_labels and show_d and not na(d_h2) ? line.get_y1(d_h2) : na, title="日足R2", color=col_d, display=display.price_scale, editable=false) plot(barstate.islast and show_labels and show_d and not na(d_l1) ? line.get_y1(d_l1) : na, title="日足S1", color=col_d, display=display.price_scale, editable=false) plot(barstate.islast and show_labels and show_d and not na(d_l2) ? line.get_y1(d_l2) : na, title="日足S2", color=col_d, display=display.price_scale, editable=false) plot(barstate.islast and show_labels and show_4h and not na(b4_h1) ? line.get_y1(b4_h1) : na, title="4HR1", color=col_4h, display=display.price_scale, editable=false) plot(barstate.islast and show_labels and show_4h and not na(b4_h2) ? line.get_y1(b4_h2) : na, title="4HR2", color=col_4h, display=display.price_scale, editable=false) plot(barstate.islast and show_labels and show_4h and not na(b4_l1) ? line.get_y1(b4_l1) : na, title="4HS1", color=col_4h, display=display.price_scale, editable=false) plot(barstate.islast and show_labels and show_4h and not na(b4_l2) ? line.get_y1(b4_l2) : na, title="4HS2", color=col_4h, display=display.price_scale, editable=false) plot(barstate.islast and show_labels and show_1h and not na(b1_h1) ? line.get_y1(b1_h1) : na, title="1HR1", color=col_1h, display=display.price_scale, editable=false) plot(barstate.islast and show_labels and show_1h and not na(b1_h2) ? line.get_y1(b1_h2) : na, title="1HR2", color=col_1h, display=display.price_scale, editable=false) plot(barstate.islast and show_labels and show_1h and not na(b1_l1) ? line.get_y1(b1_l1) : na, title="1HS1", color=col_1h, display=display.price_scale, editable=false) plot(barstate.islast and show_labels and show_1h and not na(b1_l2) ? line.get_y1(b1_l2) : na, title="1HS2", color=col_1h, display=display.price_scale, editable=false) // ========================================== // 2. スクショ用:直近本数フレーム // ========================================== show_frame = input.bool(true, title="フレーム枠を表示(オン/オフ)", group="スクショ用フレーム設定") frame_bars = input.int(100, title="フレームの本数", minval=1, group="スクショ用フレーム設定") bg_color = input.color(color.new(color.blue, 95), title="背景色", group="スクショ用フレーム設定") line_col = input.color(color.gray, title="縦線の色", group="スクショ用フレーム設定") is_recent = (last_bar_index - bar_index) < frame_bars bgcolor(show_frame and is_recent ? bg_color : na, title="背景ハイライト") var line start_line = na if barstate.islast line.delete(start_line) if show_frame start_line := line.new(bar_index - frame_bars, low, bar_index - frame_bars, high, extend=extend.both, color=line_col, style=line.style_dashed, width=1) // ========================================== // 3. 移動平均線(10本)の設定 // ========================================== get_ma(type, len) => float ma = na switch type "SMA" => ma := ta.sma(close, len) "EMA" => ma := ta.ema(close, len) "WMA" => ma := ta.wma(close, len) "RMA" => ma := ta.rma(close, len) ma t1 = input.string("SMA", title="種類", options=["SMA", "EMA", "WMA", "RMA"], group="MA 1", inline="m1"), l1 = input.int(20, title="期間", group="MA 1", inline="m1"), o1 = input.int(0, title="ずらし幅", group="MA 1", inline="m1") t2 = input.string("SMA", title="種類", options=["SMA", "EMA", "WMA", "RMA"], group="MA 2", inline="m2"), l2 = input.int(50, title="期間", group="MA 2", inline="m2"), o2 = input.int(0, title="ずらし幅", group="MA 2", inline="m2") t3 = input.string("SMA", title="種類", options=["SMA", "EMA", "WMA", "RMA"], group="MA 3", inline="m3"), l3 = input.int(100, title="期間", group="MA 3", inline="m3"), o3 = input.int(0, title="ずらし幅", group="MA 3", inline="m3") t4 = input.string("SMA", title="種類", options=["SMA", "EMA", "WMA", "RMA"], group="MA 4", inline="m4"), l4 = input.int(200, title="期間", group="MA 4", inline="m4"), o4 = input.int(0, title="ずらし幅", group="MA 4", inline="m4") t5 = input.string("SMA", title="種類", options=["SMA", "EMA", "WMA", "RMA"], group="MA 5", inline="m5"), l5 = input.int(20, title="期間", group="MA 5", inline="m5"), o5 = input.int(0, title="ずらし幅", group="MA 5", inline="m5") t6 = input.string("SMA", title="種類", options=["SMA", "EMA", "WMA", "RMA"], group="MA 6", inline="m6"), l6 = input.int(20, title="期間", group="MA 6", inline="m6"), o6 = input.int(0, title="ずらし幅", group="MA 6", inline="m6") t7 = input.string("SMA", title="種類", options=["SMA", "EMA", "WMA", "RMA"], group="MA 7", inline="m7"), l7 = input.int(20, title="期間", group="MA 7", inline="m7"), o7 = input.int(0, title="ずらし幅", group="MA 7", inline="m7") t8 = input.string("SMA", title="種類", options=["SMA", "EMA", "WMA", "RMA"], group="MA 8", inline="m8"), l8 = input.int(20, title="期間", group="MA 8", inline="m8"), o8 = input.int(0, title="ずらし幅", group="MA 8", inline="m8") t9 = input.string("SMA", title="種類", options=["SMA", "EMA", "WMA", "RMA"], group="MA 9", inline="m9"), l9 = input.int(20, title="期間", group="MA 9", inline="m9"), o9 = input.int(0, title="ずらし幅", group="MA 9", inline="m9") t10 = input.string("SMA", title="種類", options=["SMA", "EMA", "WMA", "RMA"], group="MA 10", inline="m10"), l10 = input.int(20, title="期間", group="MA 10", inline="m10"), o10 = input.int(0, title="ずらし幅", group="MA 10", inline="m10") plot(get_ma(t1, l1), offset=o1, title="MA 1", color=color.blue, display=display.pane) plot(get_ma(t2, l2), offset=o2, title="MA 2", color=color.red, display=display.pane) plot(get_ma(t3, l3), offset=o3, title="MA 3", color=color.green, display=display.pane) plot(get_ma(t4, l4), offset=o4, title="MA 4", color=color.purple, display=display.pane) plot(get_ma(t5, l5), offset=o5, title="MA 5", color=color.gray, display=display.pane) plot(get_ma(t6, l6), offset=o6, title="MA 6", color=color.teal, display=display.pane) plot(get_ma(t7, l7), offset=o7, title="MA 7", color=color.fuchsia, display=display.pane) plot(get_ma(t8, l8), offset=o8, title="MA 8", color=color.maroon, display=display.pane) plot(get_ma(t9, l9), offset=o9, title="MA 9", color=color.navy, display=display.pane) plot(get_ma(t10, l10), offset=o10, title="MA 10", color=color.olive, display=display.pane) ▼ このオリジナル・インジケーターはTradingView専用です ▼ ...

2026年7月4日 · 5 min · AutoTrader

10 MA/DMA Flexible Master v2

「TradingViewの無料プラン(または下位プラン)だと、インジケーターの表示枠が足りなくて移動平均線が全部表示できない……」 複数の時間軸のEMAや、特殊なずらし移動平均線(DMA)を使っているトレーダーにとって、TradingViewの「表示上限数」は悩みの種です。 この 10 MA/DMA Flexible Master v2 は、たった 「1枠」のインジケーター枠を消費するだけで、最大10本の移動平均線を自由自在に表示できる 超便利ツールです。 インジケーターの特徴 ディナポリのDMA(Displaced Moving Average)を完全再現 初期設定として、ジョー・ディナポリ手法で必須となる 「3x3 DMA」「7x5 DMA」「25x5 DMA」 (※指定した期間だけ過去の価格を参照して先行表示させる移動平均線)がセットされています。 4種類の計算ロジックに対応 それぞれのMAについて、設定画面のドロップダウンから直感的に SMA(単純) EMA(指数平滑) HMA(ハル) WMA(加重) を切り替えることができます。 王道のパーフェクトオーダー用EMAも標準装備 ディナポリのDMA3本に加え、初期状態で「EMA10, 20, 50, 100, 200」が描画されるようになっています。もちろん、不要な線は期間を「1」にするか、スタイルの設定からチェックを外すだけで簡単に非表示にできます。 TradingViewへの追加方法 以下のPine Scriptコードをコピーし、TradingViewの画面下部にある「Pineエディタ」に貼り付けて「チャートに追加」をクリックしてください。 //@version=6 indicator("10 MA/DMA Flexible Master v2", overlay=true) // ========================================== // --- 移動平均計算関数 --- // ========================================== get_ma(type, source, length) => switch type "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) "HMA" => ta.hma(source, length) "WMA" => ta.wma(source, length) => na // なければna // ========================================== // --- パラメーター & 計算 & 描画 (10セット) --- // ========================================== // グループ名 grp_settings = "MA/DMA 設定" // --- 【ここが重要】MAの種類を配列ではなく、オプションに直接列挙する --- // 各input.stringの中で、options=["SMA", "EMA", "HMA", "WMA"] と記述します。 // --- MA 1 (ディナポリDMA3x3風) --- len1 = input.int(3, "MA 1 期間", minval=1, group=grp_settings) type1 = input.string("SMA", "MA 1 種類", options=["SMA", "EMA", "HMA", "WMA"], group=grp_settings) dis1 = input.int(3, "MA 1 ずらす(Displace)", minval=0, group=grp_settings) source1 = close[dis1] // Displaceの数だけ過去の価格を参照する ma1 = get_ma(type1, source1, len1) plot(ma1, "MA 1", color=color.new(color.aqua, 20), linewidth=2) // --- MA 2 (ディナポリDMA7x5風) --- len2 = input.int(7, "MA 2 期間", minval=1, group=grp_settings) type2 = input.string("SMA", "MA 2 種類", options=["SMA", "EMA", "HMA", "WMA"], group=grp_settings) dis2 = input.int(5, "MA 2 ずらす(Displace)", minval=0, group=grp_settings) source2 = close[dis2] ma2 = get_ma(type2, source2, len2) plot(ma2, "MA 2", color=color.new(color.orange, 20), linewidth=2) // --- MA 3 (ディナポリDMA25x5風) --- len3 = input.int(25, "MA 3 期間", minval=1, group=grp_settings) type3 = input.string("SMA", "MA 3 種類", options=["SMA", "EMA", "HMA", "WMA"], group=grp_settings) dis3 = input.int(5, "MA 3 ずらす(Displace)", minval=0, group=grp_settings) source3 = close[dis3] ma3 = get_ma(type3, source3, len3) plot(ma3, "MA 3", color=color.new(color.red, 20), linewidth=2) // --- MA 4 (通常のEMA10風) --- len4 = input.int(10, "MA 4 期間", minval=1, group=grp_settings) type4 = input.string("EMA", "MA 4 種類", options=["SMA", "EMA", "HMA", "WMA"], group=grp_settings) dis4 = input.int(0, "MA 4 ずらす(Displace)", minval=0, group=grp_settings) source4 = close[dis4] ma4 = get_ma(type4, source4, len4) plot(ma4, "MA 4", color=color.new(color.white, 30), linewidth=1, style=plot.style_line) // --- MA 5 (通常のEMA20風) --- len5 = input.int(20, "MA 5 期間", minval=1, group=grp_settings) type5 = input.string("EMA", "MA 5 種類", options=["SMA", "EMA", "HMA", "WMA"], group=grp_settings) dis5 = input.int(0, "MA 5 ずらす(Displace)", minval=0, group=grp_settings) source5 = close[dis5] ma5 = get_ma(type5, source5, len5) plot(ma5, "MA 5", color=color.new(color.green, 30), linewidth=1, style=plot.style_line) // --- MA 6 (通常のEMA50風) --- len6 = input.int(50, "MA 6 期間", minval=1, group=grp_settings) type6 = input.string("EMA", "MA 6 種類", options=["SMA", "EMA", "HMA", "WMA"], group=grp_settings) dis6 = input.int(0, "MA 6 ずらす(Displace)", minval=0, group=grp_settings) source6 = close[dis6] ma6 = get_ma(type6, source6, len6) plot(ma6, "MA 6", color=color.new(color.yellow, 30), linewidth=1, style=plot.style_line) // --- MA 7 (通常のEMA100風) --- len7 = input.int(100, "MA 7 期間", minval=1, group=grp_settings) type7 = input.string("EMA", "MA 7 種類", options=["SMA", "EMA", "HMA", "WMA"], group=grp_settings) dis7 = input.int(0, "MA 7 ずらす(Displace)", minval=0, group=grp_settings) source7 = close[dis7] ma7 = get_ma(type7, source7, len7) plot(ma7, "MA 7", color=color.new(color.purple, 30), linewidth=1, style=plot.style_line) // --- MA 8 (通常のEMA200風) --- len8 = input.int(200, "MA 8 期間", minval=1, group=grp_settings) type8 = input.string("EMA", "MA 8 種類", options=["SMA", "EMA", "HMA", "WMA"], group=grp_settings) dis8 = input.int(0, "MA 8 ずらす(Displace)", minval=0, group=grp_settings) source8 = close[dis8] ma8 = get_ma(type8, source8, len8) plot(ma8, "MA 8", color=color.new(color.blue, 30), linewidth=1, style=plot.style_line) // --- MA 9 (予備: 未使用) --- len9 = input.int(1, "MA 9 期間 (1=非表示)", minval=1, group=grp_settings) type9 = input.string("SMA", "MA 9 種類", options=["SMA", "EMA", "HMA", "WMA"], group=grp_settings) dis9 = input.int(0, "MA 9 ずらす(Displace)", minval=0, group=grp_settings) source9 = close[dis9] ma9 = get_ma(type9, source9, len9) // 期間が1の時は描画しないガード plot(len9 > 1 ? ma9 : na, "MA 9", color=color.new(color.gray, 50), linewidth=1) // --- MA 10 (予備: 未使用) --- len10 = input.int(1, "MA 10 期間 (1=非表示)", minval=1, group=grp_settings) type10 = input.string("SMA", "MA 10 種類", options=["SMA", "EMA", "HMA", "WMA"], group=grp_settings) dis10 = input.int(0, "MA 10 ずらす(Displace)", minval=0, group=grp_settings) source10 = close[dis10] ma10 = get_ma(type10, source10, len10) plot(len10 > 1 ? ma10 : na, "MA 10", color=color.new(color.silver, 50), linewidth=1) ▼ このオリジナル・インジケーターはTradingView専用です ▼ ...

2026年7月4日 · 3 min · AutoTrader

JFX Currency Index Master v6.6 Final

「今、一番買われている通貨はどれか?一番売られている通貨はどれか?」 裁量トレードにおいて、個別通貨ペア(USD/JPYなど)のチャートだけを見てエントリーするのは、森を見ずに木を見ているのと同じです。真のエッジ(優位性)は、市場全体の資金フロー(通貨の強弱)を把握した先に存在します。 この JFX Currency Index Master v6.6 Final は、私が日々のトレードで実際に使用している、主要8通貨(USD, JPY, EUR, GBP, AUD, NZD, CHF, CAD)の強弱を可視化する完全オリジナルのインジケーターです。 インジケーターの特徴 JFXの高品質データに特化 JFXが配信する全28通貨ペアのデータをフルに活用し、幾何平均を用いて各通貨の「真のインデックス(相対強度)」を正確に算出します。 プロ仕様のリセットロジック(Rolling & 毎日朝6時) 通貨強弱は「いつを起点(ゼロ)とするか」が命です。このスクリプトは、単なる固定時間枠ではなく「現在時刻(timenow)から指定時間(4時間〜3ヶ月)を遡った時点」を動的に起点とするローリング機能や、東京市場の開始前(朝6時)を起点とするリセット機能を搭載しています。 洗練されたUI リアルタイムで8通貨のラインとラベルが描画され、一目で「最強通貨」と「最弱通貨」のペアを見つけ出すことができます。 TradingViewへの追加方法 以下のPine Scriptコードをコピーし、TradingViewの画面下部にある「Pineエディタ」に貼り付けて「チャートに追加」をクリックしてください。 // This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © momonge //@version=6 indicator("JFX Currency Index Master v6.6 Final", overlay=false, precision=2) // --- パラメーター --- mode = input.string("24時間(rolling)", "リセット基準", options=["毎日朝6時", "4時間(rolling)", "8時間(rolling)", "24時間(rolling)", "1週間(rolling)", "1ヶ月(rolling)", "3ヶ月(rolling)"]) // --- データ取得関数 --- get_val(t) => request.security("JFX:" + t, timeframe.period, close) // --- 各通貨指数の算出(JFXの全28ペアをフル活用) --- u_id = math.pow((get_val("USDJPY") * get_val("USDCHF") * get_val("USDCAD")) / (get_val("EURUSD") * get_val("GBPUSD") * get_val("AUDUSD") * get_val("NZDUSD")), 1/7) j_id = 1 / math.pow(get_val("USDJPY") * get_val("EURJPY") * get_val("GBPJPY") * get_val("AUDJPY") * get_val("NZDJPY") * get_val("CHFJPY") * get_val("CADJPY"), 1/7) e_id = math.pow(get_val("EURUSD") * get_val("EURJPY") * get_val("EURGBP") * get_val("EURAUD") * get_val("EURNZD") * get_val("EURCHF") * get_val("EURCAD"), 1/7) g_id = math.pow(get_val("GBPUSD") * get_val("GBPJPY") * get_val("GBPAUD") * get_val("GBPNZD") * get_val("GBPCHF") * get_val("GBPCAD") / get_val("EURGBP"), 1/7) a_id = math.pow(get_val("AUDUSD") * get_val("AUDJPY") * get_val("AUDNZD") * get_val("AUDCHF") * get_val("AUDCAD") / (get_val("EURAUD") * get_val("GBPAUD")), 1/7) n_id = math.pow(get_val("NZDUSD") * get_val("NZDJPY") * get_val("NZDCHF") * get_val("NZDCAD") / (get_val("EURNZD") * get_val("GBPNZD") * get_val("AUDNZD")), 1/7) s_id = math.pow(get_val("CHFJPY") / (get_val("USDCHF") * get_val("EURCHF") * get_val("GBPCHF") * get_val("AUDCHF") * get_val("NZDCHF") * get_val("CADCHF")), 1/7) c_id = math.pow((get_val("CADJPY") * get_val("CADCHF")) / (get_val("USDCAD") * get_val("EURCAD") * get_val("GBPCAD") * get_val("AUDCAD") * get_val("NZDCAD")), 1/7) // --- 起点価格の保持変数 --- var float u_b = na, var float j_b = na, var float e_b = na, var float g_b = na var float a_b = na, var float n_b = na, var float s_b = na, var float c_b = na // ========================================================= // 真のゼロリセット判定ロジック(timenowを活用したプロ仕様) // ========================================================= if mode == "毎日朝6時" // 朝6時モードは、毎日6時に何度でも0リセットを繰り返す t_tokyo = time(timeframe.period, "0600-0605", "Asia/Tokyo") is_6am = not na(t_tokyo) and na(t_tokyo[1]) if is_6am or barstate.isfirst u_b := u_id, j_b := j_id, e_b := e_id, g_b := g_id a_b := a_id, n_b := n_id, s_b := s_id, c_b := c_id else // ローリングモード:「現在のリアルタイム時刻(timenow)」から指定時間を逆算 float lookback_ms = switch mode "4時間(rolling)" => 4 * 60 * 60 * 1000 "8時間(rolling)" => 8 * 60 * 60 * 1000 "24時間(rolling)" => 24 * 60 * 60 * 1000 "1週間(rolling)" => 7 * 24 * 60 * 60 * 1000 "1ヶ月(rolling)" => 30 * 24 * 60 * 60 * 1000 "3ヶ月(rolling)" => 90 * 24 * 60 * 60 * 1000 => 0 // 今の時間から遡った「絶対的な起点時刻」 target_time = timenow - lookback_ms // 過去のチャートの中から、起点時刻を「初めて」迎えたローソク足を検知して一度だけ0にロックする if time >= target_time and na(u_b) u_b := u_id, j_b := j_id, e_b := e_id, g_b := g_id a_b := a_id, n_b := n_id, s_b := s_id, c_b := c_id // --- 強弱計算 (変化率 %) --- // 基準値(base_val)がまだ無い(起点より前の時間)場合は na を返し、チャートに描画させない calc_pct(val, base_val) => na(base_val) ? na : (val - base_val) / base_val * 100 U = calc_pct(u_id, u_b), J = calc_pct(j_id, j_b), E = calc_pct(e_id, e_b), G = calc_pct(g_id, g_b) A = calc_pct(a_id, a_b), N = calc_pct(n_id, n_b), S = calc_pct(s_id, s_b), C = calc_pct(c_id, c_b) // --- 描画 --- plot(U, title="USD", color=color.white, linewidth=2) plot(J, title="JPY", color=color.red, linewidth=2) plot(E, title="EUR", color=color.blue, linewidth=2) plot(G, title="GBP", color=color.orange, linewidth=2) plot(A, title="AUD", color=color.green, linewidth=2) plot(N, title="NZD", color=color.lime, linewidth=2) plot(S, title="CHF", color=color.purple, linewidth=2) plot(C, title="CAD", color=color.maroon, linewidth=2) hline(0, "基準線", color=color.new(color.gray, 50), linestyle=hline.style_dotted, linewidth=2) // --- ラベル描画 --- if barstate.islast var label lb_u = label.new(na, na, "USD", color=#ffffff00, textcolor=color.white, style=label.style_label_left, size=size.small) var label lb_j = label.new(na, na, "JPY", color=#ffffff00, textcolor=color.red, style=label.style_label_left, size=size.small) var label lb_e = label.new(na, na, "EUR", color=#ffffff00, textcolor=color.blue, style=label.style_label_left, size=size.small) var label lb_g = label.new(na, na, "GBP", color=#ffffff00, textcolor=color.orange, style=label.style_label_left, size=size.small) var label lb_a = label.new(na, na, "AUD", color=#ffffff00, textcolor=color.green, style=label.style_label_left, size=size.small) var label lb_n = label.new(na, na, "NZD", color=#ffffff00, textcolor=color.lime, style=label.style_label_left, size=size.small) var label lb_s = label.new(na, na, "CHF", color=#ffffff00, textcolor=color.purple, style=label.style_label_left, size=size.small) var label lb_c = label.new(na, na, "CAD", color=#ffffff00, textcolor=color.maroon, style=label.style_label_left, size=size.small) label.set_xy(lb_u, bar_index, U), label.set_xy(lb_j, bar_index, J), label.set_xy(lb_e, bar_index, E), label.set_xy(lb_g, bar_index, G) label.set_xy(lb_a, bar_index, A), label.set_xy(lb_n, bar_index, N), label.set_xy(lb_s, bar_index, S), label.set_xy(lb_c, bar_index, C) ▼ このオリジナル・インジケーターはTradingView専用です ▼ ...

2026年7月4日 · 4 min · AutoTrader