La idea central de esta estrategia es utilizar el promedio móvil T3 y el ATR para capturar los puntos de entrada y salida a lo largo de la tendencia. Pertenece a las estrategias de seguimiento de tendencia. Las señales de negociación se generan cuando el precio rompe la línea T3, y los niveles de stop loss y take profit se establecen utilizando el valor ATR en el punto de ruptura para lograr un stop loss automático y obtener ganancias.
La estrategia consiste en el indicador T3, el indicador ATR y el mecanismo de detención posterior del ATR.
El promedio móvil T3 es un promedio móvil suavizado que puede reducir el retraso de la curva y hacer que responda más rápido a los cambios de precios.
El indicador ATR se utiliza para calcular el grado de volatilidad del mercado y establecer los niveles de stop loss. Cuanto mayor sea el valor ATR, mayor será la volatilidad del mercado y se debe establecer una stop loss más amplia.
El mecanismo de stop trailing de ATR ajusta la posición de la línea de stop loss en función de los valores de ATR en tiempo real, de modo que la línea de stop loss pueda seguir el movimiento del precio y permanecer dentro de un rango razonable.
Utilizando el T3 para determinar la dirección, el ATR para calcular la volatilidad y el mecanismo de detención posterior del ATR, esta estrategia logra una captura de tendencias y un control de riesgos relativamente eficientes.
Las ventajas de esta estrategia incluyen:
La aplicación de la línea T3 mejora la precisión de las tendencias de captura.
El indicador ATR calcula dinámicamente la volatilidad del mercado, lo que hace que los niveles de stop loss y take profit sean más razonables.
El mecanismo ATR trailing stop permite que la línea de stop loss siga el movimiento del precio en tiempo real para un control eficaz del riesgo.
Integra indicadores y mecanismos de stop loss para lograr el seguimiento automatizado de tendencias.
Puede conectarse a plataformas de negociación externas a través de webhook para la ejecución automática de órdenes.
También hay algunos riesgos con esta estrategia:
Los parámetros de ciclo diferentes pueden ser probados para encontrar los valores óptimos.
El cálculo inexacto del valor ATR puede dar lugar a que la distancia de parada de pérdida sea demasiado grande o demasiado pequeña para controlar eficazmente el riesgo. El parámetro del ciclo ATR puede ajustarse combinado con las características de volatilidad del mercado.
En fluctuaciones violentas, la línea de stop loss puede romperse, lo que resulta en pérdidas excesivas.
El aumento de la distancia de detención del ATR puede ayudar.
La estrategia se puede optimizar en los siguientes aspectos:
Optimizar el parámetro T3 para encontrar el ciclo de suavizado más adecuado.
Probar diferentes parámetros del ciclo ATR para calcular el valor ATR que refleje mejor la volatilidad del mercado.
Optimizar el rango flexible de la distancia de parada trasera del ATR para evitar paradas demasiado sensibles.
Añadir filtros apropiados para evitar el comercio frecuente en los mercados de la sierra.
Incorporar indicadores de tendencia para mejorar la precisión de la rentabilidad direccional.
Utilice métodos de aprendizaje automático para optimizar automáticamente los parámetros.
Esta estrategia integra el uso de la línea T3 para determinar la dirección de la tendencia, el indicador ATR para calcular paradas / objetivos y el mecanismo ATR para ajustar la distancia de parada. Logra un seguimiento automatizado de la tendencia y un control eficiente del riesgo. Es una estrategia de seguimiento de tendencias confiable. En aplicaciones prácticas, aún se necesita prueba y optimización continua para encontrar las combinaciones de parámetros más adecuadas para las condiciones actuales del mercado, obteniendo así mejores resultados de estrategia.
/*backtest start: 2024-01-21 00:00:00 end: 2024-02-20 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title='UT Bot Alerts (QuantNomad) Strategy', overlay=true) T3 = input(100)//600 // Input for Long Settings // Input for Long Settings xPrice3 = close xe1 = ta.ema(xPrice3, T3) xe2 = ta.ema(xe1, T3) xe3 = ta.ema(xe2, T3) xe4 = ta.ema(xe3, T3) xe5 = ta.ema(xe4, T3) xe6 = ta.ema(xe5, T3) b3 = 0.7 c1 = -b3*b3*b3 c2 = 3*b3*b3+3*b3*b3*b3 c3 = -6*b3*b3-3*b3-3*b3*b3*b3 c4 = 1+3*b3+b3*b3*b3+3*b3*b3 nT3Average = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3 //plot(nT3Average, color=color.white, title="T3") // Buy Signal - Price is below T3 Average buySignal3 = xPrice3 < nT3Average sellSignal3 = xPrice3 > nT3Average // Inputs a = input(1, title='Key Value. "This changes the sensitivity"') c = input(50, title='ATR Period') h = input(true, title='Signals from Heikin Ashi Candles') riskRewardRatio = input(1, title='Risk Reward Ratio') xATR = ta.atr(c) nLoss = a * xATR src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close 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 ema = ta.ema(src, 1) above = ta.crossover(ema, xATRTrailingStop) below = ta.crossunder(ema, xATRTrailingStop) buy = src > xATRTrailingStop and above sell = src < xATRTrailingStop and below barbuy = src > xATRTrailingStop barsell = src < xATRTrailingStop plotshape(buy, title='Buy', text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(sell, title='Sell', text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) barcolor(barbuy ? color.new(color.green, 90) : na) barcolor(barsell ? color.new(color.red, 90) : na) var float entryPrice = na var float takeProfitLong = na var float stopLossLong = na var float takeProfitShort = na var float stopLossShort = na if buy and buySignal3 entryPrice := src takeProfitLong := entryPrice + nLoss * riskRewardRatio stopLossLong := entryPrice - nLoss takeProfitShort := na stopLossShort := na if sell and sellSignal3 entryPrice := src takeProfitShort := entryPrice - nLoss * riskRewardRatio stopLossShort := entryPrice + nLoss takeProfitLong := na stopLossLong := na // Strategy order conditions acct = "Sim101" ticker = "ES 12-23" qty = 1 OCOMarketLong = '{ "alert": "OCO Market Long", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitLong) + '", "stop_price": "' + str.tostring(stopLossLong) + '", "tif": "DAY" }' OCOMarketShort = '{ "alert": "OCO Market Short", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitShort) + '", "stop_price": "' + str.tostring(stopLossShort) + '", "tif": "DAY" }' CloseAll = '{ "alert": "Close All", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '" }' strategy.entry("Long", strategy.long, when=buy and buySignal3, alert_message=OCOMarketLong) strategy.entry("Short", strategy.short, when=sell and sellSignal3, alert_message=OCOMarketShort) // Setting the take profit and stop loss for long trades strategy.exit("Take Profit/Stop Loss", "Long", stop=stopLossLong, limit=takeProfitLong,alert_message=CloseAll) // Setting the take profit and stop loss for short trades strategy.exit("Take Profit/Stop Loss", "Short", stop=stopLossShort, limit=takeProfitShort,alert_message=CloseAll) // Plot trade setup boxes bgcolor(buy ? color.new(color.green, 90) : na, transp=0, offset=-1) bgcolor(sell ? color.new(color.red, 90) : na, transp=0, offset=-1) longCondition = buy and not na(entryPrice) shortCondition = sell and not na(entryPrice) // var line longTakeProfitLine = na // var line longStopLossLine = na // var line shortTakeProfitLine = na // var line shortStopLossLine = na // if longCondition // longTakeProfitLine := line.new(bar_index, takeProfitLong, bar_index + 1, takeProfitLong, color=color.green, width=2) // longStopLossLine := line.new(bar_index, stopLossLong, bar_index + 1, stopLossLong, color=color.red, width=2) // // label.new(bar_index + 1, takeProfitLong, str.tostring(takeProfitLong, "#.#####"), color=color.green, style=label.style_none, textcolor=color.green, size=size.tiny) // // label.new(bar_index + 1, stopLossLong, str.tostring(stopLossLong, "#.#####"), color=color.red, style=label.style_none, textcolor=color.red, size=size.tiny) // if shortCondition // shortTakeProfitLine := line.new(bar_index, takeProfitShort, bar_index + 1, takeProfitShort, color=color.green, width=2) // shortStopLossLine := line.new(bar_index, stopLossShort, bar_index + 1, stopLossShort, color=color.red, width=2) // // label.new(bar_index + 1, takeProfitShort, str.tostring(takeProfitShort, "#.#####"), color=color.green, style=label.style_none, textcolor=color.green, size=size.tiny) // // label.new(bar_index + 1, stopLossShort, str.tostring(stopLossShort, "#.#####"), color=color.red, style=label.style_none, textcolor=color.red, size=size.tiny) alertcondition(buy, 'UT Long', 'UT Long') alertcondition(sell, 'UT Short', 'UT Short')