Script Indicador Weis Wave Volume (WWV)

Script Indicador Weis Wave Volume (WWV)

El Weis Wave Volume (WWV) es un indicador técnico desarrollado para analizar la fuerza de las tendencias en el mercado mediante el volumen de las ondas de precios. Este indicador combina los conceptos de la teoría de ondas de precios con el volumen de negociación, proporcionando una visión clara de la acumulación y distribución en el mercado. A continuación, se explica cada bloque del script y su funcionamiento.

Definición del Instrumento

El script comienza definiendo el nombre y el nombre corto del indicador.

luaCopiar códigoinstrument { name = "Weis Wave Volume", short_name = "WWV" }
  • name: Nombre completo del indicador, «Weis Wave Volume».
  • short_name: Nombre corto del indicador, «WWV».

Configuración de Parámetros de Entrada

Se definen los parámetros de entrada que permiten personalizar el indicador según las necesidades del usuario.

luaCopiar códigolocal method        = input(1, "Renko Assignment Method", input.string_selection, { "ATR", "Traditional", "Part of Price" })
local methodvalue   = input(2, "Value", input.double, 0)
local pricesource   = input(1, "Price Source", input.string_selection, { "Close", "Open / Close", "High / Low" })

local useTrueRange  = input(2, "Use True Range instead of Volume", input.string_selection, { "Always", "Auto", "Never" })
local isOscillating = input(false, "Oscillating", input.boolean)
local normalize     = input(false, "Normalize", input.boolean)
  • method: Método de asignación de Renko (ATR, Traditional, Part of Price).
  • methodvalue: Valor utilizado según el método de asignación.
  • pricesource: Fuente de precios utilizada (Close, Open / Close, High / Low).
  • useTrueRange: Usar el rango verdadero en lugar del volumen (Always, Auto, Never).
  • isOscillating: Modo oscilante (booleano).
  • normalize: Normalizar el volumen (booleano).

Configuración de Colores de las Barras

Se definen los colores de las barras de acuerdo a la dirección del movimiento de precios.

luaCopiar códigoinput_group {
    "front.newind.barcolors",
    up_color   = input { default = "#2CAC40", type = input.color },
    down_color = input { default = "#DB4931", type = input.color }
}
  • up_color: Color de la barra en tendencia alcista.
  • down_color: Color de la barra en tendencia bajista.

Cálculo de las Fuentes de Precios

Se determinan las fuentes de precios según la selección del usuario.

luaCopiar códigolocal useClose = pricesource == 1
local useOpenClose = pricesource == 2 or useClose

local inp_vol = iff (useTrueRange == 1 or (useTrueRange == 2 and na(volume)), tr, volume)
local op = iff (useClose, close, open)
local hi = iff (useOpenClose, iff (close >= op, close, op), high)
local lo = iff (useOpenClose, iff (close <= op, close, op), low)
  • useClose: Utilizar el cierre como fuente de precios.
  • useOpenClose: Utilizar el cierre o la combinación de apertura/cierre.
  • inp_vol: Determinar si se usa el rango verdadero o el volumen.
  • op, hi, lo: Cálculo de precios de apertura, máximos y mínimos según la selección del usuario.

Ajuste del Método de Asignación

Se ajusta el valor del método de asignación seleccionado.

luaCopiar códigoif method == 1 then
    methodvalue = rma(tr, round(methodvalue))
elseif method == 3 then
    methodvalue = close / methodvalue
end
  • ATR: Utiliza el rango medio verdadero (ATR) ajustado.
  • Part of Price: Calcula el valor basado en el precio de cierre.

Cálculo del Cierre Actual y la Dirección

Se calcula el cierre actual y la dirección del movimiento de precios.

luaCopiar códigoprevclose = nz(currclose[1])
prevhigh = prevclose + methodvalue
prevlow = prevclose - methodvalue
currclose = iff (hi > prevhigh, hi, iff (lo < prevlow, lo, prevclose))

