Estrategia de seguimiento de tendencias basada en promedios móviles y súper tendencias

El autor:¿ Qué pasa?, Fecha: 2023-11-14 16:23:42
Las etiquetas:

img

Resumen general

Esta estrategia combina indicadores de media móvil y súper tendencia para seguir la tendencia.

Estrategia lógica

  1. Calcular la media móvil ponderada MA. Utilice el volumen como peso para calcular el precio promedio ponderado durante un período.

  2. Calcular la media móvil de Hull basada en el MA. La media móvil de Hull es más sensible a los cambios de precios.

  3. Calcular el indicador de súper tendencia. Súper tendencia combina ATR para identificar los cambios de tendencia. Calcula las bandas superior e inferior.

  4. Cuando se acerque a las brechas por encima de la banda superior, vaya largo.

  5. Trace indicadores auxiliares como abiertos, cerrados, altos y bajos para observar visualmente los movimientos de precios.

  6. Tomar decisiones comerciales basadas en los cruces de indicadores.

Análisis de ventajas

  1. La estrategia combina tanto la media móvil como la súper tendencia, lo que permite una detección de tendencia más precisa.

  2. El promedio móvil del casco es más sensible a los cambios de precios, lo que ayuda a la inversión oportuna de la tendencia spot.

  3. Super tendencia ajusta dinámicamente las bandas superior e inferior para adaptarse a la volatilidad del mercado.

  4. Los indicadores auxiliares muestran visualmente los movimientos de precios para ayudar a la toma de decisiones con señales de indicadores.

  5. La estrategia permite la optimización de parámetros en el período promedio móvil, súper multiplicador de tendencia, etc.

Análisis de riesgos

  1. Las whipssaws pueden generar señales falsas durante los mercados de rango, causando operaciones innecesarias.

  2. El seguimiento de múltiples indicadores puede hacer que la estrategia sea relativamente compleja de implementar.

  3. Los parámetros deben ajustarse adecuadamente para adaptarse a las características de los diferentes productos.

  4. Se requiere un stop loss estricto para limitar las pérdidas en posiciones individuales.

  5. La alta frecuencia de comercio requiere un control de impacto de las comisiones.

Direcciones de optimización

  1. Prueba diferentes promedios móviles para encontrar uno más sensible al mercado.

  2. Prueba diferentes súper multiplicadores de tendencia para detectar los cambios de tendencia en el tiempo.

  3. Incorporar el índice de volatilidad para reducir el tamaño de la posición cuando aumente la volatilidad.

  4. Añadir condiciones de ruptura para evitar señales falsas durante los períodos de alcance limitado.

  5. Optimizar la estrategia de stop loss para adaptarla mejor a las condiciones del mercado.

Resumen de las actividades

Esta estrategia juzga la dirección de la tendencia utilizando tanto la media móvil como la súper tendencia para seguir la tendencia. La ventaja es la verificación mutua entre indicadores para una detección de tendencia más precisa. Pero se deben tener en cuenta las señales falsas. La estrategia se puede mejorar aún más a través de la optimización de parámetros y el control de riesgos.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © rajukpatel

//@version=5
strategy('My RK Strategy with Alert', shorttitle='My RK Strategy with Alert', overlay=true )
src5 = input(close)

tf = input(1440)
len5 = timeframe.isintraday and timeframe.multiplier >= 1 ? tf / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7

ma = ta.ema(src5 * volume, len5) / ta.ema(volume, len5)


//script taken from https://www.tradingview.com/script/kChCRRZI-Hull-Moving-Average/

src1 = ma

p(src1, len5) =>
    n = 0.0
    s = 0.0
    for i = 0 to len5 - 1 by 1
        w = (len5 - i) * len5
        n += w
        s += src5[i] * w
        s
    s / n

hm = 2.0 * p(src1, math.floor(len5 / 3)) - p(src1, len5)
vhma = p(hm, math.floor(math.sqrt(len5)))
lineColor = vhma > vhma[1] ? color.lime : color.red
plot(vhma, title='VHMA', color=lineColor, linewidth=3)
hColor = true
vis = true
hu = hColor ? vhma > vhma[2] ? #00ff00 : #ff0000 : #ff9800

vl = vhma[0]
ll = vhma[1]
m1 = plot(vl, color=hu, linewidth=1, transp=60)
m2 = plot(vis ? ll : na, color=hu, linewidth=2, transp=80)

fill(m1, m2, color=hu, transp=70)
//

b = timeframe.isintraday and timeframe.multiplier >= 1 ? 60 / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7



//
res5 = input.timeframe('D')

o = request.security(syminfo.tickerid, res5, open, barmerge.gaps_off, barmerge.lookahead_on)
c = request.security(syminfo.tickerid, res5, close, barmerge.gaps_off, barmerge.lookahead_on)
hz = request.security(syminfo.tickerid, res5, high, barmerge.gaps_off, barmerge.lookahead_on)
l = request.security(syminfo.tickerid, res5, low, barmerge.gaps_off, barmerge.lookahead_on)



col = c >= o ? color.lime : color.red

ppo = plot(b ? o >= c ? hz : l : o, color=col, title='Open', style=plot.style_stepline, transp=100)
ppc = plot(b ? o <= c ? hz : l : c, color=col, title='Close', style=plot.style_stepline, transp=100)

plot(b and hz > c ? hz : na, color=col, title='High', style=plot.style_circles, linewidth=2, transp=60)
plot(b and l < c ? l : na, color=col, title='Low', style=plot.style_circles, linewidth=2, transp=60)

fill(ppo, ppc, col, transp=90)

//
// INPUTS //
st_mult = input.float(1, title='SuperTrend Multiplier', minval=0, maxval=100, step=0.01)
st_period = input.int(50, title='SuperTrend Period', minval=1)

// CALCULATIONS //
up_lev = l - st_mult * ta.atr(st_period)
dn_lev = hz + st_mult * ta.atr(st_period)

up_trend = 0.0
up_trend := c[1] > up_trend[1] ? math.max(up_lev, up_trend[1]) : up_lev

down_trend = 0.0
down_trend := c[1] < down_trend[1] ? math.min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend = 0
trend := c > down_trend[1] ? 1 : c < up_trend[1] ? -1 : nz(trend[1], 1)

// Calculate SuperTrend Line
st_line = trend == 1 ? up_trend : down_trend

// Plotting
//plot(st_line[1], color = trend == 1 ? color.green : color.red , style = plot.style_cross, linewidth = 2, title = "SuperTrend")
buy = ta.crossover(c, st_line)
sell = ta.crossunder(c, st_line)
signal = input(false)

/////////////// Plotting /////////////// 
plotshape(signal and buy, style=shape.triangleup, size=size.normal, location=location.belowbar, color=color.new(color.lime, 0))
plotshape(signal and sell, style=shape.triangledown, size=size.normal, location=location.abovebar, color=color.new(color.red, 0))


if buy
    strategy.entry('My Long Entry Id', strategy.long)

if sell
    strategy.entry('My Short Entry Id', strategy.short)



Más.