# 1-8. NK-Fixed DMI
「足が閉じる何秒前にリアルタイム描画を開始するか、0秒から5分の間で調節できる」機能が付いたDMIです。その他あった方が良い機能も付けています。
## [DMI]
DMIは、当日の高値・安値が前日の高値・安値からどちらの方向に、どれだけ更新されたかを計算し、相場の「上昇推力」「下降推力」そして「トレンドの総合的な強さ」を3つのラインで可視化するシステムです。「+DIと-DIのクロス」でトレンドの発生方向を定義し、「ADXの上昇」をもってそのトレンドが本物(十分な推力を持っている)であることを証明します。
![[▢TradingViewコード-08. NK-Fixed DMI.webp]]
出典: TradingView
---
> [!example] NOTICE(注意)
> - 学習および情報提供のみを目的としており、投資助言ではありません。
> - ツールを使用したことによる経済的損失について、一切の責任を負いません。
> - Pine Script v6 で動作確認しています。将来のTradingView側の仕様変更に対するアップデート保証や、個別の導入サポート・改修依頼は受け付けません(現状有姿での提供)。
> - [MIT License](https://opensource.org/licenses/MIT) に則っています。
> [!quote]- 導入の流れ
>
> - 「Pineを開く」→「スクリプトのメニューを開き、新規作成を選択」→「インジケーターを選択」→「全選択で既存のコードを削除してからペーストする」の順序で行ってください。
> ※この手順で行わないと正しく認識されないことがあります。
> - 好みの配色に設定後、パラメータータブの「デフォルトを保存」を押してください。
---
> **Copy area**
> [!quote]- コードを展開する
> ````pinescript
> // SPDX-FileCopyrightText: 2026 NK-report https://www.nk-report.com/
> // SPDX-License-Identifier: MIT
> //
> // Disclaimer: This script is for educational purposes only and does not constitute investment advice.
>
> //@version=6
> indicator("NK-Fixed DMI", shorttitle="NK-Fixed DMI", overlay=false)
>
> // ==============================================================================
> // 【01】 免責・ライセンス
> // ==============================================================================
> //
> // 独自視点の「解説/考察」記事を公開している個人サイトです。サイト内のTradingViewコードは無料でコピーできます。: https://www.nk-report.com/
> //
> // 免責事項: 本スクリプトは学習および情報提供のみを目的としており、投資助言ではありません。
> //
> // 1. 本コードは2026年時点の Pine Script v6 で動作確認を行っています。
> // 将来の仕様変更に伴う不具合等について、個別のサポートや改修は行いません。
> // 2. 本スクリプトは一般的な計算ロジックに基づき、LLMを用いて独自に作成したものです。
> // MITライセンスに則っています。
> // ------------------------------------------------------------------------------
> // MIT License
> //
> // Copyright 2026 NK-report https://www.nk-report.com/
> //
> // Permission is hereby granted, free of charge, to any person obtaining a copy of
> // this software and associated documentation files (the "Software"), to deal in
> // the Software without restriction, including without limitation the rights to
> // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
> // of the Software, and to permit persons to whom the Software is furnished to do
> // so, subject to the following conditions:
> //
> // The above copyright notice and this permission notice shall be included in all
> // copies or substantial portions of the Software.
> //
> // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> // SOFTWARE.
>
> // ==============================================================================
> // 【02】 UI設定と言語
> // ==============================================================================
> // 1. 言語辞書の定義(テキストの定数化)
>
> const string GRP_FIXED = "▼ 描画制御 (Fixed Settings)"
> const string LBL_SEC = "リアルタイム描画開始 (足が閉じるX秒前)"
> const string TT_SEC = "0秒から300秒(5分)の間で調節。指定時間(例:10秒前)になるまで、現在の足への描画を非表示にします。\n0秒と入力した場合は非表示機能を無効化し、常にリアルタイムで描画します。"
>
> const string GRP_DMI = "▼ DMI設定 (DMI Settings)"
> const string LBL_LEN = "DI 期間 (DI Length)"
> const string LBL_ADX_LEN = "ADX 平滑化期間 (ADX Smoothing)"
>
> // 2. UI(ユーザー入力画面)の構築 & 3. トップダウン処理への適合
>
> i_sec = input.int(0, title=LBL_SEC, minval=0, maxval=300, group=GRP_FIXED, tooltip=TT_SEC)
>
> i_len = input.int(14, title=LBL_LEN, minval=1, group=GRP_DMI, inline="DMI1")
> i_adx_len = input.int(14, title=LBL_ADX_LEN, minval=1, group=GRP_DMI, inline="DMI1")
>
>
> // ==============================================================================
> // 【03】 全コード共通仕様(タイムゾーン・時間インフラ処理)
> // ==============================================================================
> // 1. 基本時間単位のシステム定義(定数化)
> const int MS_PER_SEC = 1000
>
> // ==============================================================================
> // 【04】 各カテゴリ共通仕様 (NK-Fixed Core Logic)
> // ==============================================================================
> // 1. カテゴリ固有のインフラ構築(コア機能の定義)
> bool is_draw_ready = true
>
> // リアルタイム足であり、かつユーザーが0秒より大きい数値を設定している場合のみ処理
> if barstate.isrealtime and i_sec > 0
> if not na(time_close)
> int time_left_ms = time_close - timenow
> int threshold_ms = i_sec * MS_PER_SEC
>
> if time_left_ms > threshold_ms
> is_draw_ready := false
>
>
> // ==============================================================================
> // 【05】 このコード固有の計算仕様 (Specific Indicator Logic)
> // ==============================================================================
> // 1. インジケーター固有の純粋な数学的処理
> // ※標準関数 ta.dmi() を使わず、公式「Directional Movement Index」と完全一致する生の計算式を採用
> float up = ta.change(high)
> float down = -ta.change(low)
> float plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
> float minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
> float trur = ta.rma(ta.tr, i_len)
>
> float calc_pdi = fixnan(100 * ta.rma(plusDM, i_len) / trur)
> float calc_mdi = fixnan(100 * ta.rma(minusDM, i_len) / trur)
> float sum_di = calc_pdi + calc_mdi
> float calc_adx = 100 * ta.rma(math.abs(calc_pdi - calc_mdi) / (sum_di == 0 ? 1 : sum_di), i_adx_len)
>
> // 2. ロジックの完全な隔離と差し替えの容易性
>
> // 3. 視覚的装飾の排除とデータの引き渡し
> float final_pdi = is_draw_ready ? calc_pdi : na
> float final_mdi = is_draw_ready ? calc_mdi : na
> float final_adx = is_draw_ready ? calc_adx : na
>
>
> // ==============================================================================
> // 【06】 描画と出力 (Rendering & Outputs)
> // ==============================================================================
> // 1. チャートへの視覚的出力(プロットと装飾)
> plot(final_pdi, title="+DI Line", color=#26A69A, linewidth=2)
> plot(final_mdi, title="-DI Line", color=#EF5350, linewidth=2)
> plot(final_adx, title="ADX Line", color=#F6C309, linewidth=2)
>
> // 水平線の描画処理(スタイルタブから表示/非表示や色を変更可能)
> hline(20, title="Level 1 (20)", color=color.new(color.gray, 50), linestyle=hline.style_solid)
> hline(40, title="Level 2 (40)", color=color.new(color.gray, 50), linestyle=hline.style_solid)
>
> // 2. ロジックとデザインの完全分離
>
> // 3. アラート(通知)条件の統合
> // ※投資助言を回避するため、方向性を指示する言葉(Buy/Sell等)は使わず、純粋な事実・状態のみを通知します
> bool cross_over_di = ta.crossover(calc_pdi, calc_mdi) and is_draw_ready
> bool cross_under_di = ta.crossunder(calc_pdi, calc_mdi) and is_draw_ready
> bool adx_break_hl1 = ta.crossover(calc_adx, 20) and is_draw_ready
>
> alertcondition(cross_over_di, title="+DI Cross Over -DI", message="+DI line crossed over -DI line")
> alertcondition(cross_under_di, title="+DI Cross Under -DI", message="+DI line crossed under -DI line")
> alertcondition(adx_break_hl1, title="ADX Break Level 1", message="ADX line crossed over Level 1 (20)")
>
>
> ````
---
> **Navigation**
**ページ移動:**
* [[1-7. NK-Fixed Stochastics|前の記事へ]]
* [[1-9. NK-Fixed RCI|次の記事へ]]
* [[09. ▢-TradingViewコード|▢-TradingViewへ戻る]]
* [[01. トップページ|トップページへ戻る]]