//@version=5
indicator("Niveles Clave + Tendencia Ajustable", overlay=true)
// Inputs para personalización
smma_length = input.int(200, "Longitud SMMA", minval=1)
precio_formato = input.string("#.#####", "Formato de precio")
mostrar_dia_anterior = input.bool(true, "Mostrar niveles del día anterior")
mostrar_4h = input.bool(true, "Mostrar niveles de 4h")
mostrar_smma = input.bool(true, "Mostrar SMMA")
color_max_dia = input.color(color.red, "Color máximo día anterior")
color_min_dia = input.color(color.green, "Color mínimo día anterior")
color_max_4h = input.color(color.orange, "Color máximo 4h")
color_min_4h = input.color(color.blue, "Color mínimo 4h")
color_smma = input.color(color.purple, "Color SMMA")
color_alcista = input.color(color.green, "Color tendencia alcista")
color_bajista = input.color(color.red, "Color tendencia bajista")
// Inputs para grosor de líneas
grosor_max_dia = input.int(1, "Grosor línea máximo día anterior", minval=1, maxval=4)
grosor_min_dia = input.int(1, "Grosor línea mínimo día anterior", minval=1, maxval=4)
grosor_max_4h = input.int(1, "Grosor línea máximo 4h", minval=1, maxval=4)
grosor_min_4h = input.int(1, "Grosor línea mínimo 4h", minval=1, maxval=4)
grosor_smma = input.int(2, "Grosor línea SMMA", minval=1, maxval=4)
// Inputs para posiciones
pos_x_max_dia = input.int(0, "Posición X máximo día anterior", minval=-500, maxval=500)
pos_y_max_dia = input.float(0.0, "Posición Y máximo día anterior", minval=-10, maxval=10, step=0.1)
pos_x_min_dia = input.int(0, "Posición X mínimo día anterior", minval=-500, maxval=500)
pos_y_min_dia = input.float(0.0, "Posición Y mínimo día anterior", minval=-10, maxval=10, step=0.1)
pos_x_max_4h = input.int(0, "Posición X máximo 4h", minval=-500, maxval=500)
pos_y_max_4h = input.float(0.0, "Posición Y máximo 4h", minval=-10, maxval=10, step=0.1)
pos_x_min_4h = input.int(0, "Posición X mínimo 4h", minval=-500, maxval=500)
pos_y_min_4h = input.float(0.0, "Posición Y mínimo 4h", minval=-10, maxval=10, step=0.1)
pos_x_smma = input.int(0, "Posición X SMMA", minval=-500, maxval=500)
pos_y_smma = input.float(0.0, "Posición Y SMMA", minval=-10, maxval=10, step=0.1)
pos_x_tendencia = input.int(0, "Posición X Tendencia", minval=-500, maxval=500)
pos_y_tendencia = input.float(0.0, "Posición Y Tendencia", minval=-10, maxval=10, step=0.1)
// Cálculos
prev_high = request.security(syminfo.tickerid, "D", high[1])
prev_low = request.security(syminfo.tickerid, "D", low[1])
last_4h_high = request.security(syminfo.tickerid, "240", high[1])
last_4h_low = request.security(syminfo.tickerid, "240", low[1])
smma = ta.sma(close, smma_length)
smma := na(smma[1]) ? smma : (smma[1] * (smma_length - 1) + close) / smma_length
// Función para crear líneas y etiquetas
f_crear_linea_y_etiqueta(precio, color_linea, texto, mostrar, pos_x, pos_y, grosor) =>
if mostrar and barstate.islast
line.new(bar_index - 500, precio, bar_index, precio, color=color_linea, extend=extend.right, width=grosor)
label.new(bar_index + pos_x, precio * (1 + pos_y), texto + str.tostring(precio, precio_formato),
color=color_linea, textcolor=color.white, style=label.style_label_center)
// Dibujar líneas y etiquetas
f_crear_linea_y_etiqueta(prev_high, color_max_dia, "Máx Día Anterior: ", mostrar_dia_anterior, pos_x_max_dia, pos_y_max_dia, grosor_max_dia)
f_crear_linea_y_etiqueta(prev_low, color_min_dia, "Mín Día Anterior: ", mostrar_dia_anterior, pos_x_min_dia, pos_y_min_dia, grosor_min_dia)
f_crear_linea_y_etiqueta(last_4h_high, color_max_4h, "Máx 4h: ", mostrar_4h, pos_x_max_4h, pos_y_max_4h, grosor_max_4h)
f_crear_linea_y_etiqueta(last_4h_low, color_min_4h, "Mín 4h: ", mostrar_4h, pos_x_min_4h, pos_y_min_4h, grosor_min_4h)
// Dibujar SMMA
plot(mostrar_smma ? smma : na, color=color_smma, title="SMMA", linewidth=grosor_smma)
// Etiqueta para SMMA
if mostrar_smma and barstate.islast
label.new(bar_index + pos_x_smma, smma * (1 + pos_y_smma), "SMMA " + str.tostring(smma_length) + ": " + str.tostring(smma, precio_formato),
color=color_smma, textcolor=color.white, style=label.style_label_center)
// Tendencia
tendencia_alcista = close > smma
tendencia_bajista = close < smma
// Leyenda de tendencia ajustable
if barstate.islast
label.new(
bar_index + pos_x_tendencia,
high * (1 + pos_y_tendencia),
text="Tendencia: " + (tendencia_alcista ? "ALCISTA" : "BAJISTA"),
color=tendencia_alcista ? color_alcista : color_bajista,
textcolor=color.white,
style=label.style_label_center,
size=size.large
)