
La estrategia utiliza una combinación de indicadores RSI en diferentes períodos de tiempo para determinar si el mercado actual está sobrecomprado o sobrevendido, y se combina con la relación entre el precio y la media móvil para emitir señales de compra y venta. El objetivo es comprar en la baja, vender en la alza y obtener ganancias en la liquidación.
Calcule el RSI de 5 minutos, 15 minutos y 1 hora, cuando el RSI de 5 minutos, 15 minutos y 1 hora sea inferior a 25 al mismo tiempo, juzgue como un fenómeno de sobreventa y genere una señal de compra; cuando el RSI de 5 minutos, 15 minutos y 1 hora sea superior a 75 al mismo tiempo, juzgue como un fenómeno de sobreventa y genere una señal de venta.
La ruptura del precio de la media móvil de 21 días también sirve como señal de negociación, generando una señal de compra si el precio está por debajo de la media móvil; si el precio está por encima de la media móvil, genera una señal de venta.
De acuerdo con la posición, establezca el número de transacciones iniciales y las reglas de alza de la posición: la primera apertura de la posición se fija en 2 manos, y luego cada alza de la posición en 1 mano, hasta que la posición alcance 2 manos.
Se detiene cuando la pérdida alcanza el 3%. Se detiene cuando la ganancia alcanza el 1%.
El uso de una combinación de indicadores RSI de marcos temporales múltiples para determinar sobrecompra y sobreventa aumenta la fiabilidad de la señal.
La combinación de la línea de referencia móvil con la línea de referencia móvil genera señales de divisas y divisas, ampliando las oportunidades de negociación.
Establecer las reglas de control de posición y de stop-loss para el porcentaje de ganancias y pérdidas, y controlar el riesgo.
El uso de un método de alza cuantitativa para ampliar el margen de ganancias.
El indicador RSI presenta un riesgo de reajuste, es decir, después de que el RSI alcance el punto crítico de sobreventa, el precio puede continuar operando durante un tiempo sin revertir. En este momento, si se sigue ciegamente la señal de RSI, puede haber pérdidas.
Las señales de negociación generadas por una línea de media móvil pueden ser engañosas. Cuando los precios fluctúan fuertemente, la línea de media móvil no puede rastrear los cambios en los precios a tiempo.
La configuración errónea de la escala de la posición y el índice de ganancias y pérdidas puede conducir a un control inadecuado del riesgo.
Es necesario establecer condiciones razonables para la adquisición de posiciones. Si la adquisición de posiciones es demasiado abierta, puede provocar una expansión de la pérdida.
Ajuste los parámetros del RSI y pruebe diferentes combinaciones de parámetros del ciclo RSI para encontrar señales de sobreventa más confiables.
Prueba de diferentes parámetros de Moving Averages como señales de comercio auxiliares. También se pueden probar otros indicadores técnicos.
Optimizar el control de posición y las reglas de suspensión de pérdidas, establecer un mecanismo de control de riesgo más científico.
Optimizar las condiciones de alza de la posición para evitar que la alza de la posición conduzca al aumento de las pérdidas. También se puede considerar un método alternativo de alza de la posición, en lugar de alza de la posición en el índice.
Esta estrategia utiliza una combinación de marcos temporales múltiples del RSI para evaluar el potencial de la tendencia y obtener una mayor ganancia. Al mismo tiempo, se genera una señal de negociación complementaria con una línea de medias móviles, ampliando las oportunidades de negociación. Se utiliza el control de posición, el stop loss, el stop loss y el aumento cuantitativo para controlar el riesgo.
/*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()