Estratégia de negociação de acompanhamento de tendência multiperíodo com base em EMA e RSI estocástico


Data de criação: 2024-03-08 17:32:38 última modificação: 2024-03-08 17:32:38
cópia: 3 Cliques: 772
1
focar em
1617
Seguidores

Estratégia de negociação de acompanhamento de tendência multiperíodo com base em EMA e RSI estocástico

Visão geral da estratégia

A estratégia, denominada “Estratégia de negociação de acompanhamento de tendências de múltiplos períodos baseada em EMA e RSI aleatório”, usa a média móvel do índice (EMA) e o indicador RSI aleatório de dois períodos diferentes para capturar a tendência de médio e longo prazo do mercado. A ideia central da estratégia é determinar a direção da tendência através do cruzamento da EMA, combinando o RSI aleatório como sinal de confirmação de tendência e de alerta de reversão para construir posições no início da formação da tendência e fechar posições no final da tendência.

Princípio da estratégia

  1. Calcule o EMA rápido e o EMA lento. O parâmetro padrão do EMA rápido é 12, o parâmetro padrão do EMA lento é 25 e pode ser ajustado de acordo com as características do mercado e a frequência de negociação em aplicações reais.

  2. A tendência para a falta de espaço:

  • Quando uma EMA rápida atravessa uma EMA lenta, gera um sinal de visualização
  • Quando a EMA rápida atravessa a EMA lenta, gera um sinal de vista livre
  1. Confirmação de tendência: Após o surgimento do sinal de ver mais / ver menos, são necessários 2 linhas de ver mais / ver menos K para confirmar a formação de tendência. Isso ajuda a filtrar os falsos sinais.

  2. Usando o RSI aleatório como julgamento auxiliar:

  • Quando o RSI aleatório %K atravessa o %D e o %K está abaixo de 20, um sinal de oversold é gerado, indicando uma possível reversão de alta
  • Quando o RSI %K aleatório atravessa o %D e o %K está acima de 80, um sinal de sobrevenda é gerado, indicando uma possível reversão de queda
  1. Estratégia de negociação:
  • Quando a EMA produz um sinal de compra e o RSI aleatório não está na zona de sobrecompra, abra uma posição de compra
  • Quando a EMA produz um sinal de baixa e o RSI aleatório não está na zona de oversold, abre uma posição

Vantagens estratégicas

  1. Usando simultaneamente dois EMAs de diferentes períodos, é possível equilibrar melhor a sensibilidade e a confiabilidade da captura de tendências. A análise mostra que a combinação de EMAs do ciclo 1225 é melhor para a captura de tendências de médio e longo prazo.

  2. O mecanismo de confirmação de tendências pode filtrar eficazmente a maioria dos sinais falsos, aumentando a probabilidade de vitória da estratégia.

  3. O RSI aleatório serve como um juízo auxiliar, ajudando a determinar a força da tendência no início da tendência, e prevendo uma possível reversão da tendência no final da tendência.

  4. A lógica da estratégia é simples, com poucos parâmetros, fácil de entender e implementar, e aplicável a vários mercados e variedades.

Análise de Riscos

  1. A EMA é um indicador de atraso, com um grande deslizamento no início da reversão da tendência.

  2. A estratégia de tendência geralmente se apresenta em uma cidade em choque. Esta estratégia não possui um julgamento especializado em uma cidade em choque.

  3. O RSI aleatório pode ser distorcido em situações de forte volatilidade do mercado, afetando a qualidade do julgamento.

  4. Os parâmetros fixos podem não ser adaptados a todas as condições de mercado e precisam ser ajustados de acordo com a dinâmica das características do mercado.

Direção de otimização

  1. A introdução de indicadores de volatilidade, como o ATR, ajusta os parâmetros do EMA de acordo com a dinâmica da volatilidade para adaptar-se a diferentes ritmos de mercado.

  2. Aumentar o julgamento de mercados em turbulência, por exemplo, combinando com a direção da abertura da zona de Brin, para evitar a frequência de transações em mercados em turbulência.

  3. A integração de mais dados auxiliares, como variações de volume de transação, na base do RSI aleatório aumenta a confiabilidade do sinal.

  4. Considerar a relevância do mercado, introduzir sinais multivariados de interligação e aumentar a resistência ao risco do sistema.

Resumir

A estratégia aproveita ao máximo as vantagens da EMA e do RSI aleatório para formar uma estratégia de negociação de médio e longo prazo baseada no rastreamento de tendências e na reversão de dinâmica. Através da captura de tendências em linha reta, a confirmação de força de tendência e a reversão de alerta aleatória do RSI, o mecanismo de confirmação de tendência melhora a qualidade do sinal, os três combinam-se organicamente para formar uma estrutura de estratégia de negociação quantitativa simples e eficaz.

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

//@version=5
strategy('[Jacky] Trader XO Macro Trend Scanner', overlay=true)

// Variables
var ok = 0
var countBuy = 0
var countSell = 0
src = input(close, title='OHLC Type')
i_fastEMA = input(12, title='Fast EMA')
i_slowEMA = input(25, title='Slow EMA')
i_defEMA = input(25, title='Consolidated EMA')

// Allow the option to show single or double EMA
i_bothEMAs = input(title='Show Both EMAs', defval=true)

