์•ฝ 3์ฃผ๊ฐ„ ํ๊ด€์ˆ˜๋ จ ๋๋‚ฌ์Œ,, ๊ฒฐ๊ณผ๋Š” ๋งค์šฐ ๋งŒ์กฑ์ด๊ณ , 3์ฃผ๊ฐ„ 10๋ฐฐ์ฐ๊ณ  ์ˆ˜๋ จ ๋๋‚˜๊ณ  ์˜ฌ๋ผ์˜ค๋Š” ๋‚  ๋ฐ˜ํ† ๋ง‰๋‚จ ใ……ใ…‚ ใ…‹ใ…‹ใ…‹ใ…‹


์ง€๊ธˆ ์žฅ ์•„์ฃผ ๊ธฐ๋ชจ๋ ํ•œ๋ฐ,,, ๊ฐ ์ ์œผ๋กœ ์ง ์ž๋ฆฌ์—์„œ ์ˆ์น˜๋ฉด ใ„นใ…‡ ํ™ฉ์ฒœ๊ธธ ์ „์žฌ์‚ฐ ์ฒญ์‚ฐ๋‚จ


์ˆ ์น˜์ง€ ๋งˆ์…ˆ, ์ด๊ฑฐ ์“ธ์‚ฌ๋žŒ ์“ฐ์…ˆ, ์ด ์ง€ํ‘œ๋Š” 1๋ถ„๋ด‰์—์„œ๋งŒ ์ž‘๋™ํ•จ, sma ์ž„


๋‚˜๋Š” ์ดํ‰์„  ๋งค๋งคํ•˜๊ธฐ ๋•Œ๋ฌธํฌํฌํํžˆใ…กํžˆํฌย 


์“ธ์‚ฌ๋žŒ ๋ณธ์ธ ์ž…๋งŒ ๋งž์ถฐ ์•Œ์•„์„œ ์ž˜ ์จ๋ณด์…ˆ, ๋‚œ ์ด๊ฑธ๋กœ ๊ธฐ๋ชจ๋ฝ ํ•˜๊ณ  ์žˆ์œผ๋‹ˆ๊นŒ


๊ทธ๋ฆฌ๊ณ  ์ฐจํŠธ ์ผ๊ทธ๋Ÿฌ์ง€๋Š”๊ฑด ์„ค์ •์—์„œ ๊ฐ€๊ฒฉ์ฐจํŠธ๋งŒ ์Šค์ผ€์ผ ๋ˆ„๋ฅด๋ฉด ๋œ๋‹ค ์ด๊ฑฐ์•ผ,


์ˆ์น˜์ง€ ๋งˆ๋ผ๋ผ๋ผ๋ผ๋ผ๋ผ๋ผย 


//@version=6

indicator("Rainbow_SMA_Smooth_RightLabels", overlay=true)


// --- [์ž…๋ ฅ์ฐฝ] ํƒ€์ž„ํ”„๋ ˆ์ž„๋ณ„ ํ™œ์„ฑํ™” ---

show1ย  ย = input.bool(true,ย  "1๋ถ„๋ด‰ ํ‘œ์‹œ", group="์ดํ‰์„  ํ™œ์„ฑํ™”")

show5ย  ย = input.bool(true,ย  "5๋ถ„๋ด‰ ํ‘œ์‹œ", group="์ดํ‰์„  ํ™œ์„ฑํ™”")

show15ย  = input.bool(true,ย  "15๋ถ„๋ด‰ ํ‘œ์‹œ", group="์ดํ‰์„  ํ™œ์„ฑํ™”")

show60ย  = input.bool(true,ย  "1์‹œ๊ฐ„๋ด‰ ํ‘œ์‹œ", group="์ดํ‰์„  ํ™œ์„ฑํ™”")

show240 = input.bool(true,ย  "4์‹œ๊ฐ„๋ด‰ ํ‘œ์‹œ", group="์ดํ‰์„  ํ™œ์„ฑํ™”")

showDย  ย = input.bool(true,ย  "์ผ๋ด‰ ํ‘œ์‹œ", group="์ดํ‰์„  ํ™œ์„ฑํ™”")

showWย  ย = input.bool(true,ย  "์ฃผ๋ด‰ ํ‘œ์‹œ", group="์ดํ‰์„  ํ™œ์„ฑํ™”")


// --- [๋ณด๊ฐ„ ํ•จ์ˆ˜] ๊ณ„๋‹จ ํ˜„์ƒ ์ œ๊ฑฐ ๋ฐ ๋ถ€๋“œ๋Ÿฌ์šด ์—ฐ๊ฒฐ ---

