Estrategia de seguimiento de tendencias de media móvil de Kaufman dinámica y adaptativa


Fecha de creación: 2024-02-26 16:36:30 Última modificación: 2024-02-26 16:36:30
Copiar: 0 Número de Visitas: 666
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias de media móvil de Kaufman dinámica y adaptativa

Descripción general

La estrategia se basa en el diseño de Kaufman Adaptive Moving Average (KAMA) para ajustar dinámicamente las posiciones de negociación y seguir automáticamente las tendencias del mercado. Las principales funciones de la estrategia incluyen:

  1. Calculación dinámica de la longitud de paso de las transacciones (en puntos), adaptación a la volatilidad del mercado
  2. Genera señales de compra y venta según la dirección KAMA
  3. Una vez producida la señal, se establece una distancia de parada y se ajusta a medida que el precio se mueve
  4. Opcional para esperar la señal de confirmación de cierre de la línea K y filtrar la señal falsa

Mediante el uso de estas funciones, la estrategia trata de obtener beneficios adicionales de la tendencia, mientras controla el riesgo.

Principio de estrategia

La estrategia se basa en el trabajo de Kaufman en el indicador de la Adaptación a la Media Móvil. KAMA ajusta dinámicamente el peso y la suavidad de la media mediante el cálculo de los ratios de la dinámica y la volatilidad de los precios, para responder más rápidamente a los cambios en los precios.

Cuando el KAMA cruza la línea de parada descendente, la tendencia se invierte y genera una señal de compra; cuando el KAMA cruza la línea de parada descendente, la tendencia se invierte y genera una señal de venta. Una vez en posición, la estrategia calcula una distancia de parada dinámica según el ATR y establece una línea de parada.

De esta manera, la estrategia puede seguir la tendencia y mover la línea de parada gradualmente hasta que se activa la línea de parada o se activa la señal de reversión y se cierra la posición.

Ventajas estratégicas

La estrategia tiene las siguientes ventajas en comparación con las estrategias tradicionales de medias móviles:

  1. El índice KAMA es muy sensible y capta las tendencias de los precios con mayor rapidez.
  2. El cálculo dinámico de la distancia de parada, que se ajusta a la tendencia, puede asegurar ganancias más altas;
  3. Hay una opción de confirmación de cierre de la línea K, que puede filtrar las señales falsas y reducir la necesidad de abrir posiciones.

En general, las estrategias son rápidas y controlables, lo cual es típico de las estrategias de seguimiento de tendencias.

Riesgo estratégico

La estrategia también tiene sus riesgos:

  1. Riesgo de reversión de la tendencia. El índice KAMA es flexible para responder a las fluctuaciones de los precios, pero puede no responder a un reverso repentino de la tendencia a tiempo.
  2. El stop loss es demasiado radical. El stop loss dinámico puede ser demasiado radical si se establece demasiado alto, lo que hace que los beneficios no se bloqueen a tiempo.
  3. Riesgo de falsas señales. La activación de la confirmación de cierre de línea K puede reducir las falsas señales, pero no eliminarlas por completo.

Estos riesgos pueden ser controlados por métodos como la optimización de la distancia de pérdidas, la configuración del porcentaje máximo de pérdidas. También se pueden combinar con otros indicadores como confirmación y evitar transacciones erróneas.

Dirección de optimización de la estrategia

La estrategia se puede optimizar en las siguientes áreas:

  1. Optimización de los parámetros KAMA: ajustar la longitud de la línea media y optimizar la suavidad;
  2. Optimización de la pérdida dinámica: prueba de la mejor distancia de pérdida y longitud de paso según las características de las diferentes variedades;
  3. Aumentar los indicadores de filtración: en combinación con otros indicadores de tendencia, confirmar las señales de negociación y mejorar la fiabilidad de las señales.

