La estrategia Trend Following Stop Loss es una estrategia de trading de seguimiento de tendencias basada en el indicador TrendAlert. Determina la dirección de la tendencia a través del indicador TrendAlert para implementar la entrada de seguimiento de tendencias. Al mismo tiempo, utiliza el indicador ATR para establecer el stop loss para controlar riesgos.
La estrategia consta de las siguientes partes principales:
El indicador TrendAlert juzga la dirección de la tendencia. Cuando TrendAlert es mayor que 0, es una señal alcista. Cuando es menor que 0, es una señal bajista.
El indicador ATR calcula el rango de fluctuación de precios reciente. ATR multiplicado por el multiplicador de pérdida de parada ATR atrStopMultiplier se utiliza como el stop loss fijo.
El parámetro de estructura controla si está habilitado.
Ingrese posiciones largas o cortas de acuerdo con la dirección de la señal de tendencia.
Cierre de posiciones cuando el precio desencadena el stop loss o el take profit.
La estrategia filtra las señales falsas mediante el juicio de tendencia, controla los riesgos mediante el seguimiento de la parada de pérdida, garantiza la rentabilidad a través de la toma de ganancias y mejora la estabilidad del sistema de negociación.
Las principales ventajas de esta estrategia son las siguientes:
La doble garantía de filtrado de tendencias y seguimiento de stop loss evita perseguir el ruido del mercado y garantiza riesgos comerciales controlables.
El ajuste de stop loss adaptativo ATR evita la optimización excesiva y es adecuado para varios entornos de mercado.
Tomar ganancias asegura la rentabilidad y evita consumir las ganancias.
La lógica de la estrategia es clara y concisa, fácil de entender y modificar, adecuada para el desarrollo secundario de los operadores cuantitativos.
Escrito en el lenguaje Pine Script, puede usarse directamente en la plataforma TradingView sin conocimientos de programación.
Esta estrategia también presenta algunos riesgos:
El juicio de tendencia incorrecto puede causar entrada innecesaria y detener la pérdida.
Cuando el mercado fluctúa violentamente, ATR puede subestimar la verdadera amplitud.
El objetivo de obtener ganancias puede limitar el margen de ganancias de la estrategia. Ajuste el parámetro limitMultiplier según el mercado.
La lógica existente basada únicamente en el precio debe combinarse con la gestión del tiempo.
La estrategia se puede optimizar en los siguientes aspectos:
Optimizar los parámetros ATR longitud atrLength y multiplicador de pérdida de parada atrStopMultiplier para ajustar la sensibilidad del algoritmo de pérdida de parada.
Prueba diferentes indicadores de tendencia para encontrar mejores oportunidades de entrada.
Seleccionar o ajustar el parámetro objetivo de obtención de beneficios de acuerdo con las características de las variedades de comercio específicas.
Aumentar el mecanismo de stop loss de tiempo para evitar los riesgos durante la noche.
Filtrar las falsas rupturas combinando indicadores de volumen de operaciones para mejorar la estabilidad de la estrategia.
En general, esta es una estrategia de seguimiento de tendencias muy práctica. Utiliza indicadores para determinar la dirección de la tendencia para lograr el seguimiento de tendencias, mientras que establece paradas adaptativas para garantizar el control de riesgos. La lógica de la estrategia es clara y fácil de usar, lo que la hace ideal para que los principiantes la aprendan. Al mismo tiempo, también proporciona un buen marco de estrategia comercial para el desarrollo de estrategias avanzadas, lo que vale la pena para los operadores cuantitativos
/*backtest start: 2023-01-29 00:00:00 end: 2024-02-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © jaque_verdatre //@version=5 strategy("TrendAlert Based", overlay = true) // Get inputs TrendAlert = input.source(close, "TrendAlert") atrLength = input.int(title="ATR Length", defval=15, minval=1) useStructure = input.bool(title="Use Structure?", defval=true) lookback = input.int(title="How Far To Look Back For High/Lows", defval=8, minval=1) atrStopMultiplier = input.float(title="ATR Multiplier", defval=0.2, minval=0.1) LimitMultiplier = input.float(title = "Limit Multiplier", defval = 0.5, minval = 0.1) PineConnectorID = input.int(title = "Pine Connector ID",defval = 0) CurrencyToSend = input.string(title = "personilized currency", defval = "ETHUSD") Risk = input.int(title = "risk in % to send", defval = 10, minval = 1) // Calculate data atr = ta.atr(atrLength) lowestLow = ta.lowest(low, lookback) highestHigh = ta.highest(high, lookback) longStop = (useStructure ? lowestLow : close) - atr * atrStopMultiplier shortStop = (useStructure ? highestHigh : close) + atr * atrStopMultiplier // Draw data to chart plot(atr, color=color.rgb(33, 149, 243), title="ATR", display = display.none) plot(longStop, color=color.green, title="Long Trailing Stop") plot(shortStop, color=color.red, title="Short Trailing Stop") var float LimitL = na var float LimitS = na var float LPosPrice = na var float SPosPrice = na var float LPosLongStop = na var float SPosShortStop = na KnowLimit (PosPrice, PosStop) => (PosPrice-PosStop)*LimitMultiplier+PosPrice NotInTrade = strategy.position_size == 0 InLongTrade = strategy.position_size > 0 InShortTrade = strategy.position_size < 0 longCondition = TrendAlert > 0 and NotInTrade if (longCondition) LPosPrice := close LPosLongStop := longStop LimitL := KnowLimit(LPosPrice, LPosLongStop) strategy.entry("long", strategy.long) LTPPip = LimitL-LPosPrice LSLPip = LPosPrice-longStop alert(str.tostring(PineConnectorID)+',buy,'+str.tostring(CurrencyToSend)+',risk='+str.tostring(Risk)+',sl='+str.tostring(LSLPip)+'tp='+str.tostring(LTPPip), alert.freq_once_per_bar_close) strategy.exit("exit", "long", stop = longStop, limit = LimitL) shortCondition = TrendAlert < 0 and NotInTrade if (shortCondition) SPosPrice := close SPosShortStop := shortStop LimitS := KnowLimit(SPosPrice, SPosShortStop) strategy.entry("short", strategy.short) STPPip = SPosPrice-LimitS SSLPip = shortStop - SPosPrice alert(str.tostring(PineConnectorID)+',sell,ETHUSD,risk=10,sl='+str.tostring(SSLPip)+'tp='+str.tostring(STPPip), alert.freq_once_per_bar_close) strategy.exit("exit", "short", stop = shortStop, limit = LimitS) plotshape(longCondition, color = color.green, style = shape.labelup, location = location.belowbar, size = size.normal, title = "Long Condition") plotshape(shortCondition, color = color.red, style = shape.labeldown, location = location.abovebar, size = size.normal, title = "Short Condition") if (InShortTrade) LimitL := close LPosLongStop := close LPosPrice := close PlotLongTakeProfit = plot(LimitL, color = InLongTrade ? color.rgb(0, 255, 64) : color.rgb(120, 123, 134, 100), title = "Long Take Profit") PlotLongStopLoss = plot(LPosLongStop, color = InLongTrade ? color.rgb(255, 0, 0) : color.rgb(120, 123, 134, 100), title = "Long Stop Loss") PlotLongPosPrice = plot(LPosPrice, color = InLongTrade ? color.gray : color.rgb(120, 123, 134, 100), title = "Long Position Price") if (InLongTrade) LimitS := close SPosShortStop := close SPosPrice := close PlotShortTakeProfit = plot(LimitS, color = InShortTrade ? color.rgb(0, 255, 64) : color.rgb(120, 123, 134, 100), title = "Short Take Profit") PlotShortStopLoss = plot(SPosShortStop, color = InShortTrade ? color.rgb(255, 0, 0) : color.rgb(120, 123, 134, 100), title = "Short Stop Loss") PlotShortPosPrice = plot(SPosPrice, color = InShortTrade ? color.gray : color.rgb(120, 123, 134, 100), title = "Short Position Price") fill(PlotLongPosPrice, PlotLongTakeProfit, color = InLongTrade ? color.rgb(0, 255, 0, 95) : color.rgb(0, 255, 0, 100)) fill(PlotShortPosPrice, PlotShortTakeProfit, color = InShortTrade ? color.rgb(0, 255, 0, 95) : color.rgb(0, 255, 0, 100)) fill(PlotLongPosPrice, PlotLongStopLoss, color = InLongTrade ? color.rgb(255, 0, 0, 95) : color.rgb(255, 0, 0, 100)) fill(PlotShortPosPrice, PlotShortStopLoss, color = InShortTrade ? color.rgb(255, 0, 0, 95) : color.rgb(255, 0, 0, 100))