f_smooth_ma(string tf, int len, float tf_ms) =>

ย  ย  [m_curr, m_prev, t_start] = request.security(syminfo.tickerid, tf, [ta.sma(close, len), ta.sma(close, len)[1], time], lookahead=barmerge.lookahead_on)

ย  ย  float progress = math.min(1.0, (time - t_start) / tf_ms)

ย  ย  m_prev + (m_curr - m_prev) * progress


// --- [๋ผ๋ฒจ ํ•จ์ˆ˜] ์ฐจํŠธ ์šฐ์ธก ๋ ํ‘œ์‹œ ---

f_draw_label(bool show, float val, string txt, color col) =>

ย  ย  var label lbl = na

ย  ย  if show and not na(val)

ย  ย  ย  ย  if barstate.islast

ย  ย  ย  ย  ย  ย  lbl := label.new(bar_index + 2, val, txt, color=color.new(col, 100), textcolor=col, style=label.style_label_left, size=size.small)

ย  ย  ย  ย  ย  ย  label.delete(lbl[1])


// ์ƒ‰์ƒ ์„ค์ •

color_upย  ย = #00FF00 // ์ƒ์Šน

color_down = #FF0000 // ํ•˜๋ฝ

color_none = #2A2E39 // ํšก๋ณด


// --- 1. ์ดํ‰์„  ๊ณ„์‚ฐ ๋ฐ ํ”Œ๋กฏ ---


// 1๋ถ„๋ด‰

s1_7 = ta.sma(close, 7), s1_25 = ta.sma(close, 25), s1_99 = ta.sma(close, 99)

c1 = close > s1_99 ? color_up : color_down

plot(show1 ? s1_7 : na, color=c1, linewidth=1), f_draw_label(show1, s1_7, "1๋ถ„(7)", c1)

plot(show1 ? s1_25 : na, color=c1, linewidth=1), f_draw_label(show1, s1_25, "1๋ถ„(25)", c1)

plot(show1 ? s1_99 : na, color=c1, linewidth=1), f_draw_label(show1, s1_99, "1๋ถ„(99)", c1)


// 5๋ถ„๋ด‰

s5_7 = ta.sma(close, 35), s5_25 = ta.sma(close, 125), s5_99 = ta.sma(close, 495)

c5 = close > s5_99 ? color_up : color_down

plot(show5 ? s5_7 : na, color=c5, linewidth=1), f_draw_label(show5, s5_7, "5๋ถ„(7)", c5)

plot(show5 ? s5_25 : na, color=c5, linewidth=1), f_draw_label(show5, s5_25, "5๋ถ„(25)", c5)

plot(show5 ? s5_99 : na, color=c5, linewidth=1), f_draw_label(show5, s5_99, "5๋ถ„(99)", c5)


// 15๋ถ„๋ด‰

s15_7 = ta.sma(close, 105), s15_25 = ta.sma(close, 375), s15_99 = ta.sma(close, 1485)

c15 = close > s15_99 ? color_up : color_down

plot(show15 ? s15_7 : na, color=c15, linewidth=1), f_draw_label(show15, s15_7, "15๋ถ„(7)", c15)

plot(show15 ? s15_25 : na, color=c15, linewidth=1), f_draw_label(show15, s15_25, "15๋ถ„(25)", c15)

plot(show15 ? s15_99 : na, color=c15, linewidth=1), f_draw_label(show15, s15_99, "15๋ถ„(99)", c15)


// 1์‹œ๊ฐ„๋ด‰

s60_7 = f_smooth_ma("60", 7, 3600000), s60_25 = f_smooth_ma("60", 25, 3600000), s60_99 = f_smooth_ma("60", 99, 3600000)

c60 = close > s60_99 ? color_up : color_down

plot(show60 ? s60_7 : na, color=c60, linewidth=1), f_draw_label(show60, s60_7, "1์‹œ(7)", c60)

plot(show60 ? s60_25 : na, color=c60, linewidth=1), f_draw_label(show60, s60_25, "1์‹œ(25)", c60)

plot(show60 ? s60_99 : na, color=c60, linewidth=1), f_draw_label(show60, s60_99, "1์‹œ(99)", c60)


// 4์‹œ๊ฐ„๋ด‰

s240_7 = f_smooth_ma("240", 7, 14400000), s240_25 = f_smooth_ma("240", 25, 14400000), s240_99 = f_smooth_ma("240", 99, 14400000)

c240 = close > s240_99 ? color_up : color_down

plot(show240 ? s240_7 : na, color=c240, linewidth=1), f_draw_label(show240, s240_7, "4์‹œ(7)", c240)

