Esta estrategia determina las tendencias del mercado y las señales de entrada mediante el cruce del indicador RSI y dos promedios móviles (MA) de diferentes períodos.
La estrategia emplea dos MA de 12 y 26 períodos. Cuando el MA rápido de 12 períodos cruza por encima del MA lento de 26 períodos, indica una tendencia al alza, y viceversa. La estrategia es larga en el cruce dorado y corta en el cruce de muerte de los dos MA.
El indicador RSI también se utiliza para determinar zonas de sobrecompra/sobreventa. Solo cuando el RSI es mayor que su MA de 26 períodos, la estrategia abrirá posiciones largas en el cruce de oro. Y solo cuando el RSI es más bajo, abrirá posiciones cortas en el cruce de muerte. Esto evita entradas forzadas contra situaciones de sobrecompra/sobreventa y, por lo tanto, controla los riesgos.
Al combinar MAs y RSI para el análisis de tendencias y tiempos, esta estrategia puede rastrear de manera efectiva las tendencias.
Sin un stop loss, las pérdidas pueden amplificarse en señales equivocadas. Los movimientos de grandes brechas también pueden conducir a pérdidas pesadas. Además, los filtros RSI mal configurados pueden causar señales de entrada buenas que faltan.
Considere el uso de un stop loss para controlar las pérdidas máximas. Ajuste los parámetros del RSI para mejores filtros. Para mercados volátiles, use MAs más lentos para juzgar la tendencia.
La estrategia puede mejorarse en los siguientes aspectos:
Prueba de combinaciones de MA de diferentes períodos para encontrar los parámetros que mejor se adapten a las condiciones actuales del mercado.
Optimice los períodos de RSI y las lógicas de filtro para un mejor momento de entrada.
Añadir otros indicadores como el volumen para una mejor estabilidad del sistema.
Optimizar las estrategias de stop loss para equilibrar el seguimiento de la tendencia y el control del riesgo, por ejemplo, stop de seguimiento, stop porcentual, stop dinámico, etc.
La estrategia es relativamente simple y directa, utilizando cruces MA para determinar tendencias y RSI para evitar entradas forzadas, siguiendo así las tendencias para buenos rendimientos.
/*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)