En la carga de los recursos... Cargando...

RSI Estrategia de negociación de saldo largo corto

El autor:¿ Qué pasa?, Fecha: 2023-10-30 15:49:35
Las etiquetas:

img

Resumen general

Esta estrategia utiliza una combinación de indicadores RSI en diferentes marcos de tiempo para determinar si el mercado actual está sobrecomprado o sobrevendido, y combina la relación entre el precio y el promedio móvil para generar señales de compra y venta.

Estrategia lógica

  1. Calcular los valores del RSI de los marcos de tiempo de 5 minutos, 15 minutos y 1 hora. Cuando el RSI de 5 minutos, 15 minutos y 1 hora está por debajo de 25 al mismo tiempo, se juzga como una condición de sobreventa y genera una señal de compra. Cuando el RSI de 5 minutos, 15 minutos y 1 hora está por encima de 75 al mismo tiempo, se juzga como una condición de sobreventa y genera una señal de venta.

  2. Si el precio está por debajo del promedio móvil, se genera una señal de compra. Si el precio está por encima del promedio móvil, se genera una señal de venta.

  3. En función de la posición actual, se fijan el tamaño inicial de la operación y las reglas de pirámide: 2 contratos para la primera entrada, y luego se agrega 1 contrato cada vez hasta que la posición alcanza 2 contratos.

  4. El stop loss se activa cuando la pérdida alcanza el 3%.

Ventajas

  1. El uso de indicadores RSI en múltiples marcos de tiempo para determinar las condiciones de sobrecompra y sobreventa mejora la fiabilidad de la señal.

  2. La combinación de promedios móviles genera señales comerciales adicionales y amplía las oportunidades de negociación.

  3. El control del tamaño de las posiciones y la relación beneficio/pérdida para el stop loss y el take profit gestionan los riesgos.

  4. La ampliación con una cantidad fija amplía el potencial de ganancia.

Los riesgos

  1. El riesgo de divergencia del RSI. El precio puede continuar su tendencia durante un período después de que el RSI alcance el umbral de sobrecompra o sobreventa antes de revertir. Seguir ciegamente la señal del RSI puede conducir a pérdidas.

  2. La media móvil no puede rastrear el cambio de precio a tiempo durante los grandes cambios de precios.

  3. El tamaño incorrecto de las posiciones y la configuración incorrecta de la relación ganancia/pérdida conducen a un control incorrecto del riesgo.

  4. Las condiciones de pirámide deben fijarse razonablemente para evitar que las pérdidas se magnifiquen.

Direcciones de optimización

  1. Ajustar los parámetros del RSI y probar diferentes combinaciones de períodos para encontrar señales de sobrecompra/sobreventa más confiables.

  2. Prueba diferentes medias móviles como señales de negociación auxiliares u otros indicadores técnicos.

  3. Optimizar el tamaño de las posiciones y las reglas de stop loss/take profit para construir mecanismos de control de riesgos más científicos.

  4. Optimice las condiciones de pirámide para evitar pérdidas de aumento. Considere la escala exponencial en lugar de la escala de cantidad fija.

Resumen de las actividades

Esta estrategia utiliza RSI en múltiples marcos de tiempo para determinar el potencial de tendencia y lograr una mayor tasa de ganancia. Se generan señales adicionales con promedios móviles para expandir las oportunidades comerciales. El riesgo se gestiona a través del tamaño de la posición, stop loss / take profit y pirámide de cantidad fija. En general, esta estrategia combina indicadores de tendencia y media de reversión, incorpora tanto la lógica de seguimiento de tendencia como la lógica de selección de fondo, y es efectiva durante la consolidación. Se necesitan más pruebas y optimización para construir un control de riesgo más robusto para un rendimiento más consistente.


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("5M_RSI_Strategy", overlay=true, pyramiding = 1)
len =14 
Initial_Trade_Size = 2
up = rma(max(change(close), 0), len)
down = rma(-min(change(close), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
RSI_1h = request.security(syminfo.tickerid, "60", rsi)
RSI_3h = request.security(syminfo.tickerid, "180", rsi)
RSI_15m = request.security(syminfo.tickerid, "15", rsi)
RSI_5m = request.security(syminfo.tickerid, "5", rsi)
RSI_1m = request.security(syminfo.tickerid, "1", rsi)
ema21_5 = ema(request.security(syminfo.tickerid, "5", close), 21)
ema21_15 = ema(request.security(syminfo.tickerid, "15", close), 21)
//(RSI_3h<=25) and  (RSI_1h<=25) and (RSI_15m<=25) and
Positive = ((RSI_5m<=25) and (RSI_15m<=25) and (RSI_1h<=25))?true:false
//alertcondition(Positive, title='POS', message='POS')        
//plotshape(Positive, style=shape.triangleup,location=location.belowbar, color=green,size =size.tiny)
Negative = (( RSI_5m>=75) and ( RSI_15m>=75) and ( RSI_1h>=75))?true:false
//alertcondition(Negative, title='NEG', message='NEG')
//plotshape(Negative, style=shape.triangledown,location=location.abovebar, color=red,size=size.tiny)          Positive and   Negative and 

lastordersize = abs(strategy.position_size)>=Initial_Trade_Size?abs(strategy.position_size):Initial_Trade_Size
//lastordersize =1
// and ((ema21_15-low)/ema21_15) > 0.077
//Adding to position rules
if (abs(strategy.position_size) >= Initial_Trade_Size and (abs(close - strategy.position_avg_price)/abs(strategy.position_avg_price)>0.03))
    if(strategy.position_avg_price > close and strategy.position_size > 0)
        strategy.entry("Add", strategy.long , qty = lastordersize , when = true)
    if(strategy.position_avg_price < close and strategy.position_size < 0)
        strategy.entry("Add", strategy.short, qty = lastordersize , when = true)
if (strategy.position_size == 0)
    if (Positive or ((ema21_5-low)/ema21_5) > 0.07)
        strategy.entry("1St Entry", strategy.long , qty = lastordersize , when = true)
    // and ((high-ema21_15)/ema21_15) > 0.077
    if (Negative or ((high-ema21_5)/ema21_5) > 0.07)
        strategy.entry("1St Entry", strategy.short, qty = lastordersize , when = true)
//lastordersize := lastordersize * 2
//or (strategy.openprofit / abs(strategy.position_size * close))>=0.01
if(cross(ema21_5, high) or cross(ema21_5, low))
    strategy.close_all()

Más.