plot(show240 ? s240_25 : na, color=c240, linewidth=1), f_draw_label(show240, s240_25, "4์‹œ(25)", c240)

plot(show240 ? s240_99 : na, color=c240, linewidth=1), f_draw_label(show240, s240_99, "4์‹œ(99)", c240)


// ์ผ๋ด‰

sD_7 = f_smooth_ma("D", 7, 86400000), sD_25 = f_smooth_ma("D", 25, 86400000), sD_99 = f_smooth_ma("D", 99, 86400000)

cD = close > sD_99 ? color_up : color_down

plot(showD ? sD_7 : na, color=cD, linewidth=1), f_draw_label(showD, sD_7, "์ผ(7)", cD)

plot(showD ? sD_25 : na, color=cD, linewidth=1), f_draw_label(showD, sD_25, "์ผ(25)", cD)

plot(showD ? sD_99 : na, color=cD, linewidth=1), f_draw_label(showD, sD_99, "์ผ(99)", cD)


// ์ฃผ๋ด‰

sW_7 = f_smooth_ma("W", 7, 604800000), sW_25 = f_smooth_ma("W", 25, 604800000), sW_99 = f_smooth_ma("W", 99, 604800000)

cW = close > sW_99 ? color_up : color_down

plot(showW ? sW_7 : na, color=cW, linewidth=1), f_draw_label(showW, sW_7, "์ฃผ(7)", cW)

plot(showW ? sW_25 : na, color=cW, linewidth=1), f_draw_label(showW, sW_25, "์ฃผ(25)", cW)

plot(showW ? sW_99 : na, color=cW, linewidth=1), f_draw_label(showW, sW_99, "์ฃผ(99)", cW)


// --- 2. ๋Œ€์‹œ๋ณด๋“œ ํ‘œ ---

var table statusTable = table.new(position.bottom_left, 3, 8, border_width=1, border_color=color.new(color.white, 30))


f_fill_row(int row, bool show, string tf_name, float s7, float s25, float s99) =>

ย  ย  if show

ย  ย  ย  ย  bool is_bull = s7 > s25 and s25 > s99

ย  ย  ย  ย  bool is_bear = s7 < s25 and s25 < s99

ย  ย  ย  ย  string state_txt = is_bull ? "์ •๋ฐฐ์—ด" : (is_bear ? "์—ญ๋ฐฐ์—ด" : "ํšก๋ณด")

ย  ย  ย  ย  color state_bgย  ย = is_bull ? color_up : (is_bear ? color_down : color_none)

ย  ย  ย  ย  color state_text = is_bull or is_bear ? color.black : color.whiteย 

ย  ย  ย  ย  table.cell(statusTable, 0, row, tf_name, text_color=color.white, bgcolor=color.new(color.black, 40), text_size=size.small)

ย  ย  ย  ย  table.cell(statusTable, 1, row, state_txt, bgcolor=state_bg, text_color=state_text, text_size=size.small)

ย  ย  ย  ย  table.cell(statusTable, 2, row, close > s99 ? "์ƒ์Šน" : "ํ•˜๋ฝ", bgcolor=close > s99 ? color_up : color_down, text_color=color.black, text_size=size.small)


if barstate.islast

ย  ย  table.cell(statusTable, 0, 0, "ํ”„๋ ˆ์ž„", bgcolor=color.black, text_color=color.white, text_size=size.small)

ย  ย  table.cell(statusTable, 1, 0, "๋ฐฐ์—ด ์ƒํƒœ", bgcolor=color.black, text_color=color.white, text_size=size.small)

ย  ย  table.cell(statusTable, 2, 0, "99์„  ๊ธฐ์ค€", bgcolor=color.black, text_color=color.white, text_size=size.small)

ย  ย  f_fill_row(1, show1, "1๋ถ„", s1_7, s1_25, s1_99)

ย  ย  f_fill_row(2, show5, "5๋ถ„", s5_7, s5_25, s5_99)

ย  ย  f_fill_row(3, show15, "15๋ถ„", s15_7, s15_25, s15_99)

ย  ย  f_fill_row(4, show60, "1์‹œ๊ฐ„", s60_7, s60_25, s60_99)

ย  ย  f_fill_row(5, show240, "4์‹œ๊ฐ„", s240_7, s240_25, s240_99)

ย  ย  f_fill_row(6, showD, "์ผ๋ด‰", sD_7, sD_25, sD_99)

ย  ย  f_fill_row(7, showW, "์ฃผ๋ด‰", sW_7, sW_25, sW_99)