direction = iff (currclose > prevclose, 1, iff (currclose < prevclose, -1, nz(direction[1])))
  • prevclose: Cierre previo.
  • prevhigh, prevlow: Máximos y mínimos previos ajustados.
  • currclose: Cierre actual ajustado.
  • direction: Determina la dirección del movimiento de precios.

Detección del Cambio de Dirección

Se detecta si hubo un cambio en la dirección del movimiento de precios.

luaCopiar códigolocal directionHasChanged = direction ~= direction [1]

local directionIsUp = direction > 0
local directionIsDown = direction < 0
  • directionHasChanged: Verifica si la dirección ha cambiado.
  • directionIsUp, directionIsDown: Determina si la dirección es alcista o bajista.

Cálculo del Volumen de Ondas

Se calcula el volumen de las ondas de precios.

luaCopiar códigobarcount = nz (iff (not directionHasChanged and normalize, barcount[1] + 1, 1), 1)
vol = iff (not directionHasChanged, nz (vol [1]) + inp_vol, inp_vol)

res = vol / barcount
  • barcount: Cuenta de barras en la misma dirección.
  • vol: Acumulación de volumen.
  • res: Volumen normalizado.

Representación Visual

Se representa visualmente el volumen de las ondas en el gráfico.

luaCopiar códigorect (
    0, iff (isOscillating and directionIsDown, -res, res),
    "",
    directionIsUp and up_color or down_color,
    0.6
)
  • rect: Dibuja un rectángulo que representa el volumen de la onda con el color correspondiente a la dirección del movimiento de precios.

Conclusión

El Weis Wave Volume (WWV) es una herramienta poderosa que combina el análisis del volumen con las ondas de precios para proporcionar una visión clara de la acumulación y distribución en el mercado. Este indicador es útil para identificar la fuerza de las tendencias y posibles puntos de reversión en el mercado. Al ajustar los parámetros de entrada, los traders pueden personalizar el indicador para que se adapte mejor a sus estrategias de trading.

Script Completo

instrument { name = "Weis Wave Volume", short_name = "WWV" }

local method = input(1, "Renko Assignment Method", input.string_selection, { "ATR", "Traditional", "Part of Price" })
local methodvalue = input(2, "Value", input.double, 0)
local pricesource = input(1, "Price Source", input.string_selection, { "Close", "Open / Close", "High / Low" })

local useTrueRange = input(2, "Use True Range instead of Volume", input.string_selection, { "Always", "Auto", "Never" })
local isOscillating = input(false, "Oscillating", input.boolean)
local normalize = input(false, "Normalize", input.boolean)

input_group {
"front.newind.barcolors",
up_color = input { default = "#2CAC40", type = input.color },
down_color = input { default = "#DB4931", type = input.color }
}

local useClose = pricesource == 1
local useOpenClose = pricesource == 2 or useClose

local inp_vol = iff (useTrueRange == 1 or (useTrueRange == 2 and na(volume)), tr, volume)
local op = iff (useClose, close, open)
local hi = iff (useOpenClose, iff (close >= op, close, op), high)
local lo = iff (useOpenClose, iff (close <= op, close, op), low)

if method == 1 then
methodvalue = rma(tr, round(methodvalue))
elseif method == 3 then
methodvalue = close / methodvalue
end

prevclose = nz(currclose[1])
prevhigh = prevclose + methodvalue
prevlow = prevclose - methodvalue
currclose = iff (hi > prevhigh, hi, iff (lo < prevlow, lo, prevclose))

direction = iff (currclose > prevclose, 1, iff (currclose < prevclose, -1, nz(direction[1])))

local directionHasChanged = direction ~= direction [1]

local directionIsUp = direction > 0
local directionIsDown = direction < 0

barcount = nz (iff (not directionHasChanged and normalize, barcount[1] + 1, 1), 1)
vol = iff (not directionHasChanged, nz (vol [1]) + inp_vol, inp_vol)

res = vol / barcount

rect (
0, iff (isOscillating and directionIsDown, -res, res),
"",
directionIsUp and up_color or down_color,
0.6
)

Carrito de compra
Scroll al inicio
Telegram