Esta estratégia determina as tendências do mercado e os sinais de entrada pelo cruzamento do indicador RSI e duas médias móveis (MA) de períodos diferentes.
A estratégia emprega dois MA de 12 e 26 períodos. Quando o MA rápido de 12 períodos cruza acima do MA lento de 26 períodos, ele sinaliza uma tendência ascendente, e vice-versa. A estratégia vai longo no cruzamento dourado e vai curto no cruzamento da morte dos dois MA.
O indicador RSI também é usado para determinar zonas de sobrecompra/supervenda. Somente quando o RSI é maior do que sua MA de 26 períodos a estratégia abrirá posições longas no crossover dourado. E apenas quando o RSI for menor abrirá posições curtas no crossover da morte. Isso evita entradas forçadas contra situações de sobrecompra/supervenda e, portanto, controla os riscos.
Ao combinar MAs e RSI para análise de tendência e tempo, essa estratégia pode rastrear efetivamente as tendências. O filtro RSI reduz as frequências de negociação e evita flutuações em mercados variados. Não usar um stop loss permite seguir a tendência completa para retornos mais altos.
Sem um stop loss, as perdas podem ser amplificadas em sinais errados. Grandes movimentos de gap também podem levar a grandes perdas. Além disso, filtros RSI configurados incorretamente podem causar falta de bons sinais de entrada.
Considere usar um stop loss para controlar as perdas máximas. Ajuste os parâmetros do RSI para melhores filtros. Para mercados voláteis, use MAs mais lentos para julgar a tendência.
A estratégia pode ser melhorada nos seguintes aspectos:
Testar combinações de MA de períodos diferentes para encontrar parâmetros mais adequados às condições actuais do mercado.
Otimizar os períodos de RSI e as lógicas de filtragem para um melhor tempo de entrada.
Adicionar outros indicadores como volume para melhor estabilidade do sistema.
Otimizar as estratégias de stop loss para equilibrar o seguimento da tendência e o controlo do risco, por exemplo, trailing stop, stop percentual, stop dinâmico, etc.
A estratégia é relativamente simples e direta, usando crossovers de MA para determinar tendências e RSI para evitar entradas forçadas, acompanhando assim tendências para bons retornos.
/*backtest start: 2023-02-13 00:00:00 end: 2024-02-19 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title = "EMA Cross Strategy", shorttitle = "EMA Cross",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100) StartYear = input(2018, "Backtest Start Year") StartMonth = input(1, "Backtest Start Month") StartDay = input(1, "Backtest Start Day") UseStopLoss = input(false,"UseStopLoss") //rsiLong = true rsi1 = rsi(close, 14) window() => true stopLoss = input(20, title = "Stop loss percentage(0.1%)") //stopLoss = input(200, title = "Stop loss percentage(0.1%)") maFastSource = input(defval = open, title = "Fast MA Source") maFastLength = input(defval = 12, title = "Fast MA Period", minval = 1) // long ma maSlowSource = input(defval = open, title = "Slow MA Source") maSlowLength = input(defval = 26, title = "Slow MA Period", minval = 1) maFast = ema(maFastSource, maFastLength) maSlow = ema(maSlowSource, maSlowLength) //12 and 26=9%; 3 and8=2%; 26 and 55=2%; when selling on a cross under //maFastRSI = ema(rsi1, 12) //maSlowRSI = ema(rsi1, 26) fast = plot(maFast, title = "Fast MA", color = #7a8598, linewidth = 2, style = line, transp = 50) slow = plot(maSlow, title = "Slow MA", color = #e08937, linewidth = 2, style = line, transp = 50) longEMA = crossover(maFast, maSlow) exitLong = crossunder(maFast, maSlow) // 5% in 2018 //exitLong = crossunder(close, maFast) // 15% in 2018 //exitLong = crossunder(rsi1, maFastRSI) // 13% shortEMA = crossover(maSlow, maFast) exitShort = crossover(maFast, maSlow) //if (rsi1 < ema(rsi1,7)) //rsiLong = false //if (longEMA and (rsi1 >= highest(rsi1,10))) //if (longEMA) if (longEMA and (rsi1 > ema(rsi1,26))) //RSI ema values optimal from 19 to 35 strategy.entry("LongId", strategy.long, when=window()) //strategy.close_all(when = rsi1 > 60) // 80=26%, 90=n/a, 70=15%, 60=16% long only //strategy.close_all(when = (shortEMA and (rsi1 <= ema(rsi1,26)))) //10% gain in 2018 long only //strategy.close_all(when = (rsi1 <= ema(rsi1,120))) //26=17% 14=2% 42=15% //strategy.close_all(when = (shortEMA)) // 5% gain in 2018 long only //strategy.close_all(when = exitLong) //if (shortEMA and not(rsiLong)) //if (shortEMA) if (shortEMA and (rsi1 <= ema(rsi1,26))) strategy.entry("ShortId", strategy.short, when=window()) if (UseStopLoss) strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick) strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)