Esta estrategia primero calcula el ADX y SMA en marcos de tiempo más altos para identificar la dirección de la tendencia y los cambios. Luego, el RSI se calcula en marcos de tiempo más bajos para identificar las condiciones de sobrecompra y sobreventa para generar señales comerciales.
El ADX en los marcos de tiempo más altos juzga la fuerza de la tendencia.
El SMA en los marcos de tiempo más altos juzga la dirección de la tendencia.
El RSI en los marcos de tiempo más bajos juzga las condiciones de sobrecompra y sobreventa.
Cuando el ADX sube, el SMA sube y el RSI se sobrecompra en un marco de tiempo más bajo, se considera que la tendencia alcista se está fortaleciendo, vaya corto aquí.
Cuando el ADX sube, el SMA cae y el RSI está sobrevendido en un marco de tiempo más bajo, se considera que la tendencia bajista se está fortaleciendo, vaya largo aquí.
Combina el juicio de tendencia y el comercio de reversión, puede capturar oportunidades de reversión en las principales tendencias.
Utiliza indicadores a través de marcos de tiempo, mejora la fiabilidad de las señales.
La estrategia RSI es simple de entender e implementar.
Puede optimizar los parámetros para reducir las señales falsas.
El juicio de la tendencia del ciclo principal puede ser erróneo, haciendo que la estrategia no sea adecuada para las condiciones del mercado.
Puede ajustar los parámetros del RSI para reducir el número de operaciones.
Prueba más combinaciones de parámetros para encontrar la coincidencia óptima entre los parámetros RSI y ADX, SMA.
Añadir un mecanismo de stop loss para controlar la pérdida de una sola operación.
Considerar el indicador de volatilidad para reducir el tamaño de la posición cuando la volatilidad es baja.
Optimizar los precios de entrada y salida específicos, como entrar en corto cuando se rompen los límites anteriores.
Esta estrategia combina el juicio de tendencia y las señales de reversión para encontrar reversiones locales dentro de las tendencias principales. En comparación con el uso exclusivo del RSI, es más confiable y evita quedar atrapado. En general, es una estrategia relativamente conservadora adecuada para los inversores que buscan reducir las falsas señales.
/*backtest start: 2022-12-27 00:00:00 end: 2024-01-02 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("RSI scalping", overlay=true) CustSession = input(defval=true,title= "Custom Resolution / TF ? ",type=bool) SessionTF0 = input(title="Custom Resolution / TF", defval="180") adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Length") length = input(7, title= "RSI length") overSold = input( 28, title= "RSI oversold" ) overBought = input( 68, title= "RSI overbought" ) RSI = rsi(close, 7) res = CustSession ? SessionTF0 : period o = request.security(syminfo.tickerid, res, open) c = request.security(syminfo.tickerid, res, close) l = request.security(syminfo.tickerid, res, low) h = request.security(syminfo.tickerid, res, high) // ADX higher time frame dirmov(len) => up = change(h) down = -change(l) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truer = request.security(syminfo.tickerid, res, tr) truerange = rma(truer, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) sig = adx(dilen, adxlen) // SMA higher time frame len = input(20, minval=1, title="SMA HTF Length") smma = 0.0 smma := na(smma[1]) ? sma(c, len) : (smma[1] * (len - 1) + c) / len ADXrising = (sig > sig[1]) and (sig[1] > sig[2]) and (sig[2] > sig[3]) and (sig > 15) SMAdrop= (smma < smma[1]) and (smma[1] < smma[2]) and (smma[2] < smma[3]) SMArising = (smma > smma[1]) and (smma[1] > smma[2]) and (smma[2] > smma[3]) longCondition = crossover(RSI, overBought) and ADXrising and SMArising shortCondition = crossunder(RSI, overSold) and SMAdrop and ADXrising if (longCondition) strategy.entry("Long entry", strategy.long) if (shortCondition) strategy.entry("Short Entry", strategy.short)