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

Autora:ChaoZhang, Data: 2023-12-01 16:40:27
Tags:

img

Resumo

A estratégia de negociação Supertrend é uma estratégia de seguimento de tendências baseada em média de True Range (ATR) e média móvel (MA). Incorpora as vantagens de rastreamento de tendências e negociação de ruptura para identificar a direção da tendência intermediária e gerar sinais de negociação com base em mudanças de tendência.

A ideia principal por trás desta estratégia é ir longo ou curto quando o preço atravessa o canal Supertrend, indicando uma inversão de tendência.

Como funciona essa estratégia

O cálculo da Supertrend envolve várias etapas:

  1. Calcular o ATR. O ATR reflete a volatilidade média ao longo de um período de tempo.
  2. Calcule a linha média com base no máximo máximo e no mínimo mínimo.
  3. Calcule o canal superior e inferior com base no ATR e no multiplicador ATR definidos pelo comerciante. O canal superior é calculado como: Midline + (ATR × Multiplier). O canal inferior é calculado como: Midline - (ATR × Multiplier).
  4. Compare o preço de fechamento com o canal superior/inferior para determinar a direção da tendência. Se o fechamento estiver acima do canal superior, a tendência é alta. Se o fechamento estiver abaixo do canal inferior, a tendência é baixa.
  5. Uma quebra acima ou abaixo do canal gera sinais de negociação reversa. Por exemplo, uma quebra acima do canal superior sinaliza entrada longa, enquanto uma quebra abaixo do canal inferior sinaliza entrada curta.

A vantagem desta estratégia é que combina técnicas de seguimento de tendências e de reversão de tendências. Identifica as principais tendências e também é capaz de capturar oportunidades de reversão em tempo hábil. Além disso, o mecanismo stop loss/take profit ajuda a controlar os riscos.

Forças

A estratégia Supertrend tem os seguintes pontos fortes:

1. Seguir a tendência intermédia

O canal Supertrend é calculado com base no ATR, que reflete efetivamente o intervalo de flutuação de preços intermediário.

2. Capture reversões em tempo hábil

As rupturas de preços do canal geram rapidamente sinais de negociação para que as principais inversões de tendência possam ser capturadas a tempo.

Ter stop loss e tirar lucro

A estratégia define níveis de stop loss predefinidos e de lucro para saída automática com controle de risco.

4. Simples de implementar

A estratégia usa principalmente indicadores básicos como MA e ATR. Isso torna bastante simples de entender e implementar para negociação ao vivo.

**5. Eficiência elevada do capital **

Através do acompanhamento das tendências intermediárias e do controlo dos deslizamentos individuais, a estratégia Supertrend proporciona uma elevada eficiência global do capital.

Análise de riscos

A estratégia Supertrend também tem algumas potenciais fraquezas:

1. Desempenho inferior no mercado de variáveis

A estratégia concentra-se na negociação de tendência de médio a longo prazo.

2. Sensível à otimização de parâmetros

Os valores escolhidos para o período ATR e o multiplicador têm impactos relativamente grandes no desempenho da estratégia.

3. Podem existir problemas de atraso

Pode haver alguns problemas de atraso no cálculo do canal Supertrend, causando geração de sinal prematura.

4. Requer-se uma gestão rigorosa de stop loss

Em condições de mercado extremas, uma tolerância de stop loss de dimensões inadequadas ou uma gestão de risco inadequada podem conduzir a perdas consideráveis.

Áreas de melhoria

Há ainda espaço para otimizar esta estratégia Supertrend:

1. Combinar vários períodos ATR

A combinação das leituras ATR em diferentes períodos, como 10 dias e 20 dias, forma um indicador composto, o que ajuda a melhorar a sensibilidade e os problemas de atraso.

2. Adicionar módulos de stop loss

A adição de mecanismos de stop loss mais sofisticados, como o triple stop loss, o volatility stop loss e o sequential stop loss, poderão reforçar o controlo do risco e a redução do drawdown.

3. Optimização de parâmetros

Otimizar os valores para o período ATR, o multiplicador e outros insumos através de métodos quantitativos aumentaria ainda mais o desempenho da estratégia.

4. Integrar modelos de aprendizagem de máquina

Finalmente, a integração de modelos de aprendizagem de máquina pode realizar o reconhecimento automatizado de tendências e geração de sinais, reduzindo a dependência de decisões subjetivas e melhorando a estabilidade do sistema.

Conclusão

A estratégia de negociação Supertrend identifica a direção da tendência intermediária usando indicadores MA e ATR, e gera sinais de entrada e saída de negociação em torno de inversões de tendência com implementação automatizada de stop loss/take profit.

No entanto, algumas deficiências também existem em relação à captura de mercado limitada ao intervalo insuficiente e problemas de atraso. Outras otimizações podem ser exploradas em várias dimensões, incluindo o uso de ATR composto, fortalecimento de módulos de stop loss, parâmetros de ajuste e integração de modelos de aprendizado de máquina. Essas melhorias provavelmente melhorarão a estabilidade e eficiência da estratégia Supertrend.


/*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) 


Mais.