AVISO: lo siguiente es únicamente para entretenimiento + fines educativos. ¡No es CONSEJO FINANCIERO ni asesoramiento de CODIFICACIÓN (IA, o de otro tipo)! ¡Esto es solo con fines de DEMOSTRACIÓN!
Solicitud para SMA Clouds
Actúa como un desarrollador senior de TradingView Pine Script v5.
Crea un indicador superpuesto con el nombre:
“CÓDIGO DE INDICADORES TÉCNICOS 4.0 — Configuración de SMA Cloud”
PROPÓSITO
Construye un indicador de múltiples marcos temporales que no repinte, que proporcione contexto de tendencia y califique posibles señales. No debe ejecutar operaciones ni proporcionar asesoramiento financiero.
MARCO
El indicador usa tres capas analíticas:
1. Estructura de 8 horas
- Determina la estructura general del mercado en el marco temporal de 8H.
- Clasifícalo como alcista, bajista o neutral.
- Muestra la clasificación actual en un pequeño panel (dashboard).
2. Nube SMA de 1 hora
- Calcula una Media Móvil Simple rápida y una lenta en el marco temporal de 1H.
- Haz que ambas longitudes de SMA sean configurables.
- Valores predeterminados: [INSERT FAST SMA] y [INSERT SLOW SMA].
- Rellena el área entre las medias:
• Verde cuando la SMA rápida está por encima de la SMA lenta.
• Rojo cuando la SMA rápida está por debajo de la SMA lenta.
• Gris neutro cuando la relación no es clara.
- La nube de 1H es el filtro principal de dirección de tendencia.
3. Disparador de 15 minutos y confirmación de IMACD
- Calcula el disparador de entrada en el marco temporal de 15M.
- Confirma los disparadores alcistas solo cuando el momentum de IMACD sea positivo.
- Confirma disparadores bajistas solo cuando el momentum de IMACD sea negativo.
- Usa la siguiente especificación de IMACD: [INSERT EXACT IMACD FORMULA AND SETTINGS].
- Dibuja un triángulo verde hacia arriba para disparadores alcistas confirmados.
- Dibuja un triángulo rojo hacia abajo para disparadores bajistas confirmados.
JERARQUÍA DE SEÑALES
Una calificación alcista requiere:
- Estructura aceptable alcista o neutral en 8H.
- Nube SMA de 1H alcista.
- Disparador alcista de 15M.
- Confirmación positiva de IMACD.
Una calificación bajista requiere las condiciones exactamente inversas.
REQUISITOS TÉCNICOS
- Usa request.security() con barmerge.lookahead_off.
- Evalúa las señales solo en velas cerradas confirmadas.
- No repintes señales históricas.
- No uses datos futuros.
- Permite que los tres marcos temporales y todas las longitudes de cálculo se cambien mediante entradas.
- Incluye interruptores para mostrar u ocultar la nube, etiquetas de estructura, marcadores de disparo y panel.
- Agrega reglas alertcondition() para calificaciones alcistas y bajistas confirmadas.
- Mantén el gráfico visualmente limpio.
- No incluyas órdenes automáticas, afirmaciones de rendimiento, P&L ni recomendaciones de inversión.
- Comenta el código claramente y explica cómo cada marco temporal contribuye al resultado.
Antes de escribir el código, identifica cualquier regla de cálculo o parámetro faltante. No inventes configuraciones propietarias. Primero, pregúntame por los valores faltantes.
Después de recibir esos valores, proporciona:
1. Código completo de Pine Script v5.
2. Una explicación concisa de la lógica.
3. Una lista de verificación para probar que el indicador no repinta.
CÓDIGO (COPIAR & PEGAR)
//@version=6
indicator("John Wick v 4.0", overlay=true)
//==================================================
// Entradas MACD
//==================================================
fastLength = input.int(12, "Longitud rápida MACD")
slowLength = input.int(26, "Longitud lenta MACD")
signalLength = input.int(9, "Longitud de la señal MACD")
atrLength = input.int(14, "Longitud de ATR")
showExits = input.bool(true)
showCrosses = input.bool(true)
minProfitATR = input.float(0.30)
//==================================================
// Núcleo MACD
//==================================================
fastMA = ta.ema(close, fastLength)
slowMA = ta.ema(close, slowLength)
macdLine = fastMA - slowMA
signalLine = ta.ema(macdLine, signalLength)
hist = macdLine - signalLine
//==================================================
// Eventos de cruce
//==================================================
bullCross = ta.crossover(macdLine, signalLine)
bearCross = ta.crossunder(macdLine, signalLine)
//==================================================
// Espaciado del marcador
//==================================================
atrValue = ta.atr(atrLength)
dotOffset = atrValue * 0.28
triOffset = atrValue * 0.70
longExitY = high + dotOffset
shortExitY = low - dotOffset
triBullY = low - triOffset
triBearY = high + triOffset
//==================================================
// Motor del estado de la operación
//==================================================
var int activeDir = 0
var float entryPrice = na
var float bestHist = na
var bool partialTaken = false
if bullCross
activeDir := 1
entryPrice := close
bestHist := hist
partialTaken := false
if bearCross
activeDir := -1
entryPrice := close
bestHist := hist
partialTaken := false
if activeDir == 1
bestHist := na(bestHist) ? hist : math.max(bestHist, hist)
if activeDir == -1
bestHist := na(bestHist) ? hist : math.min(bestHist, hist)
//==================================================
// Lógica de salida
//==================================================
longInProfit =
activeDir == 1
and not na(entryPrice)
and high >= entryPrice + atrValue * minProfitATR
shortInProfit =
activeDir == -1
and not na(entryPrice)
and low <= entryPrice - atrValue * minProfitATR
longMomentumFade =
activeDir == 1
and bestHist > 0
and hist < hist[1]
shortMomentumFade =
activeDir == -1
and bestHist < 0
and hist > hist[1]
yellowLongExit =
showExits
and activeDir == 1
and not partialTaken
and longInProfit
and longMomentumFade
yellowShortExit =
showExits
and activeDir == -1
and not partialTaken
and shortInProfit
and shortMomentumFade
if yellowLongExit or yellowShortExit
partialTaken := true
redLongExit =
showExits
and activeDir == 1
and partialTaken
and bearCross
redShortExit =
showExits
and activeDir == -1
and partialTaken
and bullCross
if redLongExit or redShortExit
activeDir := 0
entryPrice := na
bestHist := na
partialTaken := false
//==================================================
// PILA DE EMA (Nube de 5 capas)
//==================================================
ema5 = ta.ema(close, 5)
ema9 = ta.ema(close, 9)
ema12 = ta.ema(close, 12)
ema26 = ta.ema(close, 26)
ema50 = ta.ema(close, 50)
//==================================================
// Trazar EMAs (Delgadas / Atenuadas)
//==================================================
p5 = plot(ema5, color=color.new(color.aqua, 20), linewidth=1)
p9 = plot(ema9, color=color.new(color.blue, 20), linewidth=1)
p12 = plot(ema12, color=color.new(color.gray, 20), linewidth=1)
p26 = plot(ema26, color=color.new(color.orange,20), linewidth=1)
p50 = plot(ema50, color=color.new(color.red, 20), linewidth=1)
//==================================================
// NUBES
//==================================================
// 5–9 Reacción rápida
fill(p5, p9, color=color.new(color.aqua, 80))
// 9–12 Momentum
fill(p9, p12, color=color.new(color.blue, 82))
// 12–26 Estructura
fill(p12, p26, color=color.new(color.gray, 84))
// 26–50 Tendencia
fill(p26, p50, color=color.new(color.orange, 86))
//==================================================
// Salida Puntos
//==================================================
plotshape(
yellowLongExit ? longExitY : na,
style=shape.circle,
location=location.absolute,
color=color.new(color.yellow, 20),
size=size.tiny
)
plotshape(
yellowShortExit ? shortExitY : na,
style=shape.circle,
location=location.absolute,
color=color.new(color.yellow, 20),
size=size.tiny
)
plotshape(
redLongExit ? longExitY : na,
style=shape.circle,
location=location.absolute,
color=color.red,
size=size.tiny
)
plotshape(
redShortExit ? shortExitY : na,
style=shape.circle,
location=location.absolute,
color=color.red,
size=size.tiny
)
//==================================================
// Triángulos de entrada
//==================================================
plotshape(
showCrosses and bullCross ? triBullY : na,
style=shape.triangleup,
location=location.absolute,
color=color.lime,
size=size.small
)
plotshape(
showCrosses and bearCross ? triBearY : na,
style=shape.triangledown,
location=location.absolute,
color=color.red,
size=size.small
)
ATR Prompt y Code
Prompt
Actúa como un desarrollador senior de TradingView Pine Script v5.
Crea un indicador superpuesto llamado:
“Codificación de Indicadores Técnicos 5.2 — Average True Range”
PROPÓSITO
Construye un indicador de dirección de tendencia adaptativo a la volatilidad usando un nivel de seguimiento (trailing) de ATR con carril (ratcheting). El indicador es para análisis educativo y no debe ejecutar operaciones ni hacer afirmaciones de rendimiento.
AJUSTES PRINCIPALES
- Periodo de ATR: 10
- Multiplicador de ATR: 1.9
- Fuente de cálculo: close
- Haz que el periodo del ATR, el multiplicador y la fuente sean configurables.
CÁLCULO
1. Calcula el Rango Verdadero Medio (ATR) durante 10 periodos.
2. Calcula la distancia de seguimiento (trailing):
trailingDistance = 1.9 × ATR(10)
3. Crea un nivel de seguimiento recursivo que se ajusta con el precio:
- Mientras el precio permanezca por encima del nivel de seguimiento anterior, el nivel puede moverse hacia arriba, pero nunca hacia abajo.
- Mientras el precio permanezca por debajo del nivel de seguimiento anterior, el nivel puede moverse hacia abajo, pero nunca hacia arriba.
- Cuando el precio cruza el nivel de seguimiento, cambia la dirección codificada.
LÓGICA DE DIRECCIÓN
- Cambia a dirección alcista cuando el precio de cierre cruce por encima del nivel de seguimiento.
- Cambia a dirección bajista cuando el precio de cierre cruce por debajo del nivel de seguimiento.
- Genera una señal solo cuando el sentido cambia.
- No generes señales repetidas en cada vela.
SALIDA VISUAL
- Trazar el nivel de seguimiento del ATR.
- Usa verde cuando la dirección codificada sea alcista.
- Usa rojo cuando la dirección codificada sea bajista.
- Dibuja un triángulo verde hacia arriba en un cambio de dirección alcista.
- Dibuja un triángulo rojo hacia abajo en un cambio de dirección bajista.
- Opcionalmente colorea las velas según la dirección actual.
EMA CLOUD
- Agrega una nube de EMA de 12 periodos y 26 periodos.
- Rellena la nube en verde cuando la EMA 12 esté por encima de la EMA 26.
- Rellena en rojo cuando la EMA 12 esté por debajo de la EMA 26.
- Trata la nube de EMA como contexto de momentum; no debe alterar el cálculo del cambio de dirección del ATR.
- Incluye una entrada para ocultar la nube de EMA.
REQUISITOS TÉCNICOS
- Usa cierres de velas confirmados.
- No repintes (repaint).
- No uses información futura ni look-ahead.
- Preserva el nivel de seguimiento mediante lógica de variable recursiva.
- Agrega reglas alertcondition() para cambios de dirección alcistas y bajistas.
- Incluye interruptores para marcadores, colores de velas, nivel de seguimiento y nube de EMA.
- No crees órdenes de estrategia, una tabla de resultados, cálculos de P&L ni recomendaciones financieras.
- Organiza y comenta el código claramente.
Proporciona:
1. Código completo de Pine Script v5.
2. Explicación en lenguaje sencillo de ATR y el mecanismo de carril (ratcheting).
3. Una descripción de las condiciones que crean cada marcador.
4. Lista de verificación de no repintado (non-repainting) para una operación corta.
CÓDIGO
//@version=6
indicator("JW V5.2", overlay=true)
// ── Entradas ──────────────────────────────────────────
atrPeriod = input.int(10, "Periodo de ATR")
keyValue = input.float(1.9, "Valor clave / Multiplicador ATR", step=0.1)
warnZoneATR = input.float(0.25, "Zona de advertencia (x ATR)", step=0.05)
cloudSmooth = input.int(3, "Suavidad de la nube", minval=1, tooltip="Suaviza únicamente la banda trazada — no afecta el timing de la señal")
src = close
// ── ATR trailing stop núcleo — crudo, impulsa todo lo real ──
xATR = ta.atr(atrPeriod)
nLoss = keyValue * xATR
var float trailStop = 0.0
trailStop := src > nz(trailStop[1], 0) and src[1] > nz(trailStop[1], 0) ? math.max(nz(trailStop[1]), src - nLoss) :
src < nz(trailStop[1], 0) and src[1] < nz(trailStop[1], 0) ? math.min(nz(trailStop[1]), src + nLoss) :
src > nz(trailStop[1], 0) ? src - nLoss : src + nLoss
var int pos = 0
pos := src[1] < nz(trailStop[1], 0) and src > nz(trailStop[1], 0) ? 1 :
src[1] > nz(trailStop[1], 0) and src < nz(trailStop[1], 0) ? -1 : nz(pos[1], 0)
trendColor = pos == 1 ? color.new(color.green, 0) : pos == -1 ? color.new(color.red, 0) : color.gray
// ── Nube — visualmente suavizada para fluidez, solo estética ──
plotSrc = ta.ema(src, cloudSmooth)
plotStop = ta.ema(trailStop, cloudSmooth)
pricePlot = plot(plotSrc, title="Precio (suavizado)", color=trendColor, linewidth=1)
stopPlot = plot(plotStop, title="Trail Stop (suavizado)", color=trendColor, linewidth=1)
fill(pricePlot, stopPlot, color=color.new(trendColor, 75), title="Nube de tendencia")
// ── Señales — impulsadas por valores crudos, sin afectarse por el suavizado ──
buySignal = pos == 1 and pos[1] == -1
sellSignal = pos == -1 and pos[1] == 1
plotshape(buySignal, title="Buy", text="buy", style=shape.triangleup, location=location.belowbar, color=color.green, textcolor=color.white, size=size.small)
plotshape(sellSignal, title="Sell", text="sell", style=shape.triangledown, location=location.abovebar, color=color.red, textcolor=color.white, size=size.small)
alertcondition(buySignal, "Señal de compra", "ATR Trail cambió a alcista")
alertcondition(sellSignal, "Señal de venta", "ATR Trail cambió a bajista")
// ── Proximidad al cambio — brecha cruda, igual que la matemática de la señal ──
gapATR = pos == 1 ? (src - trailStop) / xATR : (trailStop - src) / xATR
pctToFlip = math.max(0, math.min(100, 100 * (1 - gapATR / keyValue)))
dirText = pos == 1 ? "LARGO" : pos == -1 ? "CORTO" : "PLANO"
nearFlip = gapATR <= warnZoneATR
labelColor = nearFlip ? color.new(color.orange, 0) : trendColor
labelText = dirText + " — " + str.tostring(gapATR, "#.##") + " ATR para cambiar (" + str.tostring(pctToFlip, "#") + "%)"
var label proximityLabel = na
if barstate.islast
label.delete(proximityLabel)
proximityLabel := label.new(bar_index + 2, src, labelText, style=label.style_label_left, color=labelColor, textcolor=color.white, size=size.normal)

