# 2-4. option3_Fibo & Quarters "NK-Box"にオプションとして使用するインジケーターです。"NK-Box"と全く同じ範囲にラインを描画することができます。 前期間の高値安値を基準としたフィボナッチ、4分割/8分割ラインを描画することができます。 フィボナッチについては前期間の高値安値の早い方を起点、遅い方を終点として計算しています。 ![[▢TradingViewコード-15. option3_Fibo & Quarters.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 > indicator("NK-box_option3_Fibo & Quarters (History)", shorttitle="NK-opt3 F&Q (Hist)", overlay=true, max_lines_count=500, max_labels_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 = "▼ 基本設定" > const string GRP_OFFSET = "▼ 描画位置の微調整 (オフセット)" > const string GRP_CALC = "▼ 計算ロジック設定" > const string GRP_FIBO_RET = "▼ Fibo: リトレースメント" > const string GRP_FIBO_EXT = "▼ Fibo: エクステンション" > const string GRP_GRID = "▼ Quarters: 等分割グリッド" > const string GRP_FIBO_CUS = "▼ カスタムレベル" > > const string LBL_TF = "基準期間" > 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 OPT_POS_L = "左" > const string OPT_POS_C = "中央" > const string OPT_POS_R = "右" > > const string OPT_STY_S = "実線" > const string OPT_STY_D = "破線" > const string OPT_STY_DT = "点線" > > const string OPT_GRID_NONE = "非表示" > const string OPT_GRID_Q4 = "4分割" > const string OPT_GRID_Q8 = "8分割" > > i_tf_str = input.string(OPT_TF_3M, title=LBL_TF, options=[OPT_TF_D, OPT_TF_W, OPT_TF_1M, OPT_TF_3M, OPT_TF_12M], group=GRP_GENERAL) > i_lbl_pos = input.string(OPT_POS_C, title="ラベル配置位置", options=[OPT_POS_L, OPT_POS_C, OPT_POS_R], group=GRP_GENERAL) > > i_offset_left = input.int(-1, title="左端のズレ調整 (バー数)", group=GRP_OFFSET) > i_offset_right = input.int(0, title="右端のズレ調整 (バー数)", group=GRP_OFFSET) > > i_use_log = input.bool(true, title="対数(Log)スケールで計算 (※フィボナッチのみ適用)", group=GRP_CALC, tooltip="チャートを対数スケール(右下のlog)で表示している場合、チェックを入れると手動ツールと一致します。") > i_rev = input.bool(false, title="階層を反転 (Reverse)", group=GRP_CALC, tooltip="手動ツールと0.382や0.618の上下が逆になっている場合に使用してください。") > > i_show_ret = input.bool(true, title="表示 (0.382, 0.5, 0.618, 0.786)", group=GRP_FIBO_RET, inline="ret") > i_col_ret = input.color(color.blue, title="", group=GRP_FIBO_RET, inline="ret") > i_wid_ret = input.int(2, title="", minval=1, maxval=5, group=GRP_FIBO_RET, inline="ret") > i_sty_ret = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], group=GRP_FIBO_RET, inline="ret") > > i_show_ext = input.bool(true, title="表示 (1.272, 1.618, 2.272, 2.618)", group=GRP_FIBO_EXT, inline="ext") > i_col_ext = input.color(color.lime, title="", group=GRP_FIBO_EXT, inline="ext") > i_wid_ext = input.int(2, title="", minval=1, maxval=5, group=GRP_FIBO_EXT, inline="ext") > i_sty_ext = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], group=GRP_FIBO_EXT, inline="ext") > > i_grid_mode = input.string(OPT_GRID_NONE, title="グリッド表示", options=[OPT_GRID_NONE, OPT_GRID_Q4, OPT_GRID_Q8], group=GRP_GRID) > i_col_q4 = input.color(color.aqua, title="4分割 カラー", group=GRP_GRID, inline="q4") > i_wid_q4 = input.int(2, title="", minval=1, maxval=5, group=GRP_GRID, inline="q4") > i_sty_q4 = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], group=GRP_GRID, inline="q4") > > i_col_q8 = input.color(color.purple, title="8分割 カラー", group=GRP_GRID, inline="q8") > i_wid_q8 = input.int(2, title="", minval=1, maxval=5, group=GRP_GRID, inline="q8") > i_sty_q8 = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], group=GRP_GRID, inline="q8") > > i_show_c1 = input.bool(false, title="カスタム 1 表示", group=GRP_FIBO_CUS, inline="c1") > i_val_c1 = input.float(0.0, title="", step=0.001, group=GRP_FIBO_CUS, inline="c1") > i_col_c1 = input.color(color.orange, title="", group=GRP_FIBO_CUS, inline="c1") > i_wid_c1 = input.int(2, title="", minval=1, maxval=5, group=GRP_FIBO_CUS, inline="c1") > i_sty_c1 = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], group=GRP_FIBO_CUS, inline="c1") > > i_show_c2 = input.bool(false, title="カスタム 2 表示", group=GRP_FIBO_CUS, inline="c2") > i_val_c2 = input.float(1.0, title="", step=0.001, group=GRP_FIBO_CUS, inline="c2") > i_col_c2 = input.color(color.orange, title="", group=GRP_FIBO_CUS, inline="c2") > i_wid_c2 = input.int(2, title="", minval=1, maxval=5, group=GRP_FIBO_CUS, inline="c2") > i_sty_c2 = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], group=GRP_FIBO_CUS, inline="c2") > > i_show_c3 = input.bool(false, title="カスタム 3 表示", group=GRP_FIBO_CUS, inline="c3") > i_val_c3 = input.float(2.414, title="", step=0.001, group=GRP_FIBO_CUS, inline="c3") > i_col_c3 = input.color(color.orange, title="", group=GRP_FIBO_CUS, inline="c3") > i_wid_c3 = input.int(2, title="", minval=1, maxval=5, group=GRP_FIBO_CUS, inline="c3") > i_sty_c3 = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], group=GRP_FIBO_CUS, inline="c3") > > > // ============================================================================== > // 【03】 全コード共通仕様(時間・インフラ処理) > // ============================================================================== > string req_tf = switch i_tf_str > OPT_TF_D => "1D" > OPT_TF_W => "1W" > OPT_TF_1M => "1M" > OPT_TF_3M => "3M" > OPT_TF_12M => "12M" > > bool is_new_period = timeframe.change(req_tf) 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) > // ============================================================================== > var float curr_o = na > var float curr_h = na > var float curr_l = na > var int curr_h_idx = na > var int curr_l_idx = na > > var float prev_o = na > var float prev_h = na > var float prev_l = na > var float prev_c = na > var int prev_h_idx = na > var int prev_l_idx = na > > var int start_bar = na > > bool do_draw = false > int draw_start = na > int draw_end = na > float draw_h = na > float draw_l = na > bool draw_is_bull = false > > if is_new_period > // スナップショット > if not na(prev_h) and not na(start_bar) and not na(prev_h_idx) and not na(prev_l_idx) > 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_h := prev_h > draw_l := prev_l > > draw_is_bull := prev_l_idx < prev_h_idx > if prev_h_idx == prev_l_idx > draw_is_bull := prev_c >= prev_o > > prev_o := curr_o > prev_h := curr_h > prev_l := curr_l > prev_c := close[1] > prev_h_idx := curr_h_idx > prev_l_idx := curr_l_idx > > curr_o := open > curr_h := high > curr_l := low > curr_h_idx := bar_index > curr_l_idx := bar_index > start_bar := bar_index > else > if na(curr_h) or high > curr_h > curr_h := high > curr_h_idx := bar_index > if na(curr_l) or low < curr_l > curr_l := low > curr_l_idx := bar_index > > // ------------------------------------------------------------------------------ > // 方向判定と高度な数学計算ロジック > // ------------------------------------------------------------------------------ > f_calc_fibo(u_in, _h, _l, _is_bull) => > bool bull = i_rev ? not _is_bull : _is_bull > float ratio = u_in <= 1.0 ? u_in : u_in - 1.0 > float val = na > > if i_use_log > float log_h = math.log(_h) > float log_l = math.log(_l) > float log_r = log_h - log_l > float log_v = na > if u_in <= 1.0 > log_v := bull ? log_h - (log_r * ratio) : log_l + (log_r * ratio) > else > log_v := bull ? log_h + (log_r * ratio) : log_l - (log_r * ratio) > val := math.exp(log_v) > else > float range_v = _h - _l > if u_in <= 1.0 > val := bull ? _h - (range_v * ratio) : _l + (range_v * ratio) > else > val := bull ? _h + (range_v * ratio) : _l - (range_v * ratio) > val > > f_calc_grid(u, _h, _l) => > _l + ((_h - _l) * u) > > f_is_bull(_h_idx, _l_idx, _o, _c) => > bool bull = _l_idx < _h_idx > if _h_idx == _l_idx > bull := _c >= _o > bull > > > // ------------------------------------------------------------------------------ > // 描画関数 (グローバルスコープで定義してSyntax Errorを完全回避) > // ------------------------------------------------------------------------------ > f_draw_fibo(_val, _txt, _col, _wid, _sty, _d_start, _d_end, _lbl_x) => > if not na(_val) > line.new(_d_start, _val, _d_end, _val, color=_col, width=_wid, style=f_get_style(_sty)) > label.new(_lbl_x, _val, text=_txt, color=color.new(color.white, 100), textcolor=_col, style=label.style_none, size=size.small) > > f_draw_grid(_val, _col, _wid, _sty, _d_start, _d_end) => > if not na(_val) > line.new(_d_start, _val, _d_end, _val, color=_col, width=_wid, style=f_get_style(_sty)) > > > // ============================================================================== > // 【06】 描画と出力 (Rendering & Outputs) > // ============================================================================== > if do_draw > int lbl_x = i_lbl_pos == OPT_POS_L ? draw_start : i_lbl_pos == OPT_POS_C ? int(math.round((draw_start + draw_end) / 2)) : draw_end > > if i_show_ret > f_draw_fibo(f_calc_fibo(0.382, draw_h, draw_l, draw_is_bull), "0.382", i_col_ret, i_wid_ret, i_sty_ret, draw_start, draw_end, lbl_x) > f_draw_fibo(f_calc_fibo(0.500, draw_h, draw_l, draw_is_bull), "0.500", i_col_ret, i_wid_ret, i_sty_ret, draw_start, draw_end, lbl_x) > f_draw_fibo(f_calc_fibo(0.618, draw_h, draw_l, draw_is_bull), "0.618", i_col_ret, i_wid_ret, i_sty_ret, draw_start, draw_end, lbl_x) > f_draw_fibo(f_calc_fibo(0.786, draw_h, draw_l, draw_is_bull), "0.786", i_col_ret, i_wid_ret, i_sty_ret, draw_start, draw_end, lbl_x) > > if i_show_ext > f_draw_fibo(f_calc_fibo(1.272, draw_h, draw_l, draw_is_bull), "1.272", i_col_ext, i_wid_ext, i_sty_ext, draw_start, draw_end, lbl_x) > f_draw_fibo(f_calc_fibo(1.618, draw_h, draw_l, draw_is_bull), "1.618", i_col_ext, i_wid_ext, i_sty_ext, draw_start, draw_end, lbl_x) > f_draw_fibo(f_calc_fibo(2.272, draw_h, draw_l, draw_is_bull), "2.272", i_col_ext, i_wid_ext, i_sty_ext, draw_start, draw_end, lbl_x) > f_draw_fibo(f_calc_fibo(2.618, draw_h, draw_l, draw_is_bull), "2.618", i_col_ext, i_wid_ext, i_sty_ext, draw_start, draw_end, lbl_x) > > bool is_q4 = i_grid_mode == OPT_GRID_Q4 > bool is_q8 = i_grid_mode == OPT_GRID_Q8 > > if is_q8 > f_draw_grid(f_calc_grid(0.125, draw_h, draw_l), i_col_q8, i_wid_q8, i_sty_q8, draw_start, draw_end) > if is_q4 or is_q8 > f_draw_grid(f_calc_grid(0.250, draw_h, draw_l), is_q8 ? i_col_q8 : i_col_q4, is_q8 ? i_wid_q8 : i_wid_q4, is_q8 ? i_sty_q8 : i_sty_q4, draw_start, draw_end) > if is_q8 > f_draw_grid(f_calc_grid(0.375, draw_h, draw_l), i_col_q8, i_wid_q8, i_sty_q8, draw_start, draw_end) > if is_q4 or is_q8 > f_draw_grid(f_calc_grid(0.500, draw_h, draw_l), is_q8 ? i_col_q8 : i_col_q4, is_q8 ? i_wid_q8 : i_wid_q4, is_q8 ? i_sty_q8 : i_sty_q4, draw_start, draw_end) > if is_q8 > f_draw_grid(f_calc_grid(0.625, draw_h, draw_l), i_col_q8, i_wid_q8, i_sty_q8, draw_start, draw_end) > if is_q4 or is_q8 > f_draw_grid(f_calc_grid(0.750, draw_h, draw_l), is_q8 ? i_col_q8 : i_col_q4, is_q8 ? i_wid_q8 : i_wid_q4, is_q8 ? i_sty_q8 : i_sty_q4, draw_start, draw_end) > if is_q8 > f_draw_grid(f_calc_grid(0.875, draw_h, draw_l), i_col_q8, i_wid_q8, i_sty_q8, draw_start, draw_end) > > if i_show_c1 > f_draw_fibo(f_calc_fibo(i_val_c1, draw_h, draw_l, draw_is_bull), str.tostring(i_val_c1), i_col_c1, i_wid_c1, i_sty_c1, draw_start, draw_end, lbl_x) > if i_show_c2 > f_draw_fibo(f_calc_fibo(i_val_c2, draw_h, draw_l, draw_is_bull), str.tostring(i_val_c2), i_col_c2, i_wid_c2, i_sty_c2, draw_start, draw_end, lbl_x) > if i_show_c3 > f_draw_fibo(f_calc_fibo(i_val_c3, draw_h, draw_l, draw_is_bull), str.tostring(i_val_c3), i_col_c3, i_wid_c3, i_sty_c3, draw_start, draw_end, lbl_x) > > // データウィンドウ出力 (客観的事実のみを静かに出力) > bool out_bull = f_is_bull(prev_h_idx, prev_l_idx, prev_o, prev_c) > bool is_data_q4 = i_grid_mode == OPT_GRID_Q4 > bool is_data_q8 = i_grid_mode == OPT_GRID_Q8 > > plot(f_calc_fibo(0.382, prev_h, prev_l, out_bull), title="Fibo 0.382", color=i_col_ret, display=display.data_window, editable=false) > plot(f_calc_fibo(0.500, prev_h, prev_l, out_bull), title="Fibo 0.500", color=i_col_ret, display=display.data_window, editable=false) > plot(f_calc_fibo(0.618, prev_h, prev_l, out_bull), title="Fibo 0.618", color=i_col_ret, display=display.data_window, editable=false) > plot(f_calc_fibo(0.786, prev_h, prev_l, out_bull), title="Fibo 0.786", color=i_col_ret, display=display.data_window, editable=false) > plot(f_calc_fibo(1.272, prev_h, prev_l, out_bull), title="Fibo 1.272", color=i_col_ext, display=display.data_window, editable=false) > plot(f_calc_fibo(1.618, prev_h, prev_l, out_bull), title="Fibo 1.618", color=i_col_ext, display=display.data_window, editable=false) > plot(f_calc_fibo(2.272, prev_h, prev_l, out_bull), title="Fibo 2.272", color=i_col_ext, display=display.data_window, editable=false) > plot(f_calc_fibo(2.618, prev_h, prev_l, out_bull), title="Fibo 2.618", color=i_col_ext, display=display.data_window, editable=false) > > plot(is_data_q8 ? f_calc_grid(0.125, prev_h, prev_l) : na, title="Qtr 0.125", color=i_col_q8, display=display.data_window, editable=false) > plot(is_data_q4 or is_data_q8 ? f_calc_grid(0.250, prev_h, prev_l) : na, title="Qtr 0.250", color=is_data_q8 ? i_col_q8 : i_col_q4, display=display.data_window, editable=false) > plot(is_data_q8 ? f_calc_grid(0.375, prev_h, prev_l) : na, title="Qtr 0.375", color=i_col_q8, display=display.data_window, editable=false) > plot(is_data_q4 or is_data_q8 ? f_calc_grid(0.500, prev_h, prev_l) : na, title="Qtr 0.500", color=is_data_q8 ? i_col_q8 : i_col_q4, display=display.data_window, editable=false) > plot(is_data_q8 ? f_calc_grid(0.625, prev_h, prev_l) : na, title="Qtr 0.625", color=i_col_q8, display=display.data_window, editable=false) > plot(is_data_q4 or is_data_q8 ? f_calc_grid(0.750, prev_h, prev_l) : na, title="Qtr 0.750", color=is_data_q8 ? i_col_q8 : i_col_q4, display=display.data_window, editable=false) > plot(is_data_q8 ? f_calc_grid(0.875, prev_h, prev_l) : na, title="Qtr 0.875", color=i_col_q8, display=display.data_window, editable=false) > > plot(f_calc_fibo(i_val_c1, prev_h, prev_l, out_bull), title="Custom 1", color=i_col_c1, display=display.data_window, editable=false) > plot(f_calc_fibo(i_val_c2, prev_h, prev_l, out_bull), title="Custom 2", color=i_col_c2, display=display.data_window, editable=false) > plot(f_calc_fibo(i_val_c3, prev_h, prev_l, out_bull), title="Custom 3", color=i_col_c3, 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_option3_Fibo & Quarters (Current)", shorttitle="NK-opt3 F&Q (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 = "▼ 基本設定" > const string GRP_OFFSET = "▼ 描画位置の微調整 (オフセット)" > const string GRP_CALC = "▼ 計算ロジック設定" > const string GRP_FIBO_RET = "▼ Fibo: リトレースメント" > const string GRP_FIBO_EXT = "▼ Fibo: エクステンション" > const string GRP_GRID = "▼ Quarters: 等分割グリッド" > const string GRP_FIBO_CUS = "▼ カスタムレベル" > > const string LBL_TF = "基準期間" > 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 OPT_POS_L = "左" > const string OPT_POS_C = "中央" > const string OPT_POS_R = "右" > > const string OPT_STY_S = "実線" > const string OPT_STY_D = "破線" > const string OPT_STY_DT = "点線" > > const string OPT_GRID_NONE = "非表示" > const string OPT_GRID_Q4 = "4分割" > const string OPT_GRID_Q8 = "8分割" > > i_tf_str = input.string(OPT_TF_3M, title=LBL_TF, options=[OPT_TF_D, OPT_TF_W, OPT_TF_1M, OPT_TF_3M, OPT_TF_12M], group=GRP_GENERAL) > i_lbl_pos = input.string(OPT_POS_C, title="ラベル配置位置", options=[OPT_POS_L, OPT_POS_C, OPT_POS_R], group=GRP_GENERAL) > > i_offset_left = input.int(-1, title="左端のズレ調整 (バー数換算)", group=GRP_OFFSET) > i_offset_right = input.int(0, title="右端のズレ調整 (バー数換算)", group=GRP_OFFSET) > > i_use_log = input.bool(true, title="対数(Log)スケールで計算 (※フィボナッチのみ適用)", group=GRP_CALC, tooltip="チャートを対数スケール(右下のlog)で表示している場合、チェックを入れると手動ツールと一致します。") > i_rev = input.bool(false, title="階層を反転 (Reverse)", group=GRP_CALC, tooltip="手動ツールと0.382や0.618の上下が逆になっている場合に使用してください。") > > i_show_ret = input.bool(true, title="表示 (0.382, 0.5, 0.618, 0.786)", group=GRP_FIBO_RET, inline="ret") > i_col_ret = input.color(color.blue, title="", group=GRP_FIBO_RET, inline="ret") > i_wid_ret = input.int(2, title="", minval=1, maxval=5, group=GRP_FIBO_RET, inline="ret") > i_sty_ret = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], group=GRP_FIBO_RET, inline="ret") > > i_show_ext = input.bool(true, title="表示 (1.272, 1.618, 2.272, 2.618)", group=GRP_FIBO_EXT, inline="ext") > i_col_ext = input.color(color.lime, title="", group=GRP_FIBO_EXT, inline="ext") > i_wid_ext = input.int(2, title="", minval=1, maxval=5, group=GRP_FIBO_EXT, inline="ext") > i_sty_ext = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], group=GRP_FIBO_EXT, inline="ext") > > i_grid_mode = input.string(OPT_GRID_NONE, title="グリッド表示", options=[OPT_GRID_NONE, OPT_GRID_Q4, OPT_GRID_Q8], group=GRP_GRID) > bool is_q4 = i_grid_mode == OPT_GRID_Q4 > bool is_q8 = i_grid_mode == OPT_GRID_Q8 > > i_col_q4 = input.color(color.aqua, title="4分割 カラー", group=GRP_GRID, inline="q4") > i_wid_q4 = input.int(2, title="", minval=1, maxval=5, group=GRP_GRID, inline="q4") > i_sty_q4 = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], group=GRP_GRID, inline="q4") > > i_col_q8 = input.color(color.purple, title="8分割 カラー", group=GRP_GRID, inline="q8") > i_wid_q8 = input.int(2, title="", minval=1, maxval=5, group=GRP_GRID, inline="q8") > i_sty_q8 = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], group=GRP_GRID, inline="q8") > > i_show_c1 = input.bool(false, title="カスタム 1 表示", group=GRP_FIBO_CUS, inline="c1") > i_val_c1 = input.float(0.0, title="", step=0.001, group=GRP_FIBO_CUS, inline="c1") > i_col_c1 = input.color(color.orange, title="", group=GRP_FIBO_CUS, inline="c1") > i_wid_c1 = input.int(2, title="", minval=1, maxval=5, group=GRP_FIBO_CUS, inline="c1") > i_sty_c1 = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], group=GRP_FIBO_CUS, inline="c1") > > i_show_c2 = input.bool(false, title="カスタム 2 表示", group=GRP_FIBO_CUS, inline="c2") > i_val_c2 = input.float(1.0, title="", step=0.001, group=GRP_FIBO_CUS, inline="c2") > i_col_c2 = input.color(color.orange, title="", group=GRP_FIBO_CUS, inline="c2") > i_wid_c2 = input.int(2, title="", minval=1, maxval=5, group=GRP_FIBO_CUS, inline="c2") > i_sty_c2 = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], group=GRP_FIBO_CUS, inline="c2") > > i_show_c3 = input.bool(false, title="カスタム 3 表示", group=GRP_FIBO_CUS, inline="c3") > i_val_c3 = input.float(2.414, title="", step=0.001, group=GRP_FIBO_CUS, inline="c3") > i_col_c3 = input.color(color.orange, title="", group=GRP_FIBO_CUS, inline="c3") > i_wid_c3 = input.int(2, title="", minval=1, maxval=5, group=GRP_FIBO_CUS, inline="c3") > i_sty_c3 = input.string(OPT_STY_S, title="", options=[OPT_STY_S, OPT_STY_D, OPT_STY_DT], group=GRP_FIBO_CUS, inline="c3") > > > // ============================================================================== > // 【03】 全コード共通仕様(時間・インフラ処理) > // ============================================================================== > string req_tf = switch i_tf_str > OPT_TF_D => "1D" > OPT_TF_W => "1W" > OPT_TF_1M => "1M" > OPT_TF_3M => "3M" > OPT_TF_12M => "12M" > > const int MS_PER_SEC = 1000 > bool is_new_period = timeframe.change(req_tf) 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 > > // ------------------------------------------------------------------------------ > // オブジェクトの事前生成 (独立変数を宣言し、ズレを完全排除) > // ※Pine Scriptの構文に基づき、異なる型のvar宣言は改行して行います > // ------------------------------------------------------------------------------ > // Fibo用: 線とラベルのセット > var line l_r1 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_ret, style=f_get_style(i_sty_ret), color=i_show_ret ? i_col_ret : na) > var label lbl_r1 = label.new(na, na, xloc=xloc.bar_time, text="0.382", color=color.new(color.white, 100), textcolor=i_show_ret ? i_col_ret : na, style=label.style_none, size=size.small) > > var line l_r2 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_ret, style=f_get_style(i_sty_ret), color=i_show_ret ? i_col_ret : na) > var label lbl_r2 = label.new(na, na, xloc=xloc.bar_time, text="0.500", color=color.new(color.white, 100), textcolor=i_show_ret ? i_col_ret : na, style=label.style_none, size=size.small) > > var line l_r3 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_ret, style=f_get_style(i_sty_ret), color=i_show_ret ? i_col_ret : na) > var label lbl_r3 = label.new(na, na, xloc=xloc.bar_time, text="0.618", color=color.new(color.white, 100), textcolor=i_show_ret ? i_col_ret : na, style=label.style_none, size=size.small) > > var line l_r4 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_ret, style=f_get_style(i_sty_ret), color=i_show_ret ? i_col_ret : na) > var label lbl_r4 = label.new(na, na, xloc=xloc.bar_time, text="0.786", color=color.new(color.white, 100), textcolor=i_show_ret ? i_col_ret : na, style=label.style_none, size=size.small) > > var line l_e1 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_ext, style=f_get_style(i_sty_ext), color=i_show_ext ? i_col_ext : na) > var label lbl_e1 = label.new(na, na, xloc=xloc.bar_time, text="1.272", color=color.new(color.white, 100), textcolor=i_show_ext ? i_col_ext : na, style=label.style_none, size=size.small) > > var line l_e2 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_ext, style=f_get_style(i_sty_ext), color=i_show_ext ? i_col_ext : na) > var label lbl_e2 = label.new(na, na, xloc=xloc.bar_time, text="1.618", color=color.new(color.white, 100), textcolor=i_show_ext ? i_col_ext : na, style=label.style_none, size=size.small) > > var line l_e3 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_ext, style=f_get_style(i_sty_ext), color=i_show_ext ? i_col_ext : na) > var label lbl_e3 = label.new(na, na, xloc=xloc.bar_time, text="2.272", color=color.new(color.white, 100), textcolor=i_show_ext ? i_col_ext : na, style=label.style_none, size=size.small) > > var line l_e4 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_ext, style=f_get_style(i_sty_ext), color=i_show_ext ? i_col_ext : na) > var label lbl_e4 = label.new(na, na, xloc=xloc.bar_time, text="2.618", color=color.new(color.white, 100), textcolor=i_show_ext ? i_col_ext : na, style=label.style_none, size=size.small) > > // Quarters用: 線のみ > var line l_q1 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_q8, style=f_get_style(i_sty_q8), color=is_q8 ? i_col_q8 : na) > var line l_q2 = line.new(na, na, na, na, xloc=xloc.bar_time, width=is_q8 ? i_wid_q8 : i_wid_q4, style=is_q8 ? f_get_style(i_sty_q8) : f_get_style(i_sty_q4), color=is_q8 ? i_col_q8 : is_q4 ? i_col_q4 : na) > var line l_q3 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_q8, style=f_get_style(i_sty_q8), color=is_q8 ? i_col_q8 : na) > var line l_q4 = line.new(na, na, na, na, xloc=xloc.bar_time, width=is_q8 ? i_wid_q8 : i_wid_q4, style=is_q8 ? f_get_style(i_sty_q8) : f_get_style(i_sty_q4), color=is_q8 ? i_col_q8 : is_q4 ? i_col_q4 : na) > var line l_q5 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_q8, style=f_get_style(i_sty_q8), color=is_q8 ? i_col_q8 : na) > var line l_q6 = line.new(na, na, na, na, xloc=xloc.bar_time, width=is_q8 ? i_wid_q8 : i_wid_q4, style=is_q8 ? f_get_style(i_sty_q8) : f_get_style(i_sty_q4), color=is_q8 ? i_col_q8 : is_q4 ? i_col_q4 : na) > var line l_q7 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_q8, style=f_get_style(i_sty_q8), color=is_q8 ? i_col_q8 : na) > > var line l_c1 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_c1, style=f_get_style(i_sty_c1), color=i_show_c1 ? i_col_c1 : na) > var label lbl_c1 = label.new(na, na, xloc=xloc.bar_time, text=str.tostring(i_val_c1), color=color.new(color.white, 100), textcolor=i_show_c1 ? i_col_c1 : na, style=label.style_none, size=size.small) > > var line l_c2 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_c2, style=f_get_style(i_sty_c2), color=i_show_c2 ? i_col_c2 : na) > var label lbl_c2 = label.new(na, na, xloc=xloc.bar_time, text=str.tostring(i_val_c2), color=color.new(color.white, 100), textcolor=i_show_c2 ? i_col_c2 : na, style=label.style_none, size=size.small) > > var line l_c3 = line.new(na, na, na, na, xloc=xloc.bar_time, width=i_wid_c3, style=f_get_style(i_sty_c3), color=i_show_c3 ? i_col_c3 : na) > var label lbl_c3 = label.new(na, na, xloc=xloc.bar_time, text=str.tostring(i_val_c3), color=color.new(color.white, 100), textcolor=i_show_c3 ? i_col_c3 : na, style=label.style_none, size=size.small) > > > // ============================================================================== > // 【05】 このコード固有の計算仕様 (Specific Indicator Logic) > // ============================================================================== > var float temp_o = na > var float temp_h = na > var float temp_l = na > var int temp_h_t = na > var int temp_l_t = na > > var float prev_o = na > var float prev_h = na > var float prev_l = na > var float prev_c = na > var int prev_h_t = na > var int prev_l_t = na > > var int start_t = na > var int end_t = na > > if is_new_period > prev_o := temp_o > prev_h := temp_h > prev_l := temp_l > prev_c := close[1] > prev_h_t := temp_h_t > prev_l_t := temp_l_t > > temp_o := open > temp_h := high > temp_l := low > temp_h_t := time > temp_l_t := time > > start_t := time > int tc = time_close(req_tf) > int fallback_t = time + timeframe.in_seconds(req_tf) * MS_PER_SEC > // ※安全装置強化:time_close()とtimeframe.in_seconds()の両方がnaになる特殊休場日への対策 > end_t := not na(tc) ? tc : not na(fallback_t) ? fallback_t : time + (86400 * MS_PER_SEC) > else > if na(temp_h) or high > temp_h > temp_h := high > temp_h_t := time > if na(temp_l) or low < temp_l > temp_l := low > temp_l_t := time > > f_calc_fibo(u_in, _h, _l, _is_bull, _use_log, _rev) => > bool bull = _rev ? not _is_bull : _is_bull > float ratio = u_in <= 1.0 ? u_in : u_in - 1.0 > float val = na > > if _use_log > float log_h = math.log(_h) > float log_l = math.log(_l) > float log_r = log_h - log_l > float log_v = na > if u_in <= 1.0 > log_v := bull ? log_h - (log_r * ratio) : log_l + (log_r * ratio) > else > log_v := bull ? log_h + (log_r * ratio) : log_l - (log_r * ratio) > val := math.exp(log_v) > else > float range_v = _h - _l > if u_in <= 1.0 > val := bull ? _h - (range_v * ratio) : _l + (range_v * ratio) > else > val := bull ? _h + (range_v * ratio) : _l - (range_v * ratio) > val > > f_calc_grid(u, _h, _l) => > _l + ((_h - _l) * u) > > f_is_bull(_h_t, _l_t, _o, _c) => > bool bull = _l_t < _h_t > if _h_t == _l_t > bull := _c >= _o > bull > > // ------------------------------------------------------------------------------ > // 描画関数 (グローバルスコープで定義してSyntax Errorを完全回避) > // ------------------------------------------------------------------------------ > f_upd_fibo(_show, _val, _line, _lbl, _d_start, _d_end, _lbl_t) => > if _show and not na(_val) > line.set_xy1(_line, _d_start, _val) > line.set_xy2(_line, _d_end, _val) > label.set_xy(_lbl, _lbl_t, _val) > else > line.set_xy1(_line, na, na) > line.set_xy2(_line, na, na) > label.set_xy(_lbl, na, na) > > f_upd_grid(_show, _val, _line, _d_start, _d_end) => > if _show and not na(_val) > line.set_xy1(_line, _d_start, _val) > line.set_xy2(_line, _d_end, _val) > else > line.set_xy1(_line, na, na) > line.set_xy2(_line, na, na) > > > // ============================================================================== > // 【06】 描画と出力 (Rendering & Outputs) > // ============================================================================== > bool do_draw = false > int draw_start = na > int draw_end = na > > if not na(prev_o) 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) > > if do_draw > bool is_bull = f_is_bull(prev_h_t, prev_l_t, prev_o, prev_c) > int lbl_t = i_lbl_pos == OPT_POS_L ? draw_start : i_lbl_pos == OPT_POS_C ? int(math.round((draw_start + draw_end) / 2)) : draw_end > > // Fibo > f_upd_fibo(i_show_ret, f_calc_fibo(0.382, prev_h, prev_l, is_bull, i_use_log, i_rev), l_r1, lbl_r1, draw_start, draw_end, lbl_t) > f_upd_fibo(i_show_ret, f_calc_fibo(0.500, prev_h, prev_l, is_bull, i_use_log, i_rev), l_r2, lbl_r2, draw_start, draw_end, lbl_t) > f_upd_fibo(i_show_ret, f_calc_fibo(0.618, prev_h, prev_l, is_bull, i_use_log, i_rev), l_r3, lbl_r3, draw_start, draw_end, lbl_t) > f_upd_fibo(i_show_ret, f_calc_fibo(0.786, prev_h, prev_l, is_bull, i_use_log, i_rev), l_r4, lbl_r4, draw_start, draw_end, lbl_t) > > f_upd_fibo(i_show_ext, f_calc_fibo(1.272, prev_h, prev_l, is_bull, i_use_log, i_rev), l_e1, lbl_e1, draw_start, draw_end, lbl_t) > f_upd_fibo(i_show_ext, f_calc_fibo(1.618, prev_h, prev_l, is_bull, i_use_log, i_rev), l_e2, lbl_e2, draw_start, draw_end, lbl_t) > f_upd_fibo(i_show_ext, f_calc_fibo(2.272, prev_h, prev_l, is_bull, i_use_log, i_rev), l_e3, lbl_e3, draw_start, draw_end, lbl_t) > f_upd_fibo(i_show_ext, f_calc_fibo(2.618, prev_h, prev_l, is_bull, i_use_log, i_rev), l_e4, lbl_e4, draw_start, draw_end, lbl_t) > > // Quarters > f_upd_grid(is_q8, f_calc_grid(0.125, prev_h, prev_l), l_q1, draw_start, draw_end) > f_upd_grid(is_q4 or is_q8, f_calc_grid(0.250, prev_h, prev_l), l_q2, draw_start, draw_end) > f_upd_grid(is_q8, f_calc_grid(0.375, prev_h, prev_l), l_q3, draw_start, draw_end) > f_upd_grid(is_q4 or is_q8, f_calc_grid(0.500, prev_h, prev_l), l_q4, draw_start, draw_end) > f_upd_grid(is_q8, f_calc_grid(0.625, prev_h, prev_l), l_q5, draw_start, draw_end) > f_upd_grid(is_q4 or is_q8, f_calc_grid(0.750, prev_h, prev_l), l_q6, draw_start, draw_end) > f_upd_grid(is_q8, f_calc_grid(0.875, prev_h, prev_l), l_q7, draw_start, draw_end) > > // Custom > f_upd_fibo(i_show_c1, f_calc_fibo(i_val_c1, prev_h, prev_l, is_bull, i_use_log, i_rev), l_c1, lbl_c1, draw_start, draw_end, lbl_t) > f_upd_fibo(i_show_c2, f_calc_fibo(i_val_c2, prev_h, prev_l, is_bull, i_use_log, i_rev), l_c2, lbl_c2, draw_start, draw_end, lbl_t) > f_upd_fibo(i_show_c3, f_calc_fibo(i_val_c3, prev_h, prev_l, is_bull, i_use_log, i_rev), l_c3, lbl_c3, draw_start, draw_end, lbl_t) > > // データウィンドウ出力 (客観的事実のみを静かに出力) > bool out_bull = f_is_bull(prev_h_t, prev_l_t, prev_o, prev_c) > > plot(f_calc_fibo(0.382, prev_h, prev_l, out_bull, i_use_log, i_rev), title="Fibo 0.382", color=i_col_ret, display=display.data_window, editable=false) > plot(f_calc_fibo(0.500, prev_h, prev_l, out_bull, i_use_log, i_rev), title="Fibo 0.500", color=i_col_ret, display=display.data_window, editable=false) > plot(f_calc_fibo(0.618, prev_h, prev_l, out_bull, i_use_log, i_rev), title="Fibo 0.618", color=i_col_ret, display=display.data_window, editable=false) > plot(f_calc_fibo(0.786, prev_h, prev_l, out_bull, i_use_log, i_rev), title="Fibo 0.786", color=i_col_ret, display=display.data_window, editable=false) > plot(f_calc_fibo(1.272, prev_h, prev_l, out_bull, i_use_log, i_rev), title="Fibo 1.272", color=i_col_ext, display=display.data_window, editable=false) > plot(f_calc_fibo(1.618, prev_h, prev_l, out_bull, i_use_log, i_rev), title="Fibo 1.618", color=i_col_ext, display=display.data_window, editable=false) > plot(f_calc_fibo(2.272, prev_h, prev_l, out_bull, i_use_log, i_rev), title="Fibo 2.272", color=i_col_ext, display=display.data_window, editable=false) > plot(f_calc_fibo(2.618, prev_h, prev_l, out_bull, i_use_log, i_rev), title="Fibo 2.618", color=i_col_ext, display=display.data_window, editable=false) > > plot(is_q8 ? f_calc_grid(0.125, prev_h, prev_l) : na, title="Qtr 0.125", color=i_col_q8, display=display.data_window, editable=false) > plot(is_q4 or is_q8 ? f_calc_grid(0.250, prev_h, prev_l) : na, title="Qtr 0.250", color=is_q8 ? i_col_q8 : i_col_q4, display=display.data_window, editable=false) > plot(is_q8 ? f_calc_grid(0.375, prev_h, prev_l) : na, title="Qtr 0.375", color=i_col_q8, display=display.data_window, editable=false) > plot(is_q4 or is_q8 ? f_calc_grid(0.500, prev_h, prev_l) : na, title="Qtr 0.500", color=is_q8 ? i_col_q8 : i_col_q4, display=display.data_window, editable=false) > plot(is_q8 ? f_calc_grid(0.625, prev_h, prev_l) : na, title="Qtr 0.625", color=i_col_q8, display=display.data_window, editable=false) > plot(is_q4 or is_q8 ? f_calc_grid(0.750, prev_h, prev_l) : na, title="Qtr 0.750", color=is_q8 ? i_col_q8 : i_col_q4, display=display.data_window, editable=false) > plot(is_q8 ? f_calc_grid(0.875, prev_h, prev_l) : na, title="Qtr 0.875", color=i_col_q8, display=display.data_window, editable=false) > > plot(f_calc_fibo(i_val_c1, prev_h, prev_l, out_bull, i_use_log, i_rev), title="Custom 1", color=i_col_c1, display=display.data_window, editable=false) > plot(f_calc_fibo(i_val_c2, prev_h, prev_l, out_bull, i_use_log, i_rev), title="Custom 2", color=i_col_c2, display=display.data_window, editable=false) > plot(f_calc_fibo(i_val_c3, prev_h, prev_l, out_bull, i_use_log, i_rev), title="Custom 3", color=i_col_c3, display=display.data_window, editable=false) > ```` --- > **Navigation** **ページ移動:** * [[2-3. option2_SVWAP & Zone|前の記事へ]] * [[3. NK-Horizon|次の記事へ]] * [[09. ▢-TradingViewコード|▢-TradingViewへ戻る]] * [[01. トップページ|トップページへ戻る]]