Estratégia de reversão diária de supertendência


Data de criação: 2024-02-22 16:22:28 última modificação: 2024-02-22 16:22:28
cópia: 0 Cliques: 724
1
focar em
1617
Seguidores

Estratégia de reversão diária de supertendência

Visão geral

A estratégia de reversão diária de super tendência é uma estratégia de negociação quantitativa que usa indicadores de super tendência para determinar a tendência do mercado, combinando a ruptura de preços e o cálculo de stop loss do intervalo médio de flutuação real, além de usar indicadores de taxa de mudança de preço para filtrar os sinais de super tendência. A estratégia é adequada para a linha do dia e períodos de tempo mais altos, e pode ser usada em mercados como moedas digitais e ações.

Princípio da estratégia

O indicador de super tendência é baseado na média real da amplitude de oscilação (ATR), que permite determinar com mais clareza a direção da tendência do mercado. Quando o preço quebra a super tendência, ele é um sinal de baixa, e quando ele quebra, ele é um sinal de baixa.

A estratégia é complementada com o uso de indicadores de taxa de variação de preços (ROC) para filtrar os indicadores de tendência super, evitando sinais ineficazes. Participe do sinal de tendência super somente quando a volatilidade dos preços é maior, ou não participe.

Em termos de stop loss, a estratégia oferece dois tipos de stop loss: um stop loss fixo e um stop loss automático de retração baseado no ATR. O stop loss fixo é simples e direto, e o stop loss ATR pode ser ajustado de acordo com a volatilidade do mercado.

A condição de entrada é a reversão do indicador de supertrend e o indicador de taxa de mudança de preço passa pelo filtro. A condição de saída é a reversão da supertrend novamente ou a quebra da linha de parada. A estratégia segue o princípio de acompanhamento de tendências, permitindo apenas uma posição por direção.

Análise de vantagens

A maior vantagem da estratégia é a maior clareza e estabilidade na direção da tendência usando indicadores de tendência super, com menor ruído em comparação com a média móvel comum. Além disso, a estratégia inclui indicadores de taxa de variação de preços para filtrar efetivamente alguns sinais falsos.

O mecanismo ATR de stop-loss também permite que a estratégia se adapte a um ambiente de mercado mais amplo. O stop-loss é automaticamente relaxado quando a volatilidade aumenta, maximizando o lucro.

De acordo com os resultados dos testes, a estratégia tem um excelente desempenho em mercados de alta volumes. A taxa de vitória é alta em tendências de longa linha de maior volume, com longos períodos de lucro consecutivos.

Análise de Riscos

O principal risco para a estratégia é o erro de julgamento de reversão de tendência, que pode perder um sinal de reversão ou gerar um sinal de reversão desnecessário. Isso geralmente ocorre quando o preço é reorganizado horizontalmente repetidamente perto de áreas de suporte ou resistência importantes.

Além disso, a configuração de stop-loss muito relaxada também pode levar à expansão dos prejuízos. O stop-loss do ATR é ajustado de acordo com a volatilidade do mercado, portanto, o stop-loss pode ser mais amplo em caso de surto no mercado.

De acordo com os riscos acima, pode ser apropriadamente reduzido o ciclo de cálculo do ATR ou ajustar o fator múltiplo do ATR de parada. Também pode ser adicionado um indicador adicional para determinar as principais áreas de resistência de suporte, evitando que essas áreas emitam sinais enganosos.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Ajustar os parâmetros do indicador de super-tendência, otimizar o ciclo ATR e o múltiplo ATR para tornar a linha de super-tendência mais suave.

  2. Ajustar os parâmetros do indicador de variação de preço, otimizar o ciclo e o limiar de variação, reduzir os falsos sinais.

  3. Tente diferentes mecanismos de suspensão, como rastreamento de suspensão ou otimização da amplitude de suspensão de suspensão fixa.

  4. Adicionar indicadores de julgamento adicionais, identificar resistências de suporte críticas e evitar erros de julgamento de reversão de tendência.

  5. Teste a configuração e o efeito de diferentes variedades de parâmetros, procurando a combinação ideal de parâmetros.

  6. Otimizar o feedback para encontrar a melhor configuração de parâmetros.

Resumir

A estratégia de reversão da linha do dia da super tendência é, em geral, uma estratégia de acompanhamento de tendência mais estável e confiável. Ela combina o indicador de tendência super e o indicador de taxa de mudança de preço para filtrar e identificar efetivamente a direção da tendência da linha média e longa. O mecanismo de stop loss do ATR também permite que ele se adapte à maior parte do ambiente do mercado.

Código-fonte da estratégia
/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Super Trend Daily BF 🚀", overlay=true, precision=2, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
_1 = input(false,  "════════ Test Period ═══════")
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// Super Trend /////////////
_2 = input(false,  "══════ Super Trend ══════")
length = input(title="ATR Period", type=input.integer, defval=3)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=1.3)

atr = mult * atr(length)

longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop :=  close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and close > shortStopPrev ? 1 : dir == 1 and close < longStopPrev ? -1 : dir

///////////// Rate Of Change ///////////// 
_3 = input(false,  "══════ Rate of Change ══════")
source = close
roclength = input(30, "ROC Length",  minval=1)
pcntChange = input(6, "ROC % Change", minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

///////////////  Strategy  /////////////// 
long = dir == 1 and dir[1] == -1 and isMoving()
short = dir == -1 and dir[1] == 1 and isMoving()

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

/////////////// Dynamic ATR Stop Losses ///////////////
_4 = input(false,  "════════ Stop Loss ═══════")
SL_type = input("Fixed", options=["Fixed", "ATR Derived"], title="Stop Loss Type")
sl_inp = input(6.0, title='Fixed Stop Loss %') / 100
atrLkb = input(20, minval=1, title='ATR Stop Period')
atrMult = input(1.5, step=0.25, title='ATR Stop Multiplier') 
atr1 = atr(atrLkb)

longStop1 = 0.0
longStop1 :=  short_signal ? na : long_signal ? close - (atr1 * atrMult) : longStop1[1]
shortStop1 = 0.0
shortStop1 := long_signal ? na : short_signal ? close + (atr1 * atrMult) : shortStop1[1]

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution ///////////////
if testPeriod()
    strategy.entry("L", strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop = SL_type == "Fixed" ? long_sl : longStop1, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop = SL_type == "Fixed" ? short_sl : shortStop1, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
bgcolor(isMoving() ? dir == 1 ? color.lime : color.red : color.white , transp=80)