// Configuración de parámetros
Per = 20 // Período de la media móvil
MaType = 0 // Tipo de media móvil base (0=SMA, 1=EMA, etc.)
aggFunc = 0.5 // Cuantil usado para la agregación (0=min, 1=max, 0.5=mediana)
mode = 0// Modo de cálculo: 0=Básica, 1=Ponderada, 2=Cuantiles
// Cálculo de la media móvil base
baseMA = average[Per, MaType](close)
// Inicialización de variables
trendAdjustedMA = 0 // Valor ajustado
$regressionArray[0] = 0 // Array para almacenar resultados de regresiones
// Cálculo de las regresiones
FOR i = 1 TO Per DO
regressionEstimate = LinearRegression[i](close) // Regresión para cada subconjunto
$regressionArray[i] = regressionEstimate // Almacenamos en el array
NEXT
// Modo 0: TAMA básica
IF mode = 0 THEN
// Cálculo de las regresiones y estimaciones
regressionSum = 0 // Suma de las regresiones
regressionCount = 0 // Número de regresiones realizadas
FOR i = 1 TO Per DO
// Regresión lineal para cada subconjunto de la ventana
regressionEstimate = LinearRegression[i](close)
regressionSum = regressionSum + regressionEstimate
regressionCount = regressionCount + 1
NEXT
// Promedio de las estimaciones
IF regressionCount > 0 THEN
trendAdjustedMA = regressionSum / regressionCount
ELSE
trendAdjustedMA = baseMA // En caso de error, usar la media móvil base
ENDIF
// Modo 1: TAMA ponderada linealmente
ELSIF mode = 1 THEN
regressionSum = 0
weightSum = 0
FOR i = 1 TO Per DO
weight = i / (Per * (Per + 1) / 2) // Peso lineal
regressionSum = regressionSum + ($regressionArray[i] * weight)
weightSum = weightSum + weight
NEXT
IF weightSum > 0 THEN
trendAdjustedMA = regressionSum / weightSum
ELSE
trendAdjustedMA = baseMA // Respaldo en caso de error
ENDIF
// Modo 2: TAMA basada en cuantiles
ELSIF mode = 2 THEN
ArraySort($regressionArray, ASCEND) // Ordenar los valores
IF IsSet($regressionArray[Per]) THEN
cuantilIndex = FLOOR(aggFunc * (Per - 1)) + 1 // Índice del cuantil
trendAdjustedMA = $regressionArray[cuantilIndex]
ELSE
trendAdjustedMA = baseMA // Respaldo en caso de error
ENDIF
ENDIF
// Devolución de resultados
RETURN baseMA COLOURED("blue") AS "Media Base", trendAdjustedMA COLOURED("red") AS "TAMA"