Estrategia de seguimiento de medias móviles dinámicas


Fecha de creación: 2023-11-24 16:59:25 Última modificación: 2023-11-24 16:59:25
Copiar: 0 Número de Visitas: 608
1
Seguir
1617
Seguidores

Estrategia de seguimiento de medias móviles dinámicas

Descripción general

La idea central de la estrategia es utilizar las medias móviles dinámicas para el seguimiento de la tendencia, establecer paradas de pérdidas y combinar las instrucciones de la técnica de la barra de Highline para hacer un juicio de señales de espacio múltiple. El indicador ATR se utiliza para calcular las medias móviles dinámicas y la posición de las paradas.

Principio de estrategia

La estrategia primero calcula el indicador ATR, y luego combina la fuente de precios y los parámetros de entrada para calcular el promedio móvil dinámico. Se genera una señal de más o menos cuando el precio está por encima / por debajo del promedio móvil dinámico. Al mismo tiempo, se establece una posición de parada de pérdidas y se actualiza en tiempo real el cambio de precio.

Concretamente, primero se calcula el indicador ATR y el parámetro nLoss. Luego se calcula el precio del ciclo actual y la posición de parada del ciclo anterior, y se comparan los dos para actualizar la línea de parada. Cuando el precio rompe la línea de parada del ciclo anterior, se produce una señal de más/nada y el color correspondiente; cuando se produce una señal de transacción, se dibuja un marcador de flecha.

Análisis de las ventajas

La mayor ventaja de esta estrategia es que utiliza una media móvil dinámica para seguir los cambios en los precios en tiempo real. Esto es más capaz de capturar la tendencia que las medias móviles fijas tradicionales, lo que reduce la probabilidad de pérdidas. Además, en combinación con los paros ATR, se puede ajustar la posición de los paros de manera flexible en función de la amplitud de las fluctuaciones del mercado y controlar el riesgo de manera efectiva.

Riesgos y soluciones

El principal riesgo de esta estrategia es que el precio puede saltar mucho, lo que genera una señal errónea de ruptura de la línea de parada. Además, la configuración inadecuada de las condiciones también puede conducir a operaciones demasiado frecuentes.

La solución consiste en optimizar el número de periodos de las medias móviles, ajustar el tamaño del ATR y el coeficiente de parada, reducir la probabilidad de señales erróneas. Además, se pueden establecer condiciones de filtración para evitar el comercio demasiado intenso.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Prueba de promedios móviles de diferentes tipos y períodos para encontrar la mejor combinación de parámetros

  2. Optimización de los parámetros del ciclo ATR para equilibrar la sensibilidad al paro

  3. Adición de condiciones y indicadores de filtración adicionales para mejorar la calidad de la señal

  4. Ajuste de los valores de los paros de pérdidas para optimizar la relación riesgo-beneficio

Resumir

La idea central de esta estrategia es que las medias móviles dinámicas rastreen los cambios en los precios en tiempo real, y que se utilice el indicador ATR para configurar los puntos de parada de forma dinámica, controlando el riesgo de manera estricta mientras se sigue la tendencia. A través de la optimización de los parámetros y la modificación de las reglas, se puede entrenar la estrategia en un sistema de cuantificación muy práctico.

Código Fuente de la Estrategia
/*backtest
start: 2022-11-23 00:00:00
end: 2023-11-05 05:20:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT","stocks":0}]
*/

//@version=5
strategy(title='UT Bot v5', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 
//Edited and converted to @version=5 by SeaSide420 for Paperina
// Inputs
AllowBuy = input(defval=true, title='Allow Buy?')
AllowSell = input(defval=false, title='Allow Sell?')
h = input(false, title='Signals from Heikin Ashi Candles')
//revclose = input(defval=true, title='Close when reverse signal?')
Price = input(defval=open, title='Price Source (recommended OPEN to avoid repainting)')
smoothing = input.string(title="Moving Average Type", defval="HMA", options=["SMA", "EMA", "WMA", "HMA"])
MA_Period = input(2, title='This changes the MAPeriod')
a = input.float(1, title='This changes the sensitivity',step=0.1)
c = input(11, title='ATR Period')
TakeProfit = input.int(defval=50000, title='Take Profit ($)', minval=1)
StopLoss = input.int(defval=50000, title='Stop Loss ($)', minval=1)
xATR = ta.atr(c)
nLoss = a * xATR
src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, Price, lookahead=barmerge.lookahead_off) : Price
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2
pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3
xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue
ma_function(src, MA_Period) =>
    switch smoothing
        "SMA" => ta.sma(src, MA_Period)
        "EMA" => ta.ema(src, MA_Period)
        "WMA" => ta.wma(src, MA_Period)
        => ta.hma(src, MA_Period)
thema = ma_function(src, MA_Period)
above = ta.crossover(thema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, thema)
buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below
barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop
plot(thema,title="The M.A.",color=color.green,linewidth=2)
plot(xATRTrailingStop,title="The M.A.",color=color.red,linewidth=2)
plotshape(buy,  title = "Buy",  text = "Buy",  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, size = size.tiny)
plotshape(sell, title = "Sell", text = "Sell", style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, size = size.tiny)
barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)
strategy.close_all(when=strategy.openprofit>TakeProfit,alert_message="Close- TakeProfit", comment = "TP")
strategy.close_all(when=strategy.openprofit<StopLoss-(StopLoss*2),alert_message="Close- StopLoss", comment = "SL")
strategy.close("buy", when =  sell and AllowSell==false , comment = "close buy")
strategy.close("sell", when =  buy and AllowBuy==false, comment = "close sell")
strategy.entry("buy", strategy.long, when = buy and AllowBuy)
strategy.entry("sell", strategy.short, when = sell and AllowSell)