Crear indicador TAMA

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #241931 quote
    repropel
    Participant
    New

    Hola,

    He visto recientemente que se ha publicado en la revista IFTA del 2025 un articulo en el que hacen referencia a un indicador llamado TAMA (Trend Adaptive Moving Averages). Este indicador resuelve los problemas que tienen las medias móviles cuando hay tendencias. Dejo el articulo en pdf adjuntado y un enlace al indicador que esta disponible para MT5.
    Quería saber si alguien cree que es posible hacer este indicador en ProRealtime.

    Gracias.

    https://www.mql5.com/en/market/product/88759?source=External#description

    #241974 quote
    Iván González
    Moderator
    Master

    Buenas! Me he aventurado a programar algo.
    Resumo aquí el indicador:
    Tres Modos de Cálculo:
    Modo 0: TAMA básica con promedio simple de regresiones.
    Modo 1: TAMA ponderada, usando una ponderación lineal para dar más peso a las regresiones recientes.
    Modo 2: TAMA basada en cuantiles, donde el valor final se selecciona según el cuantil definido por el usuario.

    // 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"
Viewing 2 posts - 1 through 2 (of 2 total)
  • You must be logged in to reply to this topic.

Crear indicador TAMA


ProBuilder: Indicadores y Herramientas

New Reply
Author
author-avatar
repropel @repropel Participant
Summary

This topic contains 1 reply,
has 2 voices, and was last updated by Iván González
1 year, 1 month ago.

Topic Details
Forum: ProBuilder: Indicadores y Herramientas
Language: Spanish
Started: 12/30/2024
Status: Active
Attachments: 1 files
Logo Logo
Loading...