SuperTrend Estratégia Básica

Autora:ChaoZhang, Data: 2023-10-11 15:14:54
Tags:

Resumo

A estratégia básica SuperTrend é uma estratégia de negociação algorítmica confiável e lucrativa baseada em três indicadores poderosos: SuperTrend (ATR), RSI e EMA. Ela visa identificar a direção e a força das tendências do mercado, entrar no mercado em pontos ideais e sair quando o stop loss ou take profit é atingido.

Estratégia lógica

A estratégia usa o indicador SuperTrend para determinar se o preço está em uma tendência de alta ou baixa.

O RSI é usado para detectar condições de sobrecompra / sobrevenda. Acima de 50 é de alta e abaixo de 50 é de baixa. O RSI filtra sinais falsos.

A EMA avalia a direcção da tendência a longo prazo. Acima da EMA é a tendência ascendente, abaixo é a tendência descendente.

Os sinais de negociação são:

Entrada longa: Preço acima da SuperTrend e RSI acima de 50 e Preço acima da EMA Saída longa: O preço fecha abaixo de SuperTrend ou Stop loss ou Take profit

Entrada curta: Preço abaixo da SuperTrend e RSI abaixo de 50 e Preço abaixo da EMA Saída curta: O preço fecha acima de SuperTrend ou Stop loss ou Take profit

A taxa de stop loss e a taxa de take profit podem ser definidas em percentagem do preço de entrada.

Análise das vantagens

As vantagens desta estratégia:

  1. Combinação de 3 indicadores, detecção fiável de tendências

  2. SuperTrend identifica claramente tendências ascendentes e descendentes

  3. O RSI filtra falhas, evita sobrecompra/supervenda

  4. A EMA confirma a direcção geral da tendência

  5. Sinais de negociação simples e claros, fáceis de seguir

  6. Período ATR personalizável, parâmetros RSI e período EMA para otimização

  7. Stop loss e take profit para controlar o risco

  8. Modo apenas longo ou apenas curto para diferentes mercados

  9. Aplicável a qualquer período

Análise de riscos

Os principais riscos:

  1. O atraso da SuperTrend na inversão da tendência pode causar perdas.

  2. Pequenas perdas de stop/take profit não conseguem captar grandes movimentos

  3. A EMA não consegue detectar pontos de inversão da tendência

  4. Nenhuma detecção de divergência

  5. Ainda tem risco de volatilidade e risco de tempo

Soluções:

  1. Adicionar outros indicadores para detectar a inversão

  2. Otimizar o stop loss/take profit

  3. Adicionar outros indicadores à reversão spot

  4. Incorporar indicadores de divergência

  5. Ajustar o dimensionamento da posição

Orientações de otimização

Maneiras de otimizar a estratégia:

  1. Otimizar o período de ATR para sensibilidade e estabilidade

  2. Otimizar parâmetros RSI para maior precisão

  3. Otimizar o período de EMA para diferentes mercados

  4. Adicionar indicadores como MACD, KD para detecção de reversão

  5. Adicionar indicadores de divergência

  6. Use as Ondas de Elliott para detectar inversões

  7. Usar aprendizado de máquina para otimizar dinamicamente parâmetros

  8. Algoritmos avançados de stop loss como trailing stop loss

  9. Otimizar o dimensionamento das posições para diferentes volatilidades

  10. Teste condições de entrada e saída mais complexas

Conclusão

A estratégia básica SuperTrend integra SuperTrend, RSI e EMA em um sistema simples e prático de tendência. Identifica claramente a direção da tendência, filtra sinais falsos e confirma a tendência geral. Regras de entrada, saída e configuração de stop loss/take profit claras. Fácil de usar, lucratividade confiável. Aplicável a qualquer período de tempo. Pode ser otimizado ainda mais ajustando parâmetros, adicionando ferramentas de reversão, aprimorando paradas para se tornar um sistema de negociação mais poderoso.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 2h
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/
// © JS_TechTrading

//@version=5
// strategy("Supertrend", overlay=true,default_qty_type =strategy.percent_of_equity,default_qty_value = 1,process_orders_on_close = false)

