La idea central de esta estrategia es utilizar la media móvil dinámica para el seguimiento de tendencias, establecer el stop loss y tomar ganancias, y combinar las técnicas de velas Heikin Ashi para el juicio de señales largas / cortas.
La estrategia primero calcula el indicador ATR, luego combina la fuente de precios de entrada y los parámetros para calcular la media móvil dinámica. Las señales largas / cortas se generan cuando el precio cruza por encima / por debajo de la media móvil dinámica. Mientras tanto, las posiciones de stop loss y take profit se establecen para rastrear los cambios de precios en tiempo real.
Específicamente, el indicador ATR y el parámetro nLoss se calculan primero. Luego, el precio del período actual y la posición de stop loss del período anterior se comparan para actualizar la línea de stop loss. Cuando el precio se rompe a través de la línea de stop loss del período anterior, se generan señales largas / cortas pos y colores correspondientes. Cuando se activan las señales comerciales, se trazan marcas de flechas. Finalmente, las posiciones se cierran según la lógica de stop loss / take profit.
La mayor ventaja de esta estrategia es el uso de promedios móviles dinámicos para rastrear los cambios de precios en tiempo real. Esto captura las tendencias mejor que los promedios móviles fijos tradicionales y reduce las posibilidades de stop loss. Además, la combinación de stop loss basados en ATR permite un ajuste flexible de la posición de stop loss basado en la volatilidad del mercado para controlar eficazmente los riesgos.
El principal riesgo de esta estrategia es que el precio pueda dispararse significativamente, causando señales falsas cuando se alcanza el stop loss.
Las soluciones incluyen la optimización del período promedio móvil, el ajuste del coeficiente de ATR y stop loss para reducir la probabilidad de señales falsas.
La estrategia se puede optimizar en los siguientes aspectos:
Prueba diferentes tipos y períodos de medias móviles para encontrar combinaciones óptimas de parámetros
Optimizar el parámetro del período ATR para equilibrar la sensibilidad de stop loss
Añadir filtros e indicadores adicionales para mejorar la calidad de la señal
Ajustar los valores de stop loss/take profit para optimizar la relación riesgo-recompensa
La idea central de esta estrategia es utilizar promedios móviles dinámicos para rastrear los cambios de precios en tiempo real, utilizando el indicador ATR para establecer dinámicamente posiciones de stop loss, controlando estrictamente el riesgo mientras se rastrean las tendencias.
/*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)