Explorando el Indicador KAMA en Lua
El indicador KAMA (Kaufman’s Adaptive Moving Average) es una herramienta de análisis técnico diseñada para adaptarse a la volatilidad del mercado y filtrar el ruido de los precios. A continuación, desglosamos un script en Lua que implementa el indicador KAMA, explicando cada parte del código para ayudarte a comprender su funcionamiento.
Introducción al Script
El script comienza definiendo el instrumento y algunas propiedades básicas:
instrument { name = "KAMA", overlay = true }
Aquí se define el nombre del indicador y se especifica que debe superponerse al gráfico de precios.
Configuración de los Parámetros
El script define varios parámetros necesarios para el cálculo del indicador KAMA. Estos parámetros se configuran utilizando la función input
:
local length = input (21, "front.period", input.integer, 1 , 250)
local fastMA = input (4, "front.platform.fast period", input.integer, 1, 250)
local slowMA = input (30, "front.platform.slow period", input.integer, 1, 250)
local source = input (1, "front.ind.source", input.string_selection, inputs.titles_overlay)
length
: El periodo de tiempo utilizado para el cálculo del KAMA (por defecto 21, con un rango de 1 a 250).fastMA
: El periodo de la media móvil rápida (por defecto 4, con un rango de 1 a 250).slowMA
: El periodo de la media móvil lenta (por defecto 30, con un rango de 1 a 250).source
: La fuente de datos para el cálculo del indicador (por defecto 1, seleccionable de una lista de fuentes).
Configuración de la Línea del Indicador
El script permite configurar la apariencia de la línea del indicador KAMA:
input_group {
"front.ind.dpo.generalline",
color = input { default = "#57A1D0", type = input.color },
width = input { default = 1, type = input.line_width }
}
color
: El color de la línea del indicador (por defecto azul claro).width
: El grosor de la línea (por defecto 1).
Fuente de Datos
El script obtiene la serie de datos de la fuente seleccionada:
local source_series = inputs[source]
Cálculo del Indicador KAMA
El cálculo del KAMA implica varios pasos intermedios:
Cambio Absoluto
change = abs(source_series - source_series[length - 1])
change
: Calcula la diferencia absoluta entre el valor actual y el valorlength
periodos atrás.
Volatilidad
volatility = sum(abs(source_series - source_series[1]), length)
volatility
: Calcula la suma de las diferencias absolutas entre cada valor en el periodo especificado.
Eficiencia Relativa (ER)
local er = 0
if nz(volatility[0]) ~= 0 then
er = nz(change[0]) / nz(volatility[0])
end
er
: Calcula la eficiencia relativa dividiendochange
entrevolatility
, sivolatility
no es cero.
Constantes de Suavizado
local fastSC = 2 / (fastMA + 1)
local slowSC = 2 / (slowMA + 1)
local sc = (er * (fastSC - slowSC) + slowSC) ^ 2
fastSC
: Constante de suavizado rápida.slowSC
: Constante de suavizado lenta.sc
: Constante de suavizado adaptativa basada en la eficiencia relativa.
Cálculo del KAMA
kama = sc * source_series + (1 - sc) * nz(kama[1], source_series[0])
kama
: Calcula el valor del KAMA utilizando la constante de suavizado adaptativa y la serie de datos.
Plotting
Finalmente, el script dibuja el indicador KAMA en el gráfico:
plot(kama, "KAMA", color, width)
plot
: Función que dibuja el indicador en el gráfico con el nombre “KAMA”, el color y el grosor especificados.
Conclusión
Este script en Lua configura y dibuja el indicador KAMA en un gráfico de precios, permitiendo personalizar los parámetros del periodo, la media móvil rápida y lenta, la fuente de datos, el color y el grosor de la línea. El KAMA es un indicador poderoso para suavizar datos y adaptarse a la volatilidad del mercado, proporcionando una visión clara de las tendencias mientras filtra el ruido del precio. Este script ofrece flexibilidad para ajustarse a diversas estrategias de trading.
instrument { name = "KAMA", overlay = true }
local length = input (21, "front.period", input.integer, 1 , 250 )
local fastMA = input (4, "front.platform.fast period", input.integer, 1, 250)
local slowMA = input (30, "front.platform.slow period", input.integer, 1, 250)
local source = input (1, "front.ind.source", input.string_selection, inputs.titles_overlay)
input_group {
"front.ind.dpo.generalline",
color = input { default = "#57A1D0", type = input.color },
width = input { default = 1, type = input.line_width}
}
local source_series = inputs [source]
change = abs (source_series - source_series[length - 1])
volatility = sum (abs(source_series - source_series[1]), length)
local er = 0
if nz (volatility [0]) ~= 0 then
er = nz (change [0]) / nz (volatility [0])
end
local fastSC = 2 / (fastMA + 1)
local slowSC = 2 / (slowMA + 1)
local sc = (er * (fastSC - slowSC) + slowSC) ^ 2
kama = sc * source_series + (1 - sc) * nz(kama [1], source_series [0])
plot (kama, "KAMA", color, width)