Estrategia de negociación de RSI de media móvil exponencial doble

El autor:¿ Qué pasa?, Fecha: 2024-01-30 15:44:11
Las etiquetas:

img

Resumen general

La estrategia se llama Double Exponential Moving Average RSI Trading Strategy. Utiliza el doble EMA y el índice de fuerza relativa (RSI) como los principales indicadores de negociación para implementar el comercio automatizado.

Principio de la estrategia

La estrategia primero calcula el promedio móvil exponencial doble (MA) del precio, luego calcula el RSI basado en el MA, y luego calcula el promedio móvil exponencial del RSI (Smooth). Genera señales de compra cuando el RSI cruza por encima de su promedio móvil y señales de venta cuando el RSI cruza por debajo de su promedio móvil.

Los puntos fuertes de la estrategia

  1. El doble EMA responde más rápido a los cambios de precios y filtra el ruido.
  2. El cálculo del RSI basado en el MA lo hace más estable y evita operaciones falsas.
  3. El promedio móvil del RSI ayuda a confirmar las señales de negociación y evitar fallas.
  4. Establecer el número máximo de operaciones por día ayuda a controlar el riesgo diario.
  5. La determinación del tamaño de la operación como porcentaje del capital propio evita una pérdida excesiva de una sola operación.
  6. La configuración de la sesión de tiempo de negociación evita los nodos clave de tiempo y controla el riesgo de liquidez.
  7. Tomar ganancias y detener pérdidas en puntos ayudan a limitar el P&L del comercio único.
  8. El hecho de que se detenga en los puntos ayuda a bloquear las ganancias flotantes y a reducir las reducciones.

Riesgos estratégicos

  1. El doble EMA responde más lentamente a los acontecimientos del mercado, perdiendo oportunidades comerciales a corto plazo.
  2. El RSI es propenso a formar señales falsas de muerte/cruz dorada.
  3. El porcentaje fijo de capital no puede adaptarse a la variación de la volatilidad del mercado, se corre el riesgo de una utilización insuficiente de los fondos.
  4. Los objetivos fijos de stop loss/beneficio no se adaptan a los diferentes productos y condiciones del mercado, lo que supone un riesgo de salida prematura.
  5. El trailing stop tiende a activarse con demasiada frecuencia en mercados agitados.

Las medidas de contramedida:

  1. Acortar los períodos de MA para mejorar la sensibilidad.
  2. Añadir otros indicadores como el volumen para filtrar las señales.
  3. Ajuste dinámico del tamaño de la operación.
  4. Adaptar los objetivos de stop loss/beneficio en función de la volatilidad del mercado.
  5. Relaja los puntos de stop loss de forma apropiada.

Direcciones de optimización

  1. Prueba diferentes combinaciones de doble EMA de corto/largo plazo para encontrar parámetros óptimos.
  2. Prueba los parámetros del período de cálculo del RSI para mejorar la fiabilidad de la señal de muerte/cruz dorada.
  3. Añadir indicadores como el volumen, Bandas de Bollinger para filtrar el ruido de la señal.
  4. Ajustar dinámicamente el tamaño de la operación y los objetivos de stop loss/beneficio en función del precio de cierre diario, la volatilidad, etc.
  5. Optimizar los mecanismos de detención de trailers para diferentes productos y entornos de mercado.

Resumen de las actividades

La estrategia tiene reglas mecánicas claras y una alta confiabilidad en general, adecuada para productos de tendencia a mediano y largo plazo.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='[STRATEGY][RS]DemaRSI V0', shorttitle='D', overlay=false, initial_capital=100000, currency=currency.USD)
src = input(close)
ma_length = input(21)
rsi_length = input(4)
rsi_smooth = input(4)

ma = ema(ema(src, ma_length), ma_length)
marsi = rsi(ma, rsi_length)
smooth = ema(marsi, rsi_smooth)
plot(title='M', series=marsi, color=black)
plot(title='S', series=smooth, color=red)
hline(0)
hline(50)
hline(100)

max_order_per_day = input(6)
// strategy.risk.max_intraday_filled_orders(max_order_per_day)
trade_size_as_equity_factor = input(false)
trade_size = input(type=float, defval=10000.00) * (trade_size_as_equity_factor ? strategy.equity : 1)
take_profit_in_points = input(100000)
stop_loss_in_points = input(100000)
trail_in_points = input(150)

USE_SESSION = input(true)
trade_session = input(title='Trade Session:', defval='0400-1500', confirm=false)
istradingsession = not USE_SESSION ? true : not na(time('1', trade_session))

buy_entry = istradingsession and crossover(marsi, smooth)
sel_entry = istradingsession and crossunder(marsi, smooth)

strategy.entry('buy', long=true, qty=1, when=buy_entry)
strategy.entry('sel', long=false, qty=1, when=sel_entry)

strategy.exit('buy.Exit', from_entry='buy', profit=take_profit_in_points, loss=stop_loss_in_points, trail_points=trail_in_points, trail_offset=trail_in_points)
strategy.exit('sel.Exit', from_entry='sel', profit=take_profit_in_points, loss=stop_loss_in_points, trail_points=trail_in_points, trail_offset=trail_in_points)
strategy.close_all(when=not istradingsession)

Más.