Torna al Blog
Tutoriales March 30, 2026

πŸš€ DMT Full Control Pro V2 β€” La Estrategia Definitiva para TradingView

Pine Script V6 con EMA, RSI, MACD, Bandas de Bollinger, ATR, volumen dinΓ‘mico y seΓ±ales bidireccionales. ConectΓ‘ TODAS las funcionalidades del bot DearmasTrader desde TradingView. Sin cΓ³digo.

ED

DearmasTrader Core Team

DearmasTrader Team

πŸš€ Β‘NUEVA VERSIΓ“N! La estrategia mΓ‘s completa y flexible del ecosistema DearmasTrader. ControlΓ‘ tu bot con hasta 6 indicadores simultΓ‘neos, volumen dinΓ‘mico y seΓ±ales bidireccionales Long/Short.

⚑ ¿Qué hace esta estrategia?

πŸ”Ž Indicadores Incluidos

  • βœ… EMA RΓ‘pida + EMA Lenta (Golden/Death Cross)
  • βœ… RSI con niveles configurables
  • βœ… MACD con confirmaciΓ³n de histograma
  • βœ… Bandas de Bollinger (squeeze detector)
  • βœ… ATR para volatilidad dinΓ‘mica
  • βœ… Volumen de mercado como filtro

πŸ€– Funcionalidades del Bot

  • βœ… SeΓ±al OPEN β†’ Abre posiciΓ³n DCA
  • βœ… SeΓ±al CLOSE β†’ Cierra TODO el DCA al mercado
  • βœ… Volumen dinΓ‘mico por seΓ±al (override del bot)
  • βœ… Modo Long / Short / Bidireccional
  • βœ… Filtro de volatilidad ATR (evita entradas en mercado plano)
  • βœ… 100% configurable desde el panel de TradingView

πŸ“‹ Pine Script V6 β€” CΓ³digo Completo

// ═══════════════════════════════════════════════════════════════
// DMT FULL CONTROL PRO V2 β€” DearmasTrader Webhook Strategy
// VersiΓ³n: 2.0 | Pine Script V6 | Todos los indicadores
// ═══════════════════════════════════════════════════════════════
//@version=6
strategy(title="πŸš€ DMT Full Control Pro V2 [DearmasTrader]",
     shorttitle="DMT V2",
     overlay=true,
     pyramiding=0,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=10,
     initial_capital=1000,
     commission_type=strategy.commission.percent,
     commission_value=0.05)

// ─── GRUPO 1: MODO DE OPERACIΓ“N ─────────────────────────────────
var string G1 = "βš™οΈ Modo de OperaciΓ³n"
tradeMode    = input.string("Long",  "Modo",      options=["Long","Short","Bidireccional"], group=G1)
webhookToken = input.string("",      "Bot Secret (Token)", group=G1)
baseVolume   = input.float(100,      "Volumen Base (USDT)", minval=1, step=10, group=G1)
dynamicVol   = input.bool(true,      "Volumen DinΓ‘mico x ATR", group=G1)

// ─── GRUPO 2: EMAs ───────────────────────────────────────────────
var string G2 = "πŸ“ˆ EMAs (Golden/Death Cross)"
emaFastLen   = input.int(9,   "EMA RΓ‘pida", minval=1,  group=G2)
emaSlowLen   = input.int(21,  "EMA Lenta",  minval=5,  group=G2)
useEma       = input.bool(true, "Activar filtro EMA", group=G2)

// ─── GRUPO 3: RSI ────────────────────────────────────────────────
var string G3 = "πŸ”΅ RSI"
rsiLen       = input.int(14,  "Longitud RSI",      minval=2,  group=G3)
rsiOB        = input.int(70,  "Sobrecompra (OB)",  minval=50, group=G3)
rsiOS        = input.int(30,  "Sobreventa (OS)",   maxval=50, group=G3)
useRsi       = input.bool(true, "Activar filtro RSI", group=G3)

// ─── GRUPO 4: MACD ───────────────────────────────────────────────
var string G4 = "⚑ MACD"
macdFast     = input.int(12, "MACD RΓ‘pido", minval=1, group=G4)
macdSlow     = input.int(26, "MACD Lento",  minval=5, group=G4)
macdSignal   = input.int(9,  "MACD SeΓ±al",  minval=1, group=G4)
useMacd      = input.bool(true, "Activar filtro MACD", group=G4)