// group string////
var string group_text000="Choose Strategy"
var string group_text0="Supertrend Settings"
var string group_text0000="Ema Settings"
var string group_text00="Rsi Settings"
var string group_text1="Backtest Period"
var string group_text2="Trade Direction"
// var string group_text3="Quantity Settings"
var string group_text4="Sl/Tp Settings"
////////////////////
option_ch=input.string('Pullback',title = "Type Of Strategy",options =['Pullback','Simple'])

//atr period input supertrend 
atrPeriod = input(10, "ATR Length",group = group_text0)
factor = input.float(3.0, "Factor", step = 0.01,group=group_text0)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)

fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)

long=direction < 0 ? supertrend : na
short=direction < 0? na : supertrend

longpos=false
shortpos=false

longpos :=long?true :short?false:longpos[1]
shortpos:=short?true:long?false:shortpos[1]

fin_pullbuy= (ta.crossunder(low[1],long) and long and high>high[1])
fin_pullsell=(ta.crossover(high[1],short) and short and low<low[1]) 

//Ema 1
on_ma=input.bool(true,"Ema Condition On/Off",group=group_text0000)
ma_len= input.int(200, minval=1, title="Ema Length",group = group_text0000)
ma_src = input.source(close, title="Ema Source",group = group_text0000)
ma_out = ta.ema(ma_src, ma_len)

ma_buy=on_ma?close>ma_out?true:false:true
ma_sell=on_ma?close<ma_out?true:false:true

// rsi indicator and condition
// Get user input
en_rsi    = input.bool(true,"Rsi Condition On/Off",group = group_text00)
rsiSource = input(title='RSI Source', defval=close,group = group_text00)
rsiLength = input(title='RSI Length', defval=14,group = group_text00)
rsiOverbought = input(title='RSI BUY Level', defval=50,group = group_text00)
rsiOversold   = input(title='RSI SELL Level', defval=50,group = group_text00)

// Get RSI value
rsiValue = ta.rsi(rsiSource, rsiLength)

rsi_buy=en_rsi?rsiValue>=rsiOverbought ?true:false:true
rsi_sell=en_rsi?rsiValue<=rsiOversold?true:false:true

// final condition
buy_cond=option_ch=='Simple'?long and not(longpos[1]) and rsi_buy and ma_buy:option_ch=='Pullback'?fin_pullbuy and rsi_buy and ma_buy:na
sell_cond=option_ch=='Simple'?short and not(shortpos[1]) and rsi_sell and ma_sell:option_ch=='Pullback'?fin_pullsell and rsi_sell and ma_sell:na

//backtest engine
start = input(timestamp('2005-01-01'), title='Start calculations from',group=group_text1)
end=input(timestamp('2045-03-01'), title='End calculations',group=group_text1)
time_cond =true

// Make input option to configure trade direction

tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both',group = group_text2)

// Translate input into trading conditions
longOK  = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")



// strategy start
if buy_cond and longOK and time_cond and strategy.position_size==0
    strategy.entry('long',direction = strategy.long)
if sell_cond and shortOK and time_cond and strategy.position_size==0
    strategy.entry('short',direction =strategy.short)

// fixed percentage based stop loss and take profit 

// User Options to Change Inputs (%)
stopPer = input.float(1.0,step=0.10, title='Stop Loss %',group =group_text4) / 100
takePer = input.float(1.0,step =0.10, title='Take Profit %',group =group_text4) / 100

// Determine where you've entered and in what direction
longStop  = strategy.position_avg_price * (1 - stopPer)
shortStop = strategy.position_avg_price * (1 + stopPer)
shortTake = strategy.position_avg_price * (1 - takePer)
longTake  = strategy.position_avg_price * (1 + takePer)


if strategy.position_size > 0
    strategy.exit(id='Close Long',stop=longStop, limit=longTake)
if strategy.position_size < 0
    strategy.exit(id='Close Short',stop=shortStop, limit=shortTake)

//PLOT FIXED SLTP LINE
plot(strategy.position_size > 0 ? longStop : na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Long Fixed SL')
plot(strategy.position_size < 0 ? shortStop :na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Short Fixed SL')
plot(strategy.position_size > 0 ? longTake : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='Long Take Profit')
plot(strategy.position_size < 0 ? shortTake : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='Short Take Profit')

//

Mais.