이것은 「캔들 마감 몇 초 전에 실시간 드로잉(그리기)을 시작할지 0초에서 5분 사이에서 조절할 수 있는」 기능이 탑재된 Multi MA입니다. 그 외에도 있으면 유용한 보조 기능들을 함께 추가했습니다.
[Multi MA]
단일 이동평균선이 특정 기간의 '선(Line)'인 반면, Multi MA(다중 이동평균선)는 여러 다른 기간(예: 단기·중기·장기) 혹은 다른 종류(SMA나 EMA 등)의 이동평균선을 동시에 그려내어 이를 '면(Surface)'으로 파악합니다. 라인 간의 '간격(이격)'이나 '배열' 등을 분석하는 데 사용됩니다.
출처: TradingView
[NOTICE & LICENSE]
・학습 및 정보 제공만을 목적으로 하며, 투자 조언이 아닙니다. 툴 사용으로 인해 발생한 경제적 손실에 대해 일절 책임을 지지 않습니다.
・Pine Script v6에서 동작을 확인했습니다. 향후 TradingView의 사양 변경에 따른 업데이트를 보장하지 않으며, 개별적인 설치 지원이나 수정 요청은 일절 받지 않습니다 (있는 그대로(As-is) 제공).
・MIT 라이선스가 적용됩니다.
// 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 Multi MA", shorttitle="NK-Fixed Multi MA", overlay=true)
// ==============================================================================
// 【01】 免責・ライセンス
// ==============================================================================
//
// 지표를 무료로 공개하고 있습니다: https://www.nk-report.com/p/kr-tradingview.html
//
// 면책 조항: 본 스크립트는 학습 및 정보 제공만을 목적으로 하며, 투자 조언이 아닙니다.
//
// 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 = "▼ 그리기 제어"
const string LBL_SEC = "실시간 그리기 시작 (캔들 마감 X초 전)"
const string TT_SEC = "0초에서 300초(5분) 사이로 조절. 지정 시간(예: 10초 전)이 될 때까지 현재 캔들의 그리기를 숨깁니다.\n0초를 입력하면 숨김 기능을 비활성화하고 항상 실시간으로 그립니다."
const string GRP_MA = "▼ Multi MA 설정"
const string LBL_MA1 = "MA 1"
const string LBL_MA2 = "MA 2"
const string LBL_MA3 = "MA 3"
const string LBL_MA4 = "MA 4"
const string LBL_WIDTH = "굵기"
// 2. UI(ユーザー入力画面)の構築 & 3. トップダウン処理への適合
i_sec = input.int(0, title=LBL_SEC, minval=0, maxval=300, group=GRP_FIXED, tooltip=TT_SEC)
// MA 1 (色指定: 10-2 に対応)
i_ma1_show = input.bool(true, title=LBL_MA1, group=GRP_MA, inline="MA1_A")
i_ma1_type = input.string("SMA", title="", options=["SMA", "EMA", "WMA"], group=GRP_MA, inline="MA1_A")
i_ma1_len = input.int(20, title="", minval=1, group=GRP_MA, inline="MA1_A")
i_ma1_src = input.source(close, title="", group=GRP_MA, inline="MA1_A")
i_ma1_col = input.color(color.purple, title="", group=GRP_MA, inline="MA1_B")
i_ma1_wid = input.int(2, title=LBL_WIDTH, minval=1, maxval=5, group=GRP_MA, inline="MA1_B")
// MA 2 (色指定: 2-2 に対応)
i_ma2_show = input.bool(true, title=LBL_MA2, group=GRP_MA, inline="MA2_A")
i_ma2_type = input.string("SMA", title="", options=["SMA", "EMA", "WMA"], group=GRP_MA, inline="MA2_A")
i_ma2_len = input.int(50, title="", minval=1, group=GRP_MA, inline="MA2_A")
i_ma2_src = input.source(close, title="", group=GRP_MA, inline="MA2_A")
i_ma2_col = input.color(color.orange, title="", group=GRP_MA, inline="MA2_B")
i_ma2_wid = input.int(2, title=LBL_WIDTH, minval=1, maxval=5, group=GRP_MA, inline="MA2_B")
// MA 3 (色指定: 4-7 に対応)
i_ma3_show = input.bool(true, title=LBL_MA3, group=GRP_MA, inline="MA3_A")
i_ma3_type = input.string("SMA", title="", options=["SMA", "EMA", "WMA"], group=GRP_MA, inline="MA3_A")
i_ma3_len = input.int(100, title="", minval=1, group=GRP_MA, inline="MA3_A")
i_ma3_src = input.source(close, title="", group=GRP_MA, inline="MA3_A")
i_ma3_col = input.color(color.green, title="", group=GRP_MA, inline="MA3_B")
i_ma3_wid = input.int(2, title=LBL_WIDTH, minval=1, maxval=5, group=GRP_MA, inline="MA3_B")
// MA 4 (色指定: 7-7 に対応)
i_ma4_show = input.bool(true, title=LBL_MA4, group=GRP_MA, inline="MA4_A")
i_ma4_type = input.string("SMA", title="", options=["SMA", "EMA", "WMA"], group=GRP_MA, inline="MA4_A")
i_ma4_len = input.int(200, title="", minval=1, group=GRP_MA, inline="MA4_A")
i_ma4_src = input.source(close, title="", group=GRP_MA, inline="MA4_A")
i_ma4_col = input.color(color.blue, title="", group=GRP_MA, inline="MA4_B")
i_ma4_wid = input.int(2, title=LBL_WIDTH, minval=1, maxval=5, group=GRP_MA, inline="MA4_B")
// ==============================================================================
// 【03】 全コード共通仕様(タイムゾーン・時間インフラ処理)
// ==============================================================================
// 1. 基本時間単位のシステム定義(定数化)
const int MS_PER_SEC = 1000
// ==============================================================================
// 【04】 各カテゴリ共通仕様 (NK-Fixed Core Logic)
// ==============================================================================
// 1. カテゴリ固有のインフラ構築(コア機能の定義)
bool is_draw_ready = true
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. インジケーター固有の純粋な数学的処理
// 各MAのタイプ(SMA/EMA/WMA)に応じて計算を切り替える関数
f_calc_ma(type_str, src_val, len_val) =>
float res = na
switch type_str
"SMA" => res := ta.sma(src_val, len_val)
"EMA" => res := ta.ema(src_val, len_val)
"WMA" => res := ta.wma(src_val, len_val)
res
float calc_ma1 = f_calc_ma(i_ma1_type, i_ma1_src, i_ma1_len)
float calc_ma2 = f_calc_ma(i_ma2_type, i_ma2_src, i_ma2_len)
float calc_ma3 = f_calc_ma(i_ma3_type, i_ma3_src, i_ma3_len)
float calc_ma4 = f_calc_ma(i_ma4_type, i_ma4_src, i_ma4_len)
// 3. 視覚的装飾の排除とデータの引き渡し
// ユーザーの表示チェック(i_maX_show)と描画フラグ(is_draw_ready)の両方を満たす場合のみデータを渡す
float final_ma1 = (i_ma1_show and is_draw_ready) ? calc_ma1 : na
float final_ma2 = (i_ma2_show and is_draw_ready) ? calc_ma2 : na
float final_ma3 = (i_ma3_show and is_draw_ready) ? calc_ma3 : na
float final_ma4 = (i_ma4_show and is_draw_ready) ? calc_ma4 : na
// ==============================================================================
// 【06】 描画と出力 (Rendering & Outputs)
// ==============================================================================
// 1. チャートへの視覚的出力(プロットと装飾)
plot(final_ma1, title="MA 1", color=i_ma1_col, linewidth=i_ma1_wid, style=plot.style_line)
plot(final_ma2, title="MA 2", color=i_ma2_col, linewidth=i_ma2_wid, style=plot.style_line)
plot(final_ma3, title="MA 3", color=i_ma3_col, linewidth=i_ma3_wid, style=plot.style_line)
plot(final_ma4, title="MA 4", color=i_ma4_col, linewidth=i_ma4_wid, style=plot.style_line)
// 3. アラート(通知)条件の統合
// Multi MAならではの機能として、代表的な「MA 1とMA 2のクロス」を通知条件に設定
bool ma_cross_over = ta.crossover(calc_ma1, calc_ma2) and is_draw_ready
bool ma_cross_under = ta.crossunder(calc_ma1, calc_ma2) and is_draw_ready
alertcondition(ma_cross_over, title="MA1 Cross Over MA2", message="NK-Fixed Multi MA: MA 1 crossed over MA 2")
alertcondition(ma_cross_under, title="MA1 Cross Under MA2", message="NK-Fixed Multi MA: MA 1 crossed under MA 2")
* 원하는 색상으로 설정한 후, 설정 탭에서 '기본값으로 저장'을 눌러주세요.
* 새로 만들기 -> 지표 -> 붙여넣기 순서로 진행하지 않으면 정상적으로 표시되지 않을 수 있습니다.