Estrategia de seguimiento de tendencia de media móvil de Kaufman dinámica autoadaptable

El autor:¿ Qué pasa?, Fecha: 2024-02-26 16:36:30
Las etiquetas:

img

Resumen general

Esta estrategia está diseñada sobre la base de la media móvil adaptativa de Kaufman (KAMA) para ajustar dinámicamente las posiciones de negociación y realizar un seguimiento automático de las tendencias del mercado.

  1. Calcular dinámicamente el tamaño del paso de negociación (en pips) y adaptarse a la volatilidad del mercado
  2. Generar señales de compra y venta basadas en la dirección de KAMA
  3. Establecer una distancia de stop loss después de que se activa la señal, y ajustar en consecuencia a medida que el precio se mueve
  4. Confirmación opcional de la barra cercana para filtrar señales falsas

Mediante la aplicación de estas funciones, la estrategia trata de obtener beneficios adicionales de las tendencias al tiempo que controla los riesgos.

Estrategia lógica

La estrategia funciona basándose en el indicador de la media móvil adaptativa de Kaufman. KAMA calcula la relación entre el impulso del precio y la volatilidad para ajustar dinámicamente el peso y la suavidad de la media móvil, lo que le permite responder más rápido a los cambios de precios.

Cuando KAMA cruza por encima de la línea de stop loss bajista, indica una inversión de tendencia y activa una señal de compra. Cuando KAMA cruza por debajo de la línea de stop loss al alza, sugiere una inversión de tendencia y activa una señal de venta. Después de ingresar a una posición, la estrategia calcula una distancia de stop loss dinámica basada en ATR y establece una línea de stop loss favorable. A medida que KAMA se mueve en una dirección favorable, la línea de stop loss también se ajusta en consecuencia, moviéndose a una posición más favorable para obtener más ganancias.

De esta manera, la estrategia puede seguir la tendencia, mover gradualmente la línea de stop loss hasta que se activa o se activa una señal inversa para cerrar la posición.

Ventajas

En comparación con las estrategias tradicionales de promedios móviles, esta estrategia tiene las siguientes ventajas:

  1. KAMA tiene una alta sensibilidad y puede detectar las tendencias de los precios más rápidamente;
  2. La distancia dinámica de stop loss bloquea más ganancias a medida que se ajusta a la tendencia;
  3. La barra de cierre de confirmación opcional filtra las señales falsas y reduce las entradas innecesarias.

En general, la estrategia es sensible, controlable y un sistema típico de seguimiento de tendencias.

Los riesgos

La estrategia también conlleva algunos riesgos:

  1. El riesgo de reversión de tendencia: KAMA puede adaptarse de manera flexible a las fluctuaciones de precios, pero puede no responder lo suficientemente oportuna a las reversiones repentinas de tendencia.
  2. Si la distancia de stop loss dinámica se establece demasiado amplia, puede ser demasiado agresiva y no bloquear los beneficios a tiempo.
  3. El uso de la confirmación cercana de barras ayuda a reducir las señales falsas, pero no puede eliminarlas por completo.

Para gestionar estos riesgos, se pueden utilizar métodos como optimizar la distancia de stop loss y establecer un porcentaje máximo de stop loss.

Direcciones de optimización

Las posibles direcciones para optimizar la estrategia incluyen:

  1. Optimizar los parámetros de KAMA: ajustar las longitudes de media móvil, ajustar la suavidad;
  2. Optimizar la pérdida de frenado dinámica: probar las distancias y tamaños de paso óptimos de la pérdida de frenado basados en diferentes productos;
  3. Añadir indicadores de filtrado: incorporar otros indicadores de tendencia para confirmar las señales de negociación y mejorar la fiabilidad.

Por ejemplo, el MACD se puede agregar como un indicador de confirmación auxiliar, lo que requiere que el MACD Dif sea positivo y se expanda junto con la cruz de oro de KAMA. Esto puede filtrar algunas señales falsas y evitar entradas repetidas innecesarias.

Conclusión

El funcionamiento general de esta estrategia es suave. Al utilizar un stop loss dinámico para rastrear tendencias y maximizar las ganancias de tendencia, junto con la adaptabilidad del indicador KAMA para responder rápidamente a los rápidos cambios del mercado, esta estrategia puede convertirse en un sistema de seguimiento de tendencias eficiente después de cierta optimización, adecuado para el comercio a medio y largo plazo.


/*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)


Más.