Esta estratégia combina a tendência seguindo com o trailing stop loss e tomando lógica de lucro para andar continuamente a tendência para lucros. Ele usa a média móvel para determinar a direção da tendência e gerar sinais de negociação quando o preço quebra as linhas MA. Depois de entrar em posição longa, a estratégia define stop loss com base no valor ATR e ajusta-o com a lógica de stop loss para seguir a tendência. Quando o preço sobe para um certo nível, é necessário lucro parcial para bloquear alguns ganhos.
Configure o horário de início e parada do backtest com base na entrada do usuário.
Iniciar o preço de parada longa e curta, e percentual de atraso.
Entrar em longo quando o preço ultrapassa a linha MA.
Calcular a distância de stop loss com o ATR e definir o preço de stop loss.
À medida que o preço continua a subir, a pista para parar a perda para cima para bloquear mais lucros.
Quando o preço atingir o limiar de lucro, obtém lucro parcial.
Entrar em curto quando o preço cruzar abaixo da linha MA.
Calcular a distância de stop loss com o ATR e definir o preço de stop loss.
À medida que o preço continua a cair, a pista de parada de perdas para baixo para bloquear mais lucros.
Quando o preço atingir o limiar de lucro, obtém lucro parcial.
O trailing stop loss pode seguir as tendências e capturar mais lucros enquanto protege os lucros.
O ATR dinâmico de stop loss reage melhor às oscilações do mercado do que o stop loss fixo.
O lucro parcial contribui para o bloqueio de alguns ganhos e reduz os riscos de retirada.
Lógica simples e clara, fácil de entender e implementar.
A reversão súbita da tendência pode desencadear grandes perdas com uma distância larga de stop loss.
O stop loss baseado no ATR pode ser demasiado sensível e ser interrompido prematuramente.
A taxa de lucro parcial inadequada pode perder as tendências ou aumentar as perdas.
Muitos parâmetros precisam de otimização, como período ATR, percentagens de atraso, taxa de lucro.
A estratégia baseia-se apenas no MA e no ATR, podem ocorrer sinais errados.
Adicione outros indicadores como MACD, KD para filtrar sinais de negociação e evitar sinais MA errados.
Considere os rácios dinâmicos de lucro baseados na força da tendência.
Teste diferentes períodos de ATR para obter a estabilidade ideal ou use outros indicadores para parar a perda.
Introduzir aprendizado de máquina para otimizar automaticamente parâmetros e ajustá-los dinamicamente.
Usar modelos de aprendizagem profunda para detectar tendências e gerar sinais automaticamente.
A estratégia integra trailing stop loss, dynamic ATR stop loss e partial take profit para seguir tendências e controlar drawdowns. Mas tem algumas limitações como a simples detecção de tendências e a otimização de parâmetros difíceis. Isso dá boas direções para melhorar ainda mais a estratégia usando mais técnicas e indicadores para melhorar a estabilidade e lucratividade.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © felipefs //@version=4 strategy("Meu Script", overlay=true) plot(ohlc4) //Funçao de Datas testStartYear = input(2018, "Backtest Start Year") testStartMonth = input(6, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false //Funções de Trailing Stop long_stop_price = 0.0 short_stop_price = 0.0 long_trail_perc = 0 short_trail_perc = 0 long_stop_price := if (strategy.position_size > 0) stopValue = close * (1 - long_trail_perc) max(stopValue, long_stop_price[1]) else 0 short_stop_price := if (strategy.position_size < 0) stopValue = close * (1 + short_trail_perc) min(stopValue, short_stop_price[1]) else 999999 //Função de Debug debug(value) => x = bar_index y = close label.new(x, y, tostring(value)) //Take Profit profit = close * (1 + 0.12) strategy.entry("Long", true) strategy.exit("Take Profit 1 Long", from_entry="Long", limit=profit, qty_percent=50.0) //ATR Stop // xATRTrailingStopLong = 0.0 // xATR = atr(nATRPeriod) // nLossLong = nATRMultipLong * xATR // if (strategy.position_size > 0) // xATRTrailingStopLong := max(nz(xATRTrailingStopLong[1]), close - nLossLong)