Esta estratégia utiliza o princípio da média móvel exponencial (EMA), combinado com o indicador RSI, para determinar a direção da tendência para entradas e saídas.
A estratégia usa 3 linhas EMA com períodos diferentes - linhas rápidas, médias e lentas. Um sinal de compra é gerado quando a EMA rápida cruza acima da EMA média, e um sinal de venda é gerado quando a EMA rápida cruza abaixo da EMA média.
A estratégia também incorpora o indicador RSI para avaliar as condições de sobrecompra e sobrevenda. O RSI calcula uma relação de dias médios de alta para dias médios de baixa em um período para mostrar a força relativa de um ativo. Valores acima do limiar de sobrecompra sinalizam condições de sobrecompra, enquanto valores abaixo do limiar de sobrevenda sinalizam condições de sobrevenda.
As condições de compra da estratégia são:
As condições de venda são:
Utilizando crossovers da EMA para determinar a direção da tendência combinada com o RSI para identificar oportunidades de reversão a curto prazo, esta estratégia faz uso de ambos os conceitos de tendência e reversão média.
Esta estratégia combina os crossovers da EMA e o RSI para avaliar os níveis de tendência e de sobrecompra/supervenda, filtrando falhas e negociações ruidosas.
As configurações do RSI permitem que a estratégia cronometre entradas e saídas em áreas de sobrecompra/supervenda vantajosas.
A exigência de que o preço quebre todas as 3 linhas EMA antes de entrar em negociações ajuda a evitar ser espancado.
Como todas as estratégias de backtest, esta estratégia enfrenta o risco de sobreajuste de backtest.
Em mercados variados, a estratégia pode gerar sinais falsos e sofrer perdas.
A má regulação dos parâmetros do RSI pode levar a oportunidades perdidas ou sinais falsos.
Considere adicionar validação em prazos mais longos para evitar ruído.
Espere pelo retest das linhas EMA antes de entrar em negociações para validar o sinal.
Incorporar outros indicadores como MACD, Bollinger Bands para confirmação combinada do sinal.
Usar machine learning para otimizar parâmetros de robustez.
Considere adicionar stop loss para sair rapidamente de tendências incertas.
Esta estratégia combina crossovers EMA e RSI para identificar tendência, aproveitando-se de reversões de curto prazo. Utiliza os conceitos de tendência seguinte e de reversão média de forma eficiente. Há espaço para otimização por meio de validação de sinal, ajuste de parâmetros, stop losses, etc. Mas o sobreajuste do backtest precisa ser considerado e o desempenho ao vivo deve ser avaliado.
/*backtest start: 2023-09-24 00:00:00 end: 2023-10-24 00:00:00 period: 1h 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/ // © chadsadachai //@version=5 strategy("EMA Cross V1", overlay= true) //rsi length = input.int(title = "Rsi Lenght" , defval=26 , minval=1, maxval=50) overS = input.int(title = "Rsi OVS line" , defval=30 , minval=1, maxval=40) overB = input.int(title = "Rsi OVB line" , defval=70 , minval=1, maxval=100) mLine = input.int(title = "Rsi Medium line" , defval=42 , minval=1, maxval=60) price = close vrsi = ta.rsi(price, length) co = vrsi >= mLine and vrsi < overB cu = ta.crossunder(vrsi, overB) //ema F = input.int(title = "EMA Fast" , defval=17 , minval=1, maxval=50) M = input.int(title = "EMA Medium" , defval=35, minval=1, maxval=100) S = input.int(title = "EMA Slow" , defval=142, minval=1, maxval=200) emaF = ta.ema(price , F) emaM = ta.ema(price , M) emaS = ta.ema(price , S) //plot plot(emaF , color = color.green , linewidth=1) plot(emaM , color = color.yellow , linewidth=1) plot(emaS , color = color.red , linewidth=1) //Time Stamp start = timestamp(input.int(title = "Start Year" , defval=2011 , minval=2011, maxval=2025), input.int(title = "Start Month" , defval=1 , minval=1, maxval=12), input.int(title = "Start Day" , defval=1 , minval=1, maxval=31), 0, 0) end = timestamp(input.int(title = "End Year" , defval=2025 , minval=2011, maxval=2025), input.int(title = "End Month" , defval=1 , minval=1, maxval=12), input.int(title = "End Day" , defval=1 , minval=1, maxval=31), 0, 0) // years = input.int(title = "Year" , defval=2018 , minval=2011, maxval=2025) // months = input.int(title = "Month" , defval=1 , minval=1, maxval=12) // days = input.int(title = "Day" , defval=1 , minval=1, maxval=31) //longCondition Default // longCondition1 = EMA_Fast >= EMA_Slow and EMA_Fast >= EMA_Medium//ta.crossover(EMA_Fast, EMA_Slow) EMA_Fast > EMA_Slow and EMA_Medium > EMA_Slow // longCondition3 = price >= EMA_Medium and price > EMA_Slow // longCondition2 = vrsi >= overSold and vrsi <= overBought //longCondition & shortCondition ETHUSD // 1.price > emaF > emaM > emaS // 2.rsi overcross overS longC1 = price > emaF and price > emaM and price > emaS // longC1 = ta.crossover(emaF, emaM) longC2 = if longC1 co // shortC1 = EMA_Fast < EMA_Medium //and EMA_Fast < EMA_Slow and EMA_Medium < EMA_Slow //and cu // shortC2 = overBought > vrsi //and vrsi < overBought //overSold < vrsi and vrsi < mediumLine // exitLong Condition // 1.price < emaF < emaM < emaS // 2.rsi overcross mediumLine exitLong1 = ta.crossunder(emaF, emaM) //or emaF < emaM//and price < emaM and price < emaF exitLong2 = ta.crossunder(vrsi,mLine) //exitLong3 = price < emaM //strategy.entry if time >=start and time <=end strategy.entry("Buy", strategy.long , when = longC1 and longC2) // if(exitLong1 or exitLong2) strategy.close("Buy" , when = exitLong1 or exitLong2) // exitShort1 = EMA_Fast > EMA_Medium // //exitShort2 = ta.crossover(vrsi , mediumLine) // exitShort2 = ta.crossunder (vrsi,mediumLine) // strategy.close("Short" , when = exitShort1 or exitShort2) // //shortCondition = cu // //if (shortCondition1 and shortCondition2) // //strategy.entry("My Short Entry Id", strategy.short)