Esta é uma estratégia de negociação de breakout que combina o indicador SAR parabólico e linhas SMMA triplas com períodos diferentes. Ela vai longa quando todas as três linhas SMMA estão subindo e vai curta quando todas estão caindo, enquanto usa o indicador SAR para determinar a direção da tendência e tomar entradas de contra-tendência quando o SAR vira direções. A estratégia também incorpora stop loss e take profit.
A estratégia baseia-se nos seguintes pontos-chave:
Usando o indicador SAR parabólico para determinar a direção da tendência atual.
Configuração de três linhas SMMA com períodos diferentes (linha rápida 21, linha média 50, linha lenta 200). Quando as três linhas estão subindo, sinaliza uma tendência de alta. Quando todas estão caindo, sinaliza uma tendência de queda.
Vai longo quando o SAR desce enquanto as três linhas SMMA estão a subir.
Corto-circuito quando o SAR dispara enquanto as três linhas SMMA caem.
Incorporação de stop loss baseado em SAR e take profit a uma certa percentagem do preço de entrada.
Especificamente, a estratégia primeiro verifica se o SAR inverte direções na barra atual. Se o SAR inverter de cima para baixo enquanto os SMMAs estão subindo, ele vai longo. Se o SAR inverter de baixo para cima enquanto os SMMAs estão caindo, ele vai curto.
Após a entrada, o stop loss é definido no preço SAR na próxima barra, usando o SAR como um stop loss dinâmico.
Esta estratégia combina a vantagem de um indicador de tendência e de médias móveis de múltiplos quadros de tempo, permitindo entradas oportunas em reversões de tendência, ao mesmo tempo em que se filtram falsas rupturas com SMMA.
O SAR pode detectar rapidamente mudanças de tendência e captar oportunidades de reversão.
As SMMA triplas filtram eficazmente o ruído do mercado e evitam falhas.
O uso de SMMA resulta em curvas mais suaves e menos interferência de MA whipsaws.
Incorporar stop loss e take profit ajuda a controlar a perda de uma única negociação e bloquear lucros parciais.
As definições de parâmetros flexíveis permitem a otimização para diferentes mercados.
Há também alguns riscos a considerar:
SAR pode virar frequentemente durante tendências agitadas, aumentando os custos de negociação excessiva.
As configurações SMMA podem não se adequar bem a todos os instrumentos, exigindo otimização individual.
SAR stop loss tem atraso de tempo, potencialmente aumentando as perdas.
SAR pode virar em falsas rupturas em tendências estáveis.
As configurações deficiente SMMA podem causar tendências perdidas ou sinais ruins.
Para enfrentar os riscos, as otimizações podem centrar-se em:
Ajustar os parâmetros SAR com base na volatilidade para reduzir os saltos.
Ajuste dos períodos SMMA para se adequarem às características dos instrumentos.
Melhorar o stop loss, por exemplo com ordens de trailing ou de limite.
Utilização de ordens de limite para stop loss na negociação ativa.
Extenso teste e ajuste de parâmetros.
Com base na análise anterior, as otimizações podem envolver:
Otimizando os parâmetros SAR para curvas mais suaves e menos voltas.
Ajustar os comprimentos da SMMA para que correspondam aos instrumentos de negociação.
Empregando stop loss dinâmicos como trailing stops ou limit orders.
Utilização de ordens de limite para stop loss na negociação de alta frequência.
Adicionando filtros como RSI, KD para melhorar a qualidade do sinal.
Melhorar as condições de entrada, por exemplo, verificando os padrões das velas com os lançamentos SAR.
Adição de condições de reentrada após a ação de stop loss.
Aumentar o lucro com baixas, fechamento parcial, níveis impressionantes.
Ajuste dos parâmetros com base nos resultados dos backtests e na análise da sensibilidade.
Em resumo, esta é uma estratégia de breakout simples e prática que combina a sensibilidade do SAR na captação de mudanças de tendência e o efeito de filtragem de médias móveis. Pode identificar pontos de reversão de tendência rapidamente. O uso de stop loss e take profit ajuda a controlar riscos e bloquear lucros. Outras otimizações nas configurações de parâmetros, regras de entrada / saída e robustez contra falhas podem melhorar o desempenho da estratégia para diferentes instrumentos de negociação.
/*backtest start: 2023-10-08 00:00:00 end: 2023-11-07 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="SAR + 3SMMA with SL & TP", overlay=true, calc_on_order_fills=false, calc_on_every_tick=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.USD, commission_type= strategy.commission.percent, commission_value=0.03) start = input.float(0.02, step=0.01, group="SAR") increment = input.float(0.02, step=0.01, group="SAR") maximum = input.float(0.2, step=0.01, group="SAR") //Take Profit Inputs take_profit = input.float(title="Take Profit (%)", minval=0.0, step=0.1, defval = 0.1, group="Stop Loss and Take Profit", inline="TP") * 0.01 //Stop Loss Inputs stop_loss = input.float(title="StopLoss (%)", minval=0.0, step=0.1, defval=1, group="Stop Loss and Take Profit", inline="SL") * 0.01 // Smooth Moving Average fastSmmaLen = input.int(21, minval=1, title="Fast Length", group = "Smooth Moving Average") midSmmaLen = input.int(50, minval=1, title="Mid Length", group = "Smooth Moving Average") slowSmmaLen = input.int(200, minval=1, title="Slow Length", group = "Smooth Moving Average") src = input(close, title="Source", group = "Smooth Moving Average") smma(ma, src, len) => smma = 0.0 smma := na(smma[1]) ? ma : (smma[1] * (len - 1) + src) / len smma fastSma = ta.sma(src, fastSmmaLen) midSma = ta.sma(src, midSmmaLen) slowSma = ta.sma(src, slowSmmaLen) fastSmma = smma(fastSma, src, fastSmmaLen) midSmma = smma(midSma, src, midSmmaLen) slowSmma = smma(slowSma, src, slowSmmaLen) isSmmaUpward = ta.rising(fastSmma, 1) and ta.rising(midSmma, 1) and ta.rising(slowSmma, 1) var bool uptrend = na var float EP = na var float SAR = na var float AF = start var float nextBarSAR = na if bar_index > 0 firstTrendBar = false SAR := nextBarSAR if bar_index == 1 float prevSAR = na float prevEP = na lowPrev = low[1] highPrev = high[1] closeCur = close closePrev = close[1] if closeCur > closePrev uptrend := true EP := high prevSAR := lowPrev prevEP := high else uptrend := false EP := low prevSAR := highPrev prevEP := low firstTrendBar := true SAR := prevSAR + start * (prevEP - prevSAR) if uptrend if SAR > low firstTrendBar := true uptrend := false SAR := math.max(EP, high) EP := low AF := start else if SAR < high firstTrendBar := true uptrend := true SAR := math.min(EP, low) EP := high AF := start if not firstTrendBar if uptrend if high > EP EP := high AF := math.min(AF + increment, maximum) else if low < EP EP := low AF := math.min(AF + increment, maximum) if uptrend SAR := math.min(SAR, low[1]) if bar_index > 1 SAR := math.min(SAR, low[2]) else SAR := math.max(SAR, high[1]) if bar_index > 1 SAR := math.max(SAR, high[2]) nextBarSAR := SAR + AF * (EP - SAR) sarIsUpTrend = uptrend ? true : false sarFlippedDown = sarIsUpTrend and not sarIsUpTrend[1] ? true : false sarFlippedUp = not sarIsUpTrend and sarIsUpTrend[1] ? true : false longEntryCondition = isSmmaUpward and sarFlippedDown shortEntryCondition = not isSmmaUpward and sarFlippedUp if(longEntryCondition) strategy.entry("L", strategy.long, stop=nextBarSAR, comment="L") if(shortEntryCondition) strategy.entry("S", strategy.short, stop=nextBarSAR, comment="S") strategy.exit("CL", when=strategy.position_size > 0, limit=strategy.position_avg_price * (1+take_profit), stop=strategy.position_avg_price*(1-stop_loss)) strategy.exit("CS", when=strategy.position_size < 0, limit=strategy.position_avg_price * (1-take_profit), stop=strategy.position_avg_price*(1+stop_loss)) plot(SAR, style=plot.style_cross, linewidth=1, color=color.orange) plot(nextBarSAR, style=plot.style_cross, linewidth=1, color=color.aqua) plot(series = fastSmma, title="fastSmma", linewidth=1) plot(series = midSmma, title="midSmma", linewidth=2) plot(series = slowSmma, title="slowSmma", linewidth=3) plotchar(series = isSmmaUpward, title="isSmmaUpward", char='') plotchar(series=sarIsUpTrend, title="sarIsUpTrend", char='') plotchar(series=sarFlippedUp, title="sarFlippedUp", char='') plotchar(series=sarFlippedDown, title="sarFlippedDown", char='') plotchar(series=longEntryCondition, title="longEntryCondition", char='') plotchar(series=shortEntryCondition, title="shortEntryCondition", char='') plotchar(series=strategy.position_size > 0, title="inLong", char='') plotchar(series=strategy.position_size < 0, title="inShort", char='') //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)