# 2-3. option2_SVWAP & Zone
"NK-Box"にオプションとして使用するインジケーターです。"NK-Box"と全く同じ範囲にラインを描画することができます。
"SVWAP"は"Static VWAP"を略したもので、筆者独自の呼称です。前期間のVWAPの最終確定値を、今期間にラインとして描画したものです。(静的=Static)
短期と長期2つのSVWAPで背景を作ることができます。
※出来高が取得できる銘柄にのみ適用できます。
![[▢TradingViewコード-14. option2_SVWAP & Zone.webp]]
出典: TradingView
---
> [!example] NOTICE(注意)
> - 学習および情報提供のみを目的としており、投資助言ではありません。
> - ツールを使用したことによる経済的損失について、一切の責任を負いません。
> - Pine Script v6 で動作確認しています。将来のTradingView側の仕様変更に対するアップデート保証や、個別の導入サポート・改修依頼は受け付けません(現状有姿での提供)。
> - [MIT License](https://opensource.org/licenses/MIT) に則っています。
> [!quote]- 導入の流れ
>
> - 「Pineを開く」→「スクリプトのメニューを開き、新規作成を選択」→「インジケーターを選択」→「全選択で既存のコードを削除してからペーストする」の順序で行ってください。
> ※この手順で行わないと正しく認識されないことがあります。
> - 好みの配色に設定後、パラメータータブの「デフォルトを保存」を押してください。
---
> **Copy area**
- Hist
> [!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
> // ※計算負荷がゼロに等しいため過去表示の制限を撤廃。TVのガベージコレクションに任せるためmax_lines_count=500を設定
> indicator("NK-box_option2_SVWAP & Zone (History)", shorttitle="NK-opt2 SVWAP (Hist)", overlay=true, max_lines_count=500)
>
> // ==============================================================================
> // 【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設定と言語
> // ==============================================================================
> const string GRP_GENERAL = "▼ 期間設定 (※1本で利用する場合は短期SVWAPを利用してください。)"
> const string GRP_OFFSET = "▼ 描画位置の微調整 (オフセット)"
> const string GRP_LINES = "▼ SVWAP ライン & ゾーン設定"
>
> const string LBL_BASE_TF = "基準期間1(短期SVWAP)"
> const string TT_BASE_TF = "※NK-box本体と同じ数値を指定してください。\nboxの幅と短期のSVWAPが自動で同期されます。"
>
> const string LBL_MACRO_TF = "基準期間2(長期SVWAP)"
> const string TT_MACRO_TF = "※基準期間1より長い期間を指定してください。\n※短く設定された場合は、システムが自動で基準期間1に補正します。"
>
> const string OPT_TF_D = "1日"
> const string OPT_TF_W = "1週"
> const string OPT_TF_1M = "1ヶ月"
> const string OPT_TF_3M = "3ヶ月"
> const string OPT_TF_12M = "12ヶ月"
>
> const string LBL_OFS_L = "左端のズレ調整 (バー数)"
> const string LBL_OFS_R = "右端のズレ調整 (バー数)"
> const string TT_OFS = "マイナスで左へ、プラスで右へ移動します。\n※NK-box本体と同じ数値を指定してください。"
>
> const string OPT_STY_S = "実線"
> const string OPT_STY_D = "破線"
> const string OPT_STY_DT = "点線"
>
> // 期間設定 (デフォルト: 短期3ヶ月 / 長期12ヶ月)
> i_base_tf_str = input.string(OPT_TF_3M, title=LBL_BASE_TF, options=[OPT_TF_D, OPT_TF_W, OPT_TF_1M, OPT_TF_3M, OPT_TF_12M], group=GRP_GENERAL, tooltip=TT_BASE_TF)
> i_macro_tf_str = input.string(OPT_TF_12M, title=LBL_MACRO_TF, options=[OPT_TF_D, OPT_TF_W, OPT_TF_1M, OPT_TF_3M, OPT_TF_12M], group=GRP_GENERAL, tooltip=TT_MACRO_TF)
>
> // オフセット設定
> i_offset_left = input.int(-1, title=LBL_OFS_L, group=GRP_OFFSET, tooltip=TT_OFS)
> i_offset_right = input.int(0, title=LBL_OFS_R, group=GRP_OFFSET, tooltip=TT_OFS)
>
> // 短期 SVWAP
> i_show_b = input.bool(true, title="短期 SVWAP 表示", inline="b", group=GRP_LINES)
> i_col_b = input.color(color.green, title="", inline="b", group=GRP_LINES)
> i_wid_b = input.int(2, title="", minval=1, maxval=5, inline="b", group=GRP_LINES)
> i_sty_b = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], inline="b", group=GRP_LINES)
>
> // 長期 SVWAP
> i_show_a = input.bool(true, title="長期 SVWAP 表示", inline="a", group=GRP_LINES)
> i_col_a = input.color(color.blue, title="", inline="a", group=GRP_LINES)
> i_wid_a = input.int(2, title="", minval=1, maxval=5, inline="a", group=GRP_LINES)
> i_sty_a = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], inline="a", group=GRP_LINES)
>
> // ゾーン設定 (紫の5%不透明度 = transp 95)
> i_show_zone = input.bool(true, title="ゾーン表示 (短期と長期の間)", group=GRP_LINES, inline="zone")
> i_col_zone = input.color(color.new(color.purple, 95), title="", group=GRP_LINES, inline="zone")
>
>
> // ==============================================================================
> // 【03】 全コード共通仕様(時間・安全装置処理)
> // ==============================================================================
> // TF文字列を内部インデックスに変換する関数 (安全装置の比較用)
> f_tf_idx(tf_str) =>
> tf_str == OPT_TF_D ? 1 : tf_str == OPT_TF_W ? 2 : tf_str == OPT_TF_1M ? 3 : tf_str == OPT_TF_3M ? 4 : tf_str == OPT_TF_12M ? 5 : 0
>
> // ユーザーが長期を短期より短く設定した場合、強制的に短期と同じにする安全装置
> int idx_base = f_tf_idx(i_base_tf_str)
> int idx_macro = f_tf_idx(i_macro_tf_str)
> string safe_macro_str = idx_macro < idx_base ? i_base_tf_str : i_macro_tf_str
>
> // Pine内部識別子への変換
> string req_base = switch i_base_tf_str
> OPT_TF_D => "1D"
> OPT_TF_W => "1W"
> OPT_TF_1M => "1M"
> OPT_TF_3M => "3M"
> OPT_TF_12M => "12M"
>
> string req_macro = switch safe_macro_str
> OPT_TF_D => "1D"
> OPT_TF_W => "1W"
> OPT_TF_1M => "1M"
> OPT_TF_3M => "3M"
> OPT_TF_12M => "12M"
>
> bool is_new_base = timeframe.change(req_base) or barstate.isfirst
> bool is_new_macro = timeframe.change(req_macro) or barstate.isfirst
>
> f_get_style(sty_str) =>
> sty_str == OPT_STY_S ? line.style_solid : sty_str == OPT_STY_D ? line.style_dashed : line.style_dotted
>
>
> // ==============================================================================
> // 【05】 このコード固有の計算仕様 (Specific Indicator Logic)
> // ==============================================================================
> // 短期SVWAP [B] 系統
> var float cum_pv_b = 0.0
> var float cum_v_b = 0.0
> var float prev_calc_vwap_b = na
>
> // 長期SVWAP [A] 系統
> var float cum_pv_a = 0.0
> var float cum_v_a = 0.0
> var float prev_calc_vwap_a = na
>
> // 現在の投影期間(箱)に描画するための保持変数
> var float proj_vwap_b = na
> var float proj_vwap_a = na
> var int start_bar = na
>
> bool do_draw = false
> int draw_start = na
> int draw_end = na
> float draw_b = na
> float draw_a = na
>
> // ① 裏側の計算:期間が切り替わったら、過去の累積からVWAPを確定させリセットする
> if is_new_macro
> prev_calc_vwap_a := cum_v_a > 0 ? cum_pv_a / cum_v_a : na
> cum_pv_a := 0.0
> cum_v_a := 0.0
>
> if is_new_base
> prev_calc_vwap_b := cum_v_b > 0 ? cum_pv_b / cum_v_b : na
> cum_pv_b := 0.0
> cum_v_b := 0.0
>
> // ② 表側の投影:ベース期間(箱の幅)が切り替わるタイミングで、AとB両方の座標をセット
> if not na(start_bar)
> do_draw := true
> draw_start := math.max(0, start_bar + i_offset_left)
> draw_end := math.max(0, bar_index[1] + i_offset_right)
> draw_b := proj_vwap_b
> draw_a := proj_vwap_a
>
> start_bar := bar_index
> proj_vwap_b := prev_calc_vwap_b
> proj_vwap_a := prev_calc_vwap_a
>
> // ③ 毎ティックの出来高加重累積 (超軽量ストック)
> float typ = hlc3
> float vol = volume
> if not na(typ) and not na(vol)
> float pv = typ * vol
> cum_pv_b += pv
> cum_v_b += vol
> cum_pv_a += pv
> cum_v_a += vol
>
> // ==============================================================================
> // 【06】 描画と出力 (Rendering & Outputs)
> // ==============================================================================
> if do_draw
> // 配列管理を完全撤廃し、TV標準のガベージコレクションに丸投げしてスクロールズレを防止
> bool req_line_b = i_show_b or i_show_zone
> bool req_line_a = i_show_a or i_show_zone
>
> line l_b = req_line_b ? line.new(draw_start, draw_b, draw_end, draw_b, color=i_show_b ? i_col_b : na, width=i_wid_b, style=f_get_style(i_sty_b)) : na
> line l_a = req_line_a ? line.new(draw_start, draw_a, draw_end, draw_a, color=i_show_a ? i_col_a : na, width=i_wid_a, style=f_get_style(i_sty_a)) : na
>
> // ゾーン塗りつぶし
> if i_show_zone and not na(l_b) and not na(l_a)
> linefill.new(l_b, l_a, i_col_zone)
>
> // データウィンドウ出力
> plot(proj_vwap_b, title="短期 SVWAP", color=i_col_b, display=display.data_window, editable=false)
> plot(proj_vwap_a, title="長期 SVWAP", color=i_col_a, display=display.data_window, editable=false)
> ````
- Current
> [!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-box_option2_SVWAP & Zone (Current)", shorttitle="NK-opt2 SVWAP (Curr)", overlay=true)
>
> // ==============================================================================
> // 【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設定と言語
> // ==============================================================================
> const string GRP_GENERAL = "▼ 期間設定 (※1本で利用する場合は短期SVWAPを利用してください。)"
> const string GRP_OFFSET = "▼ 描画位置の微調整 (オフセット)"
> const string GRP_LINES = "▼ SVWAP ライン & ゾーン設定"
>
> const string LBL_BASE_TF = "基準期間1(短期SVWAP)"
> const string TT_BASE_TF = "※NK-box本体と同じ数値を指定してください。\nboxの幅と短期のSVWAPが自動で同期されます。"
>
> const string LBL_MACRO_TF = "基準期間2(長期SVWAP)"
> const string TT_MACRO_TF = "※基準期間1より長い期間を指定してください。\n※短く設定された場合は、システムが自動で基準期間1に補正します。"
>
> const string OPT_TF_D = "1日"
> const string OPT_TF_W = "1週"
> const string OPT_TF_1M = "1ヶ月"
> const string OPT_TF_3M = "3ヶ月"
> const string OPT_TF_12M = "12ヶ月"
>
> const string LBL_OFS_L = "左端のズレ調整 (バー数換算)"
> const string LBL_OFS_R = "右端のズレ調整 (バー数換算)"
> const string TT_OFS = "マイナスで左へ、プラスで右へ移動します。\n※Current版では時間計算(ミリ秒)による概算移動となります。\n※NK-box本体と同じ数値を指定してください。"
>
> const string OPT_STY_S = "実線"
> const string OPT_STY_D = "破線"
> const string OPT_STY_DT = "点線"
>
> // 期間設定 (デフォルト: 短期3ヶ月 / 長期12ヶ月)
> i_base_tf_str = input.string(OPT_TF_3M, title=LBL_BASE_TF, options=[OPT_TF_D, OPT_TF_W, OPT_TF_1M, OPT_TF_3M, OPT_TF_12M], group=GRP_GENERAL, tooltip=TT_BASE_TF)
> i_macro_tf_str = input.string(OPT_TF_12M, title=LBL_MACRO_TF, options=[OPT_TF_D, OPT_TF_W, OPT_TF_1M, OPT_TF_3M, OPT_TF_12M], group=GRP_GENERAL, tooltip=TT_MACRO_TF)
>
> i_offset_left = input.int(-1, title=LBL_OFS_L, group=GRP_OFFSET, tooltip=TT_OFS)
> i_offset_right = input.int(0, title=LBL_OFS_R, group=GRP_OFFSET, tooltip=TT_OFS)
>
> // 短期 SVWAP
> i_show_b = input.bool(true, title="短期 SVWAP 表示", inline="b", group=GRP_LINES)
> i_col_b = input.color(color.green, title="", inline="b", group=GRP_LINES)
> i_wid_b = input.int(2, title="", minval=1, maxval=5, inline="b", group=GRP_LINES)
> i_sty_b = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], inline="b", group=GRP_LINES)
>
> // 長期 SVWAP
> i_show_a = input.bool(true, title="長期 SVWAP 表示", inline="a", group=GRP_LINES)
> i_col_a = input.color(color.blue, title="", inline="a", group=GRP_LINES)
> i_wid_a = input.int(2, title="", minval=1, maxval=5, inline="a", group=GRP_LINES)
> i_sty_a = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], inline="a", group=GRP_LINES)
>
> // ゾーン設定 (紫の5%不透明度 = transp 95)
> i_show_zone = input.bool(true, title="ゾーン表示 (短期と長期の間)", group=GRP_LINES, inline="zone")
> i_col_zone = input.color(color.new(color.purple, 95), title="", group=GRP_LINES, inline="zone")
>
>
> // ==============================================================================
> // 【03】 全コード共通仕様(時間・安全装置処理)
> // ==============================================================================
> const int MS_PER_SEC = 1000
>
> // 強制ガードロジック: インデックス化して判定
> f_tf_idx(tf_str) =>
> tf_str == OPT_TF_D ? 1 : tf_str == OPT_TF_W ? 2 : tf_str == OPT_TF_1M ? 3 : tf_str == OPT_TF_3M ? 4 : tf_str == OPT_TF_12M ? 5 : 0
>
> // ユーザーが長期を短期より短く設定した場合、強制的に短期と同じにする安全装置
> int idx_base = f_tf_idx(i_base_tf_str)
> int idx_macro = f_tf_idx(i_macro_tf_str)
> string safe_macro_str = idx_macro < idx_base ? i_base_tf_str : i_macro_tf_str
>
> // Pine内部識別子への変換
> string req_base = switch i_base_tf_str
> OPT_TF_D => "1D"
> OPT_TF_W => "1W"
> OPT_TF_1M => "1M"
> OPT_TF_3M => "3M"
> OPT_TF_12M => "12M"
>
> string req_macro = switch safe_macro_str
> OPT_TF_D => "1D"
> OPT_TF_W => "1W"
> OPT_TF_1M => "1M"
> OPT_TF_3M => "3M"
> OPT_TF_12M => "12M"
>
> bool is_new_base = timeframe.change(req_base) or barstate.isfirst
> bool is_new_macro = timeframe.change(req_macro) or barstate.isfirst
>
> f_get_style(sty_str) =>
> sty_str == OPT_STY_S ? line.style_solid : sty_str == OPT_STY_D ? line.style_dashed : line.style_dotted
>
> // ------------------------------------------------------------------------------
> // オブジェクトの事前生成 (Current版専用インフラ)
> // ------------------------------------------------------------------------------
> var line l_b = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_b, style=f_get_style(i_sty_b), color=i_show_b ? i_col_b : na)
> var line l_a = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_a, style=f_get_style(i_sty_a), color=i_show_a ? i_col_a : na)
>
> if barstate.isfirst
> if i_show_zone
> linefill.new(l_b, l_a, i_col_zone)
>
> // ==============================================================================
> // 【05】 このコード固有の計算仕様 (Specific Indicator Logic)
> // ==============================================================================
> // 短期 SVWAP [B] 系統
> var float cum_pv_b = 0.0
> var float cum_v_b = 0.0
> var float prev_calc_vwap_b = na
>
> // 長期 SVWAP [A] 系統
> var float cum_pv_a = 0.0
> var float cum_v_a = 0.0
> var float prev_calc_vwap_a = na
>
> // 投影空間のX軸変数とY軸値
> var int start_t = na
> var int end_t = na
> var float proj_vwap_b = na
> var float proj_vwap_a = na
>
> bool do_draw = false
> int draw_start = na
> int draw_end = na
>
> // ① 裏側の計算:期間が確定した瞬間にSVWAPをロック
> if is_new_macro
> prev_calc_vwap_a := cum_v_a > 0 ? cum_pv_a / cum_v_a : na
> cum_pv_a := 0.0
> cum_v_a := 0.0
>
> if is_new_base
> prev_calc_vwap_b := cum_v_b > 0 ? cum_pv_b / cum_v_b : na
> cum_pv_b := 0.0
> cum_v_b := 0.0
>
> // ② 表側の投影:ベース期間(箱の幅)が切り替わるタイミングで未来時間をセット
> proj_vwap_b := prev_calc_vwap_b
> proj_vwap_a := prev_calc_vwap_a
>
> start_t := time
> int tc = time_close(req_base)
> end_t := not na(tc) ? tc : time + timeframe.in_seconds(req_base) * MS_PER_SEC
>
> // ③ 毎ティックの出来高加重累積
> float typ = hlc3
> float vol = volume
> if not na(typ) and not na(vol)
> float pv = typ * vol
> cum_pv_b += pv
> cum_v_b += vol
> cum_pv_a += pv
> cum_v_a += vol
>
> // 描画フラグの生成 (現在の時間軸空間へ投影)
> if (not na(proj_vwap_b) or not na(proj_vwap_a)) and not na(start_t) and not na(end_t)
> do_draw := true
> int bar_ms = timeframe.in_seconds(timeframe.period) * MS_PER_SEC
> draw_start := start_t + (i_offset_left * bar_ms)
> draw_end := end_t + (i_offset_right * bar_ms)
>
> // ==============================================================================
> // 【06】 描画と出力 (Rendering & Outputs)
> // ==============================================================================
> if do_draw
> bool req_line_b = i_show_b or i_show_zone
> bool req_line_a = i_show_a or i_show_zone
>
> if req_line_b
> line.set_xy1(l_b, draw_start, proj_vwap_b)
> line.set_xy2(l_b, draw_end, proj_vwap_b)
> else
> line.set_xy1(l_b, na, na)
> line.set_xy2(l_b, na, na)
>
> if req_line_a
> line.set_xy1(l_a, draw_start, proj_vwap_a)
> line.set_xy2(l_a, draw_end, proj_vwap_a)
> else
> line.set_xy1(l_a, na, na)
> line.set_xy2(l_a, na, na)
>
> // データウィンドウ出力
> plot(proj_vwap_b, title="短期 SVWAP", color=i_col_b, display=display.data_window, editable=false)
> plot(proj_vwap_a, title="長期 SVWAP", color=i_col_a, display=display.data_window, editable=false)
> ````
---
> **Navigation**
**ページ移動:**
* [[2-2. option1_Zone & Gap|前の記事へ]]
* [[2-4. option3_Fibo & Quarters|次の記事へ]]
* [[09. ▢-TradingViewコード|▢-TradingViewへ戻る]]
* [[01. トップページ|トップページへ戻る]]