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.
O cálculo da Supertrend envolve várias etapas:
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.
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.
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.
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.
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)