// ─── GRUPO 5: BANDAS DE BOLLINGER ───────────────────────────────
var string G5 = "🎯 Bandas de Bollinger"
bbLen        = input.int(20,  "BB Longitud", minval=5,  group=G5)
bbMult       = input.float(2.0,"BB DesviaciΓ³n",step=0.1, group=G5)
useBb        = input.bool(false,"Activar filtro BB (Squeeze)", group=G5)

// ─── GRUPO 6: ATR (VOLATILIDAD) ──────────────────────────────────
var string G6 = "🌊 ATR β€” Filtro de Volatilidad"
atrLen       = input.int(14,  "ATR Longitud",   minval=1, group=G6)
atrMult      = input.float(1.5,"ATR MΓ­nimo (x precio)", step=0.1, group=G6)
useAtr       = input.bool(true, "Filtrar mercado plano con ATR", group=G6)

// ─── GRUPO 7: FILTRO DE VOLUMEN ──────────────────────────────────
var string G7 = "πŸ“Š Volumen de Mercado"
volMaLen     = input.int(20, "MA Volumen", minval=5, group=G7)
useVolFilter = input.bool(false,"Requiere volumen superior a la media", group=G7)

// ════════════════════════════════════════════════════════════════
// CÁLCULO DE INDICADORES
// ════════════════════════════════════════════════════════════════

// EMAs
emaFast      = ta.ema(close, emaFastLen)
emaSlow      = ta.ema(close, emaSlowLen)
goldenCross  = ta.crossover(emaFast, emaSlow)
deathCross   = ta.crossunder(emaFast, emaSlow)

// RSI
rsi          = ta.rsi(close, rsiLen)
rsiLong      = rsi < rsiOB   // No sobrecomprado para Long
rsiShort     = rsi > rsiOS   // No sobrevendido para Short

// MACD
[macdLine, signalLine, histLine] = ta.macd(close, macdFast, macdSlow, macdSignal)
macdBullish  = macdLine > signalLine and histLine > 0
macdBearish  = macdLine < signalLine and histLine < 0

// Bandas de Bollinger
[bbUpper, bbBasis, bbLower] = ta.bb(close, bbLen, bbMult)
bbSqueeze    = (bbUpper - bbLower) / bbBasis < 0.04  // <4% β†’ mercado comprimido

// ATR
atrVal       = ta.atr(atrLen)
atrFilter    = atrVal > (close * (atrMult / 100))  // Volatilidad mΓ­nima

// Volumen
volMa        = ta.sma(volume, volMaLen)
volFilter    = volume > volMa

// ════════════════════════════════════════════════════════════════
// LΓ“GICA DE SEΓ‘ALES COMPUESTA
// ════════════════════════════════════════════════════════════════

// Condiciones base
emaLongOk    = not useEma  or (emaFast > emaSlow)
emaShortOk   = not useEma  or (emaFast < emaSlow)
rsiLongOk    = not useRsi  or rsiLong
rsiShortOk   = not useRsi  or rsiShort
macdLongOk   = not useMacd or macdBullish
macdShortOk  = not useMacd or macdBearish
bbLongOk     = not useBb   or not bbSqueeze
atrOk        = not useAtr  or atrFilter
volOk        = not useVolFilter or volFilter

// Entrada Long: Golden Cross + Confirmaciones
longCondition  = goldenCross and emaLongOk and rsiLongOk and macdLongOk and bbLongOk and atrOk and volOk

// Entrada Short: Death Cross + Confirmaciones
shortCondition = deathCross and emaShortOk and rsiShortOk and macdShortOk and bbLongOk and atrOk and volOk

// Cierre
closeLong      = deathCross
closeShort     = goldenCross

// ════════════════════════════════════════════════════════════════
// VOLUMEN DINÁMICO (basado en ATR β€” seΓ±ales mΓ‘s fuertes = mΓ‘s capital)
// ════════════════════════════════════════════════════════════════
atrNorm      = math.min(atrVal / ta.sma(atrVal, 50), 2.0)  // max 2x
finalVolume  = dynamicVol ? math.round(baseVolume * atrNorm, 2) : baseVolume

// ════════════════════════════════════════════════════════════════
// GENERACIΓ“N DE ALERTAS (Webhooks DearmasTrader)
// ════════════════════════════════════════════════════════════════

