A estratégia Trend Following Stop Loss é uma estratégia de negociação de stop loss baseada no indicador TrendAlert. Determina a direção da tendência através do indicador TrendAlert para implementar a entrada de rastreamento de tendência. Ao mesmo tempo, usa o indicador ATR para definir o stop loss para controlar riscos.
A estratégia consiste nas seguintes partes principais:
O indicador TrendAlert avalia a direção da tendência. Quando o TrendAlert é maior que 0, é um sinal de alta. Quando é menor que 0, é um sinal de baixa.
O indicador ATR calcula a faixa de flutuação recente dos preços.
O parâmetro de estrutura controla se ele está habilitado.
Entre em posições longas ou curtas de acordo com a direção do sinal de tendência.
Fechar posições quando o preço desencadear uma perda ou um lucro.
A estratégia filtra sinais falsos através do julgamento da tendência, controla os riscos através do rastreamento de stop loss, garante a rentabilidade através do take profit e melhora a estabilidade do sistema de negociação.
As principais vantagens desta estratégia são:
A dupla garantia de filtragem de tendências e de acompanhamento de stop loss evita a perseguição do ruído do mercado e garante riscos comerciais controlados.
A configuração de stop loss adaptativa ATR impede a otimização excessiva e é adequada para vários ambientes de mercado.
O lucro assegura a rentabilidade e impede que os lucros sejam consumidos.
A lógica da estratégia é clara e concisa, fácil de compreender e modificar, adequada para o desenvolvimento secundário dos traders quantitativos.
Escrito em linguagem Pine Script, pode ser usado diretamente na plataforma TradingView sem habilidades de programação.
Esta estratégia apresenta também alguns riscos:
O julgamento incorreto da tendência pode causar entrada desnecessária e gatilho de stop loss.
Quando o mercado flutua violentamente, o ATR pode subestimar a verdadeira amplitude.
A meta de lucro pode limitar o espaço de lucro da estratégia. Ajustar o parâmetro limitMultiplier de acordo com mercado.
A lógica existente baseada apenas no preço deve ser combinada com a gestão do tempo.
A estratégia pode ser otimizada nos seguintes aspectos:
Otimizar os parâmetros ATR comprimento atrLength e multiplicador de stop loss atrStopMultiplier para ajustar a sensibilidade do algoritmo de stop loss.
Tente diferentes indicadores de tendência para encontrar melhores oportunidades de entrada.
Selecionar ou ajustar o parâmetro de lucro-alvo de acordo com as características de variedades específicas de negociação.
Aumentar o mecanismo de stop loss de tempo para evitar riscos do dia para a noite.
Filtrar falsas rupturas combinando indicadores de volume de negociação para melhorar a estabilidade da estratégia.
Em geral, esta é uma estratégia de rastreamento de tendências muito prática. Ele usa indicadores para determinar a direção da tendência para alcançar o rastreamento de tendências, enquanto define paradas adaptativas para garantir o controle de riscos. A lógica da estratégia é clara e fácil de usar, tornando-a ideal para iniciantes aprenderem. Ao mesmo tempo, também fornece uma boa estrutura de estratégia de negociação para o desenvolvimento de estratégias avançadas, o que vale a pena para os traders quantitativos
/*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))