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エディタ」に貼り付けて「チャートに追加」をクリックしてください。 [TOOL REQUIREMENT] 稼働必須環境 このオリジナル・インジケーターは、世界標準チャートツール「TradingView」専用です。まだアカウントをお持ちでない方は、先に無料登録を済ませてからチャートに追加してください。 » TradingViewの無料アカウントを作成する //@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)

2026年7月4日 · 2 min · AIでEA開発入門

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エディタ」に貼り付けて「チャートに追加」をクリックしてください。 [TOOL REQUIREMENT] 稼働必須環境 このオリジナル・インジケーターは、世界標準チャートツール「TradingView」専用です。まだアカウントをお持ちでない方は、先に無料登録を済ませてからチャートに追加してください。 » TradingViewの無料アカウントを作成する //@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)

2026年7月4日 · 3 min · AIでEA開発入門
【法令遵守・免責事項】 当サイトに掲載されているソースコードおよび記事コンテンツはプログラミングおよび相場構造の研究・情報シェアを目的としており、証拠金取引等の投資勧誘や金融商品の売買助言・コンサルティング業を担うものではございません。また公開された過去の検証実績は将来の確かな利益や効果を何ら確約・保証するものではありません。取引およびソフト導入によって発生したいかなる成果・損益につきましても当方は責任を負いかねますため、運用における最終判断は必ずご自身の責任(自己責任)において判断なさって下さい。