// Define EMAs
v_fastEMA = ta.ema(src, i_fastEMA)
v_slowEMA = ta.ema(src, i_slowEMA)
v_biasEMA = ta.ema(src, i_defEMA)

// Color the EMAs
emaColor = v_fastEMA > v_slowEMA ? color.green : v_fastEMA < v_slowEMA ? color.red : #FF530D

// Plot EMAs
plot(i_bothEMAs ? na : v_biasEMA, color=emaColor, linewidth=3, title='Consolidated EMA')
plot(i_bothEMAs ? v_fastEMA : na, title='Fast EMA', color=emaColor)
plot(i_bothEMAs ? v_slowEMA : na, title='Slow EMA', color=emaColor)

// Colour the bars
buy = v_fastEMA > v_slowEMA
sell = v_fastEMA < v_slowEMA

if buy
    countBuy += 1
    countBuy

if buy
    countSell := 0
    countSell

if sell
    countSell += 1
    countSell

if sell
    countBuy := 0
    countBuy

buysignal = countBuy < 2 and countBuy > 0 and countSell < 1 and buy and not buy[1]
sellsignal = countSell > 0 and countSell < 2 and countBuy < 1 and sell and not sell[1]

barcolor(buysignal ? color.green : na)
barcolor(sellsignal ? color.red : na)

// Strategy backtest
if (buysignal)
    strategy.entry("Buy", strategy.long)

if (sellsignal)
    strategy.entry("Sell", strategy.short)

// Plot Bull/Bear

plotshape(buysignal, title='Bull', text='Bull', style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.black, 0), size=size.tiny)
plotshape(sellsignal, title='Bear', text='Bear', style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.black, 0), size=size.tiny)

bull = countBuy > 1
bear = countSell > 1

barcolor(bull ? color.green : na)
barcolor(bear ? color.red : na)

// Set Alerts

alertcondition(ta.crossover(v_fastEMA, v_slowEMA), title='Bullish EMA Cross', message='Bullish EMA crossover')
alertcondition(ta.crossunder(v_fastEMA, v_slowEMA), title='Bearish EMA Cross', message='Bearish EMA Crossover')

// Stoch RSI code

smoothK = input.int(3, 'K', minval=1)
smoothD = input.int(3, 'D', minval=1)
lengthRSI = input.int(14, 'RSI Length', minval=1)
lengthStoch = input.int(14, 'Stochastic Length', minval=1)

rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)

bandno0 = input.int(80, minval=1, title='Upper Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
bandno2 = input.int(50, minval=1, title='Middle Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
bandno1 = input.int(20, minval=1, title='Lower Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')

// Alerts

crossoverAlertBgColourMidOnOff = input.bool(title='Crossover Alert Background Colour (Middle Level) [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourOBOSOnOff = input.bool(title='Crossover Alert Background Colour (OB/OS Level) [ON/OFF]', group='Crossover Alerts', defval=false)

crossoverAlertBgColourGreaterThanOnOff = input.bool(title='Crossover Alert >input [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourLessThanOnOff = input.bool(title='Crossover Alert <input [ON/OFF]', group='Crossover Alerts', defval=false)

maTypeChoice = input.string('EMA', title='MA Type', group='Moving Average', options=['EMA', 'WMA', 'SMA', 'None'])
maSrc = input.source(close, title='MA Source', group='Moving Average')
maLen = input.int(200, minval=1, title='MA Length', group='Moving Average')

maValue = if maTypeChoice == 'EMA'
    ta.ema(maSrc, maLen)
else if maTypeChoice == 'WMA'
    ta.wma(maSrc, maLen)
else if maTypeChoice == 'SMA'
    ta.sma(maSrc, maLen)
else
    0

crossupCHECK = maTypeChoice == 'None' or open > maValue and maTypeChoice != 'None'
crossdownCHECK = maTypeChoice == 'None' or open < maValue and maTypeChoice != 'None'

crossupalert = crossupCHECK and ta.crossover(k, d) and (k < bandno2 or d < bandno2)
crossdownalert = crossdownCHECK and ta.crossunder(k, d) and (k > bandno2 or d > bandno2)
crossupOSalert = crossupCHECK and ta.crossover(k, d) and (k < bandno1 or d < bandno1)
crossdownOBalert = crossdownCHECK and ta.crossunder(k, d) and (k > bandno0 or d > bandno0)

aboveBandalert = ta.crossunder(k, bandno0)
belowBandalert = ta.crossover(k, bandno1)

bgcolor(color=crossupalert and crossoverAlertBgColourMidOnOff ? #4CAF50 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert Background Colour (Middle Level)', transp=70)
bgcolor(color=crossupOSalert and crossoverAlertBgColourOBOSOnOff ? #fbc02d : crossdownOBalert and crossoverAlertBgColourOBOSOnOff ? #000000 : na, title='Crossover Alert Background Colour (OB/OS Level)', transp=70)

bgcolor(color=aboveBandalert and crossoverAlertBgColourGreaterThanOnOff ? #ff0014 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert - K > Upper level', transp=70)
bgcolor(color=belowBandalert and crossoverAlertBgColourLessThanOnOff ? #4CAF50 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert - K < Lower level', transp=70)

alertcondition(crossupalert or crossdownalert, title='Stoch RSI Crossover', message='STOCH RSI CROSSOVER')