Tendência na sequência da estratégia EMA e RSI

Autora:ChaoZhang, Data: 23 de janeiro de 2023
Tags:

Resumo

Esta estratégia aproveita ao máximo as médias móveis e o índice de força relativa para identificar e seguir tendências.

Estratégia lógica

A estratégia usa três EMAs com períodos diferentes, com a EMA-A tendo o período mais curto, a EMA-B média e a EMA-C a mais longa. Quando a EMA-A mais curta cruza acima da EMA-B mais longa, ela sinaliza uma tendência ascendente, assim indo longa. Por outro lado, quando a EMA-A cruza abaixo da EMA-B, ela sinaliza uma tendência descendente, assim indo curta. Para filtrar falsos sinais, ela também usa a EMA-C mais longa - considerando apenas a entrada após o preço quebrar a EMA-C.

A estratégia também usa o RSI para localizar pontos de saída. Quando longo, fecha a posição se o RSI cruzar acima de 70. Quando curto, sai se o RSI cair abaixo de 30.

Análise das vantagens

  • Utiliza a força da EMA na identificação de tendências
  • RSI ajuda no momento de entrada e saída
  • Estratégia simples com apenas 2 indicadores
  • Parâmetros personalizáveis para ajustar o estilo da estratégia
  • Lucros das fases iniciais, médias e finais da tendência

Análise de riscos

  • Os retrocessos nas principais tendências podem gerar falsos sinais
  • Vulnerável a fugas de arco-íris em mercados variados
  • Parâmetros de RSI inadequados podem causar saídas prematuras
  • Os períodos da EMA necessitam de uma selecção cuidadosa, demasiado curtos podem ser sensíveis ao ruído, demasiado longos podem perder as tendências

Estes riscos podem ser reduzidos através da otimização dos parâmetros do RSI, adicionando filtros e combinando com a análise de tendências.

Orientações de otimização

  • Otimizar os parâmetros do RSI para uma melhor obtenção de lucros e controlo de riscos
  • Teste diferentes combinações de períodos da EMA
  • Adicionar volume ou outros indicadores de confirmação
  • Usar o ATR para dimensionar o stop loss
  • Considerar a redução do tamanho da posição no meio da tendência
  • Otimizar o tempo de entrada com breakouts, volume, etc.
  • Explorar mecanismos de reentrada

Resumo

Esta estratégia combina indicadores de seguimento de tendências e osciladores para identificação e captura de tendências. Com parâmetros simples e otimização de lógica, pode ser muito melhorada mantendo a simplicidade.


/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 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/
//@author Alorse

//@version=5
// strategy(title='Tendency EMA + RSI [Alorse]', shorttitle='Tendece EMA + RSI [Alorse]', overlay=true, pyramiding=0, currency=currency.USD, default_qty_type=strategy.percent_of_equity, initial_capital=1000, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.01)

// Bollinger Bands
len = input.int(14, minval=1, title='Length', group='RSI')
src = input.source(close, 'Source', group='RSI')
rsi = ta.rsi(src, len)

// Moving Averages
len_a = input.int(10, minval=1, title='EMA A Length', group='Moving Averages')
out_a = ta.ema(close, len_a)
plot(out_a, title='EMA A', color=color.purple)

len_b = input.int(20, minval=1, title='EMA B Length', group='Moving Averages')
out_b = ta.ema(close, len_b)
plot(out_b, title='EMA B', color=color.orange)

len_c = input.int(100, minval=1, title='EMA C Length', group='Moving Averages')
out_c = ta.ema(close, len_c)
plot(out_c, title='EMA B', color=color.green)

// Strategy Conditions
stratGroup = 'Strategy'
showLong = input.bool(true, title='Long entries', group=stratGroup)
showShort = input.bool(false, title='Short entries', group=stratGroup)
closeAfterXBars = input.bool(true, title='Close after X # bars', tooltip='If trade is in profit', group=stratGroup)
xBars = input.int(24, title='# bars')

entryLong = ta.crossover(out_a, out_b) and out_a > out_c and close > open
exitLong = rsi > 70

entryShort = ta.crossunder(out_a, out_b) and out_a < out_c and close < open
exitShort = rsi < 30


bought = strategy.opentrades[0] == 1 and strategy.position_size[0] > strategy.position_size[1]
entry_price = ta.valuewhen(bought, open, 0)
var int nPastBars = 0
if strategy.position_size > 0
    nPastBars := nPastBars + 1
    nPastBars
if strategy.position_size == 0
    nPastBars := 0
    nPastBars
if closeAfterXBars
    exitLong := nPastBars >= xBars and close > entry_price ? true : exitLong
    exitLong
    exitShort := nPastBars >= xBars and close < entry_price ? true : exitShort
    exitShort

// Long Entry
strategy.entry('Long', strategy.long, when=entryLong and showLong)
strategy.close('Long', when=exitLong)

// Short Entry
strategy.entry('Short', strategy.short, when=entryShort and showShort)
strategy.close('Short', when=exitShort)



Mais.