Estratégia de negociação Supertrend baseada na combinação de ATR e MA


Data de criação: 2023-12-01 16:40:27 última modificação: 2023-12-01 16:40:27
cópia: 0 Cliques: 1074
1
focar em
1619
Seguidores

Estratégia de negociação Supertrend baseada na combinação de ATR e MA

Visão geral

A estratégia de negociação de super tendências é uma estratégia de acompanhamento de tendências baseada no real médio (ATR) e na média móvel (MA). Combina os benefícios do acompanhamento de tendências e da negociação de rupturas para identificar a direção da tendência a médio prazo e gerar sinais de negociação de acordo com a mudança de tendência.

A principal idéia da estratégia é que, quando o preço quebra o canal da supertrend, indica que a tendência está se reversando, sendo então feita uma compra ou venda. Simultaneamente, ele define níveis de stop loss e stop loss para bloquear o lucro e controlar o risco.

Princípio da estratégia

O processo de cálculo da estratégia de super-trends é dividido em várias etapas:

  1. Calcule o ATR. O ATR reflete a amplitude média de flutuação durante um período.
  2. A mediana do canal é calculada de acordo com o preço máximo e o preço mínimo. A fórmula para a mediana do canal é: ((o preço máximo + o preço mínimo) / 2
  3. O limite superior e inferior do canal são calculados de acordo com o ATR e o número de ATR definido pelo usuário. A fórmula de cálculo do limite superior do canal é: linha média + ((ATR × ATR)); a fórmula de cálculo do limite inferior do canal é: linha média - ((ATR × ATR))
  4. Comparar a relação entre o preço de fechamento e o limite superior e inferior do canal, para determinar a direção da tendência. O preço de fechamento acima do limite superior do canal é a tendência para cima, e o preço de fechamento abaixo do limite inferior do canal é a tendência para baixo.
  5. Quando o preço quebra o canal de tendência, execute uma negociação inversa. Por exemplo, o preço quebra o limite superior do canal de baixo para cima, gerando um sinal de compra; o preço quebra o limite inferior do canal de cima para baixo, gerando um sinal de venda.

A vantagem desta estratégia é que ela combina a forma de negociação de seguir a tendência com a reversão da tendência. Ela pode determinar a direção da grande tendência e capturar oportunidades de reversão em tempo hábil. Além disso, ela também possui um mecanismo de parada de perda para controlar o risco.

Análise de vantagens

A estratégia de super tendências tem as seguintes vantagens:

1. Seguir as tendências a médio prazo

O canal de tendências super é baseado em cálculos de ATR e é capaz de refletir efetivamente a amplitude de flutuação de preços a médio prazo. Ele é mais capaz de acompanhar as tendências a médio prazo do que a média móvel normal.

2. Capturar a reversão em tempo hábil

Quando o preço quebra um canal, ele emite um sinal de negociação rápido para capturar a reversão da grande tendência em tempo hábil. Isso garante um ajuste apropriado da posição e reduz a posse de longo prazo.

3. Mecanismos anti-destruição

Esta estratégia define simultaneamente o ponto de parada e o ponto de parada, o que permite a parada automática do ponto de parada. Isso reduz consideravelmente o risco de perda generalizada, o que ajuda a entender a tendência.

4. Simplicidade de implementação

A estratégia usa principalmente a linha média e o indicador ATR, o que torna a implementação mais simples e fácil de dominar. Isso reduz a dificuldade de operação no disco.

5. Eficiência na utilização dos recursos

A estratégia de super tendências acompanha a tendência de médio prazo e controla os pontos de deslizamento individuais, resultando em uma maior eficiência na utilização do capital.

Análise de Riscos

A estratégia de super-trends também tem alguns riscos potenciais:

1. O alto custo de oportunidade de uma tendência de choque

A estratégia de super tendências foca no acompanhamento de tendências de médio e longo prazo, com custos mais elevados em mercados com agitação, podendo perder algumas oportunidades de curto prazo.

2. Parâmetros de otimização de influência

A escolha do ciclo ATR e do múltiplo ATR tem um impacto maior na eficácia da estratégia de negociação. Se os parâmetros forem mal configurados, o efeito do sinal de negociação será reduzido.

3. Há um certo atraso

O cálculo do canal de super-trend apresenta um certo atraso, o que pode levar a uma falta de tempo na geração de sinais. Este é o principal problema que a estratégia precisa resolver.

4. Necessidade de um controlo rigoroso dos danos.

Se a posição de parada for definida de forma excessiva ou se o controle de vento não for perfeito, pode ocorrer um grande prejuízo em situações extremas. Portanto, a estratégia de parada deve ser rigorosamente executada para obter um lucro estável.

Direção de otimização

A estratégia de super tendências também tem espaço para uma maior otimização, incluindo:

1. Combinação de múltiplos ciclos ATR

Pode-se combinar vários ciclos de ATR, por exemplo, 10 dias, 20 dias, para formar um indicador ATR combinado. Isso pode aumentar a sensibilidade do indicador e melhorar o problema do atraso.

2. Adição de módulo de estratégia de stop loss

Além disso, o aumento de módulos de estratégia, como a parada tripla, a parada de oscilação e a parada de sequência, pode fortalecer ainda mais o controle de parada, reduzindo assim o risco de perda.

3. Optimizar configurações de parâmetros

Otimizar a configuração de parâmetros, como o ciclo ATR, a multiplicação do ATR, a busca da combinação ideal de parâmetros, pode aumentar ainda mais o lucro da estratégia. Além disso, os parâmetros também podem ser otimizados dinamicamente, selecionando os valores apropriados de acordo com diferentes variedades e fases do mercado.

4. Modelos de aprendizagem de máquina integrados

Finalmente, pode-se tentar integrar modelos de aprendizagem de máquina para automatizar o julgamento de tendências e a geração de sinais. Isso pode reduzir a interferência de fatores subjetivos e potencialmente aumentar ainda mais a estabilidade do sistema de estratégia.

Resumir

A estratégia de negociação de super tendências usa o indicador de linha média e o indicador ATR para avaliar a tendência intermédia e, ao inverter a tendência, gera um sinal de negociação para realizar um stop loss automático. Ao mesmo tempo em que capta a tendência maior, a estratégia também pode aproveitar em tempo útil algumas oportunidades de reversão. Sua vantagem se reflete principalmente nos três aspectos de acompanhamento de tendências intermédias, identificação de reversão de tendências e controle de stop loss.

Mas a estratégia também tem algumas deficiências, principalmente a falta de compreensão e atraso no cenário de choque. Isso requer otimização de várias maneiras, como o ciclo ATR combinado, o aumento do módulo de parada de perdas, a otimização de parâmetros e a introdução de aprendizado de máquina. Isso, sem dúvida, pode aumentar ainda mais a estabilidade e a taxa de ouro da estratégia de supertrend.

Código-fonte da estratégia
/*backtest
start: 2022-11-30 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Supertrend V1.0 - Buy or Sell Signal",overlay=true)
Factor=input(3, minval=1,maxval = 100)
Pd=input(7, minval=1,maxval = 100)
//Calculating ATR
atrLength = input(title="ATR Length:",  defval=14, minval=1)
Stop_Loss_Factor = input(1.5, minval=0,step=0.01)
factor_profit = input(1.0, minval=0,step=0.01)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 10, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2016, title = "From Year", minval = 2009)
ToMonth   = input(defval = 4, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 10, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2039, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"


// Calculate ATR
atrValue=atr(atrLength)
decimals = abs(log(syminfo.mintick) / log(10)) 
Atr = atrValue
if(decimals == 5)
    Atr := atrValue * 10000
if(decimals == 4)
    Atr := atrValue * 1000
if(decimals == 3)
    Atr := atrValue * 100
if(decimals == 2)
    Atr := atrValue * 10


//VJ2 Supertrend

Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))

TrendUp = 0.0
TrendUp:=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown = 0.0
TrendDown:=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn

Trend = 0.0
Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl = 0.0
Tsl := Trend==1? TrendUp: TrendDown

linecolor = Trend == 1 ? green : red

plot(Tsl, color = linecolor , style = line , linewidth = 2,title = "SuperTrend")

plotshape(cross(close,Tsl) and close>Tsl , "Up Arrow", shape.triangleup,location.belowbar,green,0,0)
plotshape(cross(Tsl,close) and close<Tsl , "Down Arrow", shape.triangledown , location.abovebar, red,0,0)
//plot(Trend==1 and Trend[1]==-1,color = linecolor, style = circles, linewidth = 3,title="Trend")

plotarrow(Trend == 1 and Trend[1] == -1 ? Trend : na, title="Up Entry Arrow", colorup=lime, maxheight=60, minheight=50, transp=0)
plotarrow(Trend == -1 and Trend[1] == 1 ? Trend : na, title="Down Entry Arrow", colordown=red, maxheight=60, minheight=50, transp=0)




//Strategy 
Trend_buy = Trend == 1 
Trend_buy_prev = Trend[1] == -1
algo_buy_pre = Trend_buy and Trend_buy_prev
algo_buy = algo_buy_pre == 1 ? 1 : na
Trend_sell= Trend == -1 
Trend_sell_prev = Trend[1] == 1
algo_sell_pre = Trend_sell and Trend_sell_prev
algo_sell = algo_sell_pre == 1 ? 1:na

strategy.entry("Long1", strategy.long, when= window() and algo_buy==1)

strategy.entry("Short1", strategy.short, when=window() and algo_sell==1)

bought = strategy.position_size > strategy.position_size 
sold = strategy.position_size < strategy.position_size 

longStop = Stop_Loss_Factor * valuewhen(bought, Atr, 0) 
shortStop = Stop_Loss_Factor * valuewhen(sold, Atr, 0) 
longProfit = factor_profit * longStop 
shortProfit = factor_profit * shortStop 


if(decimals == 5) 
    longStop := longStop *100000 
    longProfit := longProfit *100000 
if(decimals == 4) 
    longStop := longStop * 10000 
    longProfit := longProfit * 10000 
if(decimals == 3) 
    longStop := longStop * 1000 
    longProfit := longProfit * 1000 
if(decimals == 2) 
    longStop := longStop * 100 
    longProfit := longProfit *100 
if(decimals == 5) 
    shortStop := shortStop * 100000 
    shortProfit := shortProfit * 100000 
if(decimals == 4) 
    shortStop := shortStop * 10000 
    shortProfit := shortProfit * 10000 
if(decimals == 3) 
    shortStop := shortStop * 1000 
    shortProfit := shortProfit * 1000 
if(decimals == 2) 
    shortStop := shortStop * 100 
    shortProfit := shortProfit * 100 

strategy.exit("Exit Long", from_entry = "Long1", loss =longStop, profit = longProfit) 
strategy.exit("Exit Short", from_entry = "Short1", loss =shortStop, profit = shortProfit)