Esta estrategia utiliza el principio de cruce de la media móvil exponencial (EMA), combinado con el indicador RSI, para determinar la dirección de la tendencia para las entradas y salidas.
La estrategia utiliza 3 líneas de EMA con diferentes períodos: líneas rápidas, medianas y lentas.
La estrategia también incorpora el indicador RSI para medir las condiciones de sobrecompra y sobreventa. El RSI calcula una relación de días promedio de subida a días promedio de baja durante un período para mostrar la fortaleza relativa de un activo.
Las condiciones de compra para la estrategia son:
Las condiciones de venta son:
Utilizando los cruces de la EMA para determinar la dirección de la tendencia combinados con el RSI para identificar oportunidades de reversión a corto plazo, esta estrategia utiliza los conceptos de tendencia y reversión media.
Esta estrategia combina los cruces de la EMA y el RSI para medir tanto la tendencia como los niveles de sobrecompra / sobreventa, filtrando las rupturas falsas y las operaciones ruidosas.
Los ajustes del RSI permiten a la estrategia cronometrar entradas y salidas en áreas de sobrecompra/sobreventa ventajosas.
El requisito de que el precio rompa las 3 líneas EMA antes de entrar en operaciones ayuda a evitar ser golpeado.
Como todas las estrategias de backtest, esta estrategia se enfrenta al riesgo de sobreajuste de backtest.
En los mercados variados, la estrategia puede generar señales falsas y sufrir pérdidas.
La mala sintonización de los parámetros del RSI puede llevar a oportunidades perdidas o señales falsas.
Considere agregar validación en plazos más largos para evitar el ruido.
Espera a que se vuelvan a probar las líneas EMA antes de entrar en operaciones para validar la señal.
Incorporar otros indicadores como MACD, Bandas de Bollinger para la confirmación de la señal combinada.
Utilice el aprendizaje automático para optimizar los parámetros de robustez.
Considere la posibilidad de agregar un stop loss para salir rápidamente de tendencias inciertas.
Esta estrategia combina los cruces de la EMA y el RSI para identificar la tendencia mientras se aprovecha de las reversiones a corto plazo. Utiliza los conceptos de tendencia y reversión media de manera eficiente. Hay margen de optimización a través de validación de señales, ajuste de parámetros, stop losses, etc. Pero se debe considerar el sobreajuste de las pruebas de retroceso y se debe evaluar el rendimiento en vivo. En general, esto sirve como una referencia útil para el aprendizaje, pero requiere una mayor validación en los mercados en vivo.
/*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)