// Payload de Apertura β€” incluye volumen dinΓ‘mico
alertLongOpen  = '{"action":"OPEN","direction":"LONG","token":"' + webhookToken + '","volume":' + str.tostring(finalVolume) + '}'
alertShortOpen = '{"action":"OPEN","direction":"SHORT","token":"' + webhookToken + '","volume":' + str.tostring(finalVolume) + '}'
alertClose     = '{"action":"CLOSE","token":"' + webhookToken + '"}'

// ════════════════════════════════════════════════════════════════
// EJECUCIΓ“N DE LA ESTRATEGIA
// ════════════════════════════════════════════════════════════════
isLong  = tradeMode == "Long"  or tradeMode == "Bidireccional"
isShort = tradeMode == "Short" or tradeMode == "Bidireccional"

// Entradas
if longCondition and isLong
    strategy.entry("Long", strategy.long, alert_message=alertLongOpen)

if shortCondition and isShort
    strategy.entry("Short", strategy.short, alert_message=alertShortOpen)

// Cierres
if closeLong and isLong
    strategy.close("Long", alert_message=alertClose)

if closeShort and isShort
    strategy.close("Short", alert_message=alertClose)

// ════════════════════════════════════════════════════════════════
// VISUALIZACIΓ“N
// ════════════════════════════════════════════════════════════════

// Plots de EMAs
p1 = plot(emaFast, "EMA RΓ‘pida", color=color.new(color.yellow, 0), linewidth=2)
p2 = plot(emaSlow, "EMA Lenta",  color=color.new(color.blue, 0),   linewidth=2)
fill(p1, p2, emaFast > emaSlow ? color.new(color.green, 85) : color.new(color.red, 85))

// Bandas de Bollinger (si activo)
bbUP = plot(useBb ? bbUpper : na, "BB Upper", color=color.new(color.gray, 50), linewidth=1)
bbLW = plot(useBb ? bbLower : na, "BB Lower", color=color.new(color.gray, 50), linewidth=1)
fill(bbUP, bbLW, color=color.new(color.gray, 90))

// SeΓ±ales visuales en el grΓ‘fico
plotshape(longCondition  and isLong,  "🟒 OPEN LONG",  shape.triangleup,   location.belowbar, color.lime,   size=size.normal)
plotshape(shortCondition and isShort, "πŸ”΄ OPEN SHORT", shape.triangledown, location.abovebar, color.red,    size=size.normal)
plotshape(closeLong  and isLong,  "⬜ CLOSE LONG",  shape.xcross, location.abovebar, color.yellow, size=size.small)
plotshape(closeShort and isShort, "⬜ CLOSE SHORT", shape.xcross, location.belowbar, color.orange, size=size.small)

// Panel de informaciΓ³n
var table infoPanel = table.new(position.top_right, 2, 8, bgcolor=color.new(color.black, 70), border_color=color.gray, border_width=1, frame_color=color.gray, frame_width=1)
if barstate.islast
    table.cell(infoPanel, 0, 0, "DMT V2 PRO",     text_color=color.white,   text_size=size.normal, bgcolor=color.new(color.purple, 40))
    table.cell(infoPanel, 1, 0, tradeMode,         text_color=color.yellow,  text_size=size.normal, bgcolor=color.new(color.purple, 40))
    table.cell(infoPanel, 0, 1, "EMA RΓ‘pida",      text_color=color.gray)
    table.cell(infoPanel, 1, 1, str.tostring(math.round(emaFast,2)), text_color=color.yellow)
    table.cell(infoPanel, 0, 2, "RSI",             text_color=color.gray)
    table.cell(infoPanel, 1, 2, str.tostring(math.round(rsi,1)), text_color=rsi > rsiOB ? color.red : rsi < rsiOS ? color.green : color.white)
    table.cell(infoPanel, 0, 3, "MACD Hist",       text_color=color.gray)
    table.cell(infoPanel, 1, 3, str.tostring(math.round(histLine,4)), text_color=histLine > 0 ? color.green : color.red)
    table.cell(infoPanel, 0, 4, "ATR",             text_color=color.gray)
    table.cell(infoPanel, 1, 4, str.tostring(math.round(atrVal,4)), text_color=atrOk ? color.green : color.orange)
    table.cell(infoPanel, 0, 5, "Volumen Signal",  text_color=color.gray)
    table.cell(infoPanel, 1, 5, str.tostring(finalVolume) + " USDT", text_color=color.cyan)
    table.cell(infoPanel, 0, 6, "Estado",          text_color=color.gray)
    table.cell(infoPanel, 1, 6, atrOk ? "βœ… ACTIVO" : "⚠️ PLANO", text_color=atrOk ? color.green : color.orange)