Por ejemplo, se puede probar la adición de MACD como indicador de confirmación auxiliar, al mismo tiempo que se solicita que MACDDif también sea positivo y ampliado. Esto puede filtrar algunas señales falsas y evitar la repetición innecesaria de la apertura de la posición.

Resumir

La estrategia funciona sin problemas en general, utiliza un stop loss dinámico para seguir la tendencia y bloquea al máximo las ganancias de la tendencia. La adaptabilidad del indicador KAMA también permite que la estrategia siga el ritmo de los cambios rápidos en el mercado.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("THMA - Bharath Vc Improved", overlay=true, process_orders_on_close=true)

// Function to calculate pips with higher precision
getPips(price) =>
    difc = syminfo.mintick
    hlpips = price / difc
    math.round(hlpips / syminfo.mintick) * syminfo.mintick

// Inputs
buyMess = input.string("Buy Message","Buy Alert Message")
sellMess = input.string("Sell Message","Sell Alert Message")
buyExitMessage = input.string("Buy Exit","Buy Exit Alert Message" )
sellExitMessage = input.string("Sell Exit","Sell Exit Alert Message" )

tmf = input.timeframe("", "Timeframe")
length = input(title='Length', defval=14)
fastLength = input(title='Fast EMA Length', defval=2)
slowLength = input(title='Slow EMA Length', defval=30)
src = input(title='Source', defval=close)
highlight = input(title='Highlight ?', defval=true)
awaitBarConfirmation = input(title='Await Bar Confirmation ?', defval=true)

// Function to calculate the TMA
gettma() =>
    mom = math.abs(ta.change(src, length))
    volatility = math.sum(math.abs(ta.change(src)), length)
    er = volatility != 0 ? mom / volatility : 0
    fastAlpha = 2 / (fastLength + 1)
    slowAlpha = 2 / (slowLength + 1)
    alpha = math.pow(er * (fastAlpha - slowAlpha) + slowAlpha, 2)
    kama = 0.0
    kama := alpha * src + (1 - alpha) * nz(kama[1], src)
    await = awaitBarConfirmation ? barstate.isconfirmed : true
    maColor = highlight ? kama > kama[1] and await ? color.green : color.red : color.new(color.purple, 0)
    thma = kama
    hma_dif = (thma - thma[2])/2
    colour = hma_dif > 0 ? color.green : color.red
    isGreen = hma_dif > 0
    [thma, isGreen, colour]

// Dynamic pip size based on ATR to adapt better to smaller timeframes
pips = ta.atr(14) * 0.1

// Main execution logic
var float psl = na
var int lastSignal = 0
var float lastPsl = na

[thma, isGreen, colour] = request.security(syminfo.tickerid, tmf, gettma(), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off)

plot(thma, title='KAMA', linewidth=2, color=colour)

if ta.crossover(thma, psl) and strategy.position_size < 0
    strategy.exit("Sell Exit", stop=thma, alert_message=sellExitMessage)

if ta.crossunder(thma, psl) and strategy.position_size > 0
    strategy.exit("Buy Exit", stop=thma, alert_message=buyExitMessage)

if isGreen and strategy.position_size <= 0
    if na(psl)
        psl := close + getPips(pips)
    strategy.entry("Buy", strategy.long, alert_message=buyMess)
    lastSignal := 1

if not isGreen and strategy.position_size >= 0
    if na(psl)
        psl := close - getPips(pips)
    strategy.entry("Sell", strategy.short, alert_message=sellMess)
    lastSignal := -1

if (thma >= lastPsl or na(lastPsl)) and thma > psl
    psl := psl + getPips(pips)
    lastPsl := psl

if (thma <= lastPsl or na(lastPsl)) and thma < psl
    psl := psl - getPips(pips)
    lastPsl := psl

plot(psl, title="Position Stop Level", style=plot.style_stepline, color=color.blue)
plot(lastPsl, title="Last Position Stop Level", style=plot.style_cross, color=color.red)