Estratégia de negociação de média móvel exponencial dupla RSI

Autora:ChaoZhang, Data: 2024-01-30 15:44:11
Tags:

img

Resumo

A estratégia é chamada Double Exponential Moving Average RSI Trading Strategy. Ele usa o Double EMA e o Relative Strength Index (RSI) como os principais indicadores de negociação para implementar a negociação automatizada.

Princípio da estratégia

A estratégia primeiro calcula a média móvel exponencial dupla (MA) do preço, em seguida, calcula o RSI com base no MA e calcula a média móvel exponencial do RSI (Smooth). Gerar sinais de compra quando o RSI cruza acima de sua média móvel e sinais de venda quando o RSI cruza abaixo de sua média móvel. Opcionalmente, a estratégia também define parâmetros para o número máximo de negociações por dia, tamanho do comércio como porcentagem do capital, sessão de tempo de negociação, take profit e stop loss em pontos e trailing stop em pontos para controle de risco.

Forças da estratégia

  1. A dupla EMA responde mais rapidamente às mudanças de preços e filtra algum ruído.
  2. Calcular o RSI com base na MA torna-o mais estável e evita trocas falsas.
  3. A média móvel do RSI ajuda a confirmar os sinais de negociação e evitar falhas.
  4. Estabelecer o número máximo de transacções por dia ajuda a controlar o risco diário.
  5. A fixação do tamanho das transacções em percentagem do capital próprio evita perdas excessivamente elevadas por transacção única.
  6. A definição do horário da sessão de negociação evita nós de tempo chave e controla o risco de liquidez.
  7. O lucro e o stop loss em pontos ajudam a limitar os lucros e perdas do comércio único.
  8. O atraso em pontos ajuda a bloquear os lucros flutuantes e reduzir os drawdowns.

Riscos estratégicos

  1. A dupla EMA reage mais lentamente aos acontecimentos do mercado, perdendo oportunidades de negociação de curto prazo.
  2. O RSI é propenso a formar falsos sinais de morte/cruz de ouro.
  3. A percentagem fixa do capital próprio não pode adaptar-se à variação da volatilidade do mercado, o que implica um risco de utilização insuficiente dos fundos.
  4. Os objetivos fixos de stop loss/lucro não se adaptam aos diferentes produtos e condições de mercado, e correm o risco de uma saída prematura.
  5. O trailing stop tende a desencadear-se com demasiada frequência em mercados agitados.

Contramedidas:

  1. Encurtar os períodos de MA para melhorar a sensibilidade.
  2. Adicione outros indicadores como volume para filtrar sinais.
  3. Ajuste dinâmico do tamanho do comércio.
  4. Adaptar as metas de stop loss/lucro com base na volatilidade do mercado.
  5. Relaxe os pontos de stop loss adequadamente.

Orientações de otimização

  1. Teste diferentes combinações de EMA dupla de curto/longo prazo para encontrar parâmetros ótimos.
  2. Testar os parâmetros do período de cálculo do RSI para melhorar a fiabilidade do sinal morte/cruz dourada.
  3. Adicione indicadores como volume, Bandas de Bollinger para filtrar o ruído do sinal.
  4. Ajustar dinamicamente o tamanho das transações e as metas de stop loss/lucro com base no preço de fechamento diário, na volatilidade, etc.
  5. Otimizar os mecanismos de trailing stop para diferentes produtos e ambientes de mercado.

Resumo

A estratégia tem regras mecânicas claras e alta confiabilidade geral, adequada para produtos de tendência de médio a longo prazo.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='[STRATEGY][RS]DemaRSI V0', shorttitle='D', overlay=false, initial_capital=100000, currency=currency.USD)
src = input(close)
ma_length = input(21)
rsi_length = input(4)
rsi_smooth = input(4)

ma = ema(ema(src, ma_length), ma_length)
marsi = rsi(ma, rsi_length)
smooth = ema(marsi, rsi_smooth)
plot(title='M', series=marsi, color=black)
plot(title='S', series=smooth, color=red)
hline(0)
hline(50)
hline(100)

max_order_per_day = input(6)
// strategy.risk.max_intraday_filled_orders(max_order_per_day)
trade_size_as_equity_factor = input(false)
trade_size = input(type=float, defval=10000.00) * (trade_size_as_equity_factor ? strategy.equity : 1)
take_profit_in_points = input(100000)
stop_loss_in_points = input(100000)
trail_in_points = input(150)

USE_SESSION = input(true)
trade_session = input(title='Trade Session:', defval='0400-1500', confirm=false)
istradingsession = not USE_SESSION ? true : not na(time('1', trade_session))

buy_entry = istradingsession and crossover(marsi, smooth)
sel_entry = istradingsession and crossunder(marsi, smooth)

strategy.entry('buy', long=true, qty=1, when=buy_entry)
strategy.entry('sel', long=false, qty=1, when=sel_entry)

strategy.exit('buy.Exit', from_entry='buy', profit=take_profit_in_points, loss=stop_loss_in_points, trail_points=trail_in_points, trail_offset=trail_in_points)
strategy.exit('sel.Exit', from_entry='sel', profit=take_profit_in_points, loss=stop_loss_in_points, trail_points=trail_in_points, trail_offset=trail_in_points)
strategy.close_all(when=not istradingsession)

Mais.