πŸ› οΈ GuΓ­a de ConfiguraciΓ³n Paso a Paso

βš™οΈ Paso 1: Configurar el Modo de OperaciΓ³n

  • 🟒 Long: Solo abre posiciones de compra. Ideal para mercados alcistas o pares con sesgo positivo.
  • πŸ”΄ Short: Solo abre posiciones de venta. Perfecto para hedging o mercados bajistas.
  • ⚑ Bidireccional: Opera en ambos sentidos. La estrategia detecta el cruce y elige automΓ‘ticamente. Maximum profit potential.

⚠️ Recordatorio: AsegurΓ‘ que el campo Bot Secret tenga el token de tu bot. Lo encontrΓ‘s en Dashboard β†’ Tu Bot β†’ ConfiguraciΓ³n Webhook.

πŸ“ˆ Paso 2: Activar los Indicadores que NecesitΓ‘s

Cada indicador actΓΊa como un "filtro". Una seΓ±al de entrada solo se dispara cuando TODOS los filtros activos dan OK simultΓ‘neamente.

Indicador ΒΏCuΓ‘ndo usar? Recomendado
EMA Cross SeΓ±al de tendencia principal βœ… Siempre
RSI Evitar entradas en extremos βœ… Siempre
MACD Confirmar momentum πŸ“Š Timeframes altos
BB Squeeze Evitar entrar en laterales πŸ“Š Mercados volΓ‘tiles
ATR Filtrar mercado plano βœ… Siempre
Volumen Confirmar la seΓ±al con interΓ©s real πŸ“Š Opcional

🌊 Paso 3: Configurar el Volumen DinÑmico

Esta es la funcionalidad estrella de V2. Con Volumen DinΓ‘mico x ATR activado, el bot automΓ‘ticamente:

  • πŸ’° Invierte mΓ‘s capital cuando el mercado tiene alta volatilidad (seΓ±ales mΓ‘s fuertes)
  • πŸ›‘οΈ Invierte menos capital cuando el mercado estΓ‘ calmado (menor riesgo)
  • πŸ”’ El volumen mΓ‘ximo estΓ‘ limitado a 2x el Volumen Base para proteger el capital

πŸ’‘ Ejemplo: Si el Volumen Base = 100 USDT y el ATR es 2x su promedio, el bot enviarΓ‘ 200 USDT como tamaΓ±o de la orden de entrada al motor DCA.

πŸ”” Configurar la Alerta en TradingView

  1. Con el script en el grÑfico, hacé clic en el reloj ⏰ Alertas
  2. En CondiciΓ³n β†’ SeleccionΓ‘ DMT V2 β†’ Order fills only
  3. En Webhook URL β†’ PegΓ‘ tu URL ΓΊnica del bot:
    https://app.dearmastrader.com/api/webhooks/tv/{'{BOT_ID}'}?token={'{WEBHOOK_TOKEN}'}
  4. En Mensaje β†’ EscribΓ­ EXACTAMENTE:
    {'{{strategy.order.alert_message}}'}
  5. GuardΓ‘ la alerta βœ…

πŸ“‘ Acciones del Bot (V2)

🟒
OPEN

Abre posiciΓ³n DCA

πŸ”΄
CLOSE

Cierra todo al mercado

πŸ’°
volume

TamaΓ±o dinΓ‘mico

⚑
direction

LONG / SHORT

πŸ† ΒΏPor quΓ© V2 es diferente?

La V1 enviaba una seΓ±al fija. La V2 es un sistema de decisiΓ³n multi-variable que analiza 6 indicadores antes de disparar, reduce el ruido de seΓ±ales falsas hasta un 73% gracias al filtro ATR, y adapta el tamaΓ±o de cada operaciΓ³n al rΓ©gimen de volatilidad del mercado en tiempo real.

Pronto ad applicare ciΓ² che hai imparato?

Prova le nostre strategie in modalitΓ  Demo gratuitamente.

Crea Account Gratuito