
La estrategia de cruce entre EMA y RSI identifica una posible señal de compra o venta mediante la combinación de dos indicadores técnicos, el promedio móvil del índice (EMA) y el índice relativamente fuerte (RSI). Cuando se cruzan los EMA y el RSI, la dinámica del mercado puede cambiar. Por ejemplo, cuando un EMA de período más corto atraviesa un EMA de período más largo y un umbral en el RSI, se indica una posible tendencia alcista, conocida como cruce de venta. Por el contrario, cuando un EMA de período más corto atraviesa un umbral en el RSI y un umbral en el RSI, se indica una posible tendencia bajista, conocida como cruce de venta.
La estrategia de cruce entre EMA y RSI es una estrategia de seguimiento de tendencias simple y fácil de usar, que combina indicadores de dos dimensiones de tendencia y dinámica para determinar la dirección del mercado de manera más completa. Al mismo tiempo, la estrategia utiliza algunas condiciones de filtración y métodos de parada de pérdidas dinámicas para mejorar la calidad de la señal y la capacidad de controlar el riesgo. Sin embargo, la estrategia también tiene algunas limitaciones, como el retraso de los indicadores y el comercio frecuente.
/*backtest
start: 2023-05-28 00:00:00
end: 2024-06-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © pritom980
//@version=5
strategy("EMA RSI Cross", overlay=true, margin_long=100, margin_short=100)
// add RSI
rsi_period = input.int(7,"RSI Period")
rsi_val = ta.rsi(close[1],rsi_period)
plot(rsi_val, color=color.blue, linewidth=2, title="RSI")
buyRsiFlag = rsi_val < 20
sellRsiFlag = rsi_val > 80
// add EMA
ema = ta.ema(close, 50)
plot(ema, color=color.red, linewidth=2, title="EMA")
// check buy
// buy when the price is below ema
buyFlag = ema > close ? true : false
// sell when the price is above ema
sellFlag = ema < close ? true : false
bgcolor(buyFlag and buyRsiFlag ? color.green : na )
bgcolor(sellFlag and sellRsiFlag ? color.red : na )
// Check if current candle's body is bigger than previous candle's body and of opposite color
is_body_bigger_long = math.abs(close - open) > math.abs(close[1] - open[1]) and close > open != close[1] > open[1]
greenCandle = close > close[1]
redCandle = close < close[1]
// Mark the candle
bgcolor(is_body_bigger_long and greenCandle and buyFlag ? color.blue : na, transp=70)
// ENTRY ---------------------
// Input for ATR period
atr_length = input(14, title="ATR Length")
// Calculate ATR
atr_value = ta.atr(atr_length)
// Calculate stop loss and take profit levels
candleBody = math.abs(close-open)
slDist = atr_value + candleBody
stop_loss_long = close - slDist
take_profit_long = close + (1.2 * slDist)
stop_loss_short = high + slDist
take_profit_short = high - (1.2 * slDist)
// Entry and exit conditions
if (buyFlag and buyRsiFlag and strategy.opentrades >= 0 and greenCandle)
strategy.entry("Long", strategy.long)
strategy.exit("Take Profit/Stop Loss", "Long", stop=stop_loss_long, limit=take_profit_long)
// Entry and exit conditions
if (sellFlag and sellRsiFlag and strategy.opentrades <= 0 and redCandle)
strategy.entry("Short", strategy.short)
strategy.exit("Take Profit/Stop Loss", "Short", stop=stop_loss_short, limit=take_profit_short)