La estrategia de sincronización de tendencias de RMI combina efectivamente las fortalezas del índice de impulso relativo (RMI) y el indicador de súper tendencia para realizar la integración del análisis de impulso y el juicio de tendencia.
El RMI es una versión mejorada del índice de fuerza relativa (RSI). Incorpora más características de los cambios de precios como la direccionalidad y la magnitud para medir con mayor precisión el impulso del mercado.
El método de cálculo de RMI es: primero calcular la ganancia promedio y la pérdida promedio durante un cierto período. A diferencia del RSI, RMI utiliza el cambio entre el precio de cierre actual y el precio de cierre anterior, en lugar de un simple crecimiento positivo y negativo. Luego divide la ganancia promedio por la pérdida promedio y normaliza el valor para que encaje dentro de una escala de 0-100.
Esta estrategia utiliza el valor medio de los IMR y de las IFM para compararlos con umbrales de impulso positivo y de impulso negativo preestablecidos para determinar el nivel actual de impulso del mercado para las decisiones de entrada y salida.
El indicador Super Trend se calcula en base a un marco de tiempo más largo, que puede proporcionar juicios sobre las principales tendencias. Ajusta dinámicamente los parámetros basados en la verdadera volatilidad ATR para identificar efectivamente las inversiones de tendencia.
Esta estrategia también incorpora el promedio móvil ponderado por volumen (VWMA) para mejorar aún más su capacidad de detectar cambios de tendencia importantes.
Esta estrategia permite elegir entre operaciones largas, cortas o bidireccionales.
En comparación con las estrategias que se basan únicamente en indicadores de impulso o tendencia, esta estrategia permite una identificación más precisa de la tendencia del mercado mediante la integración de los puntos fuertes del RMI y la Super Tendencia.
La aplicación del RMI y de la Super Tendencia en diferentes marcos de tiempo conduce a una comprensión más adecuada de las tendencias a corto y a largo plazo.
El mecanismo de stop loss en tiempo real basado en la súper tendencia puede limitar efectivamente la pérdida por operación.
La elección entre el comercio largo, corto o bidireccional permite que esta estrategia se adapte a diferentes entornos de mercado.
La optimización para parámetros como RMI y Super Trend es bastante compleja.
Si el valor de las pérdidas se calcula de acuerdo con el método de cálculo de las pérdidas, el valor de las pérdidas se calculará de acuerdo con el método de cálculo de las pérdidas.
Solución: aflojar adecuadamente el intervalo de stop loss o adoptar otros métodos basados en la volatilidad.
Ampliar los activos aplicables e identificar direcciones de optimización de parámetros para diferentes activos, para permitir una replicación más amplia en más mercados.
Incorporar mecanismos dinámicos de stop loss para realizar un mejor seguimiento de las ondas de oscilación de la corriente y reducir las pérdidas de stop excesivas causadas por retracements menores.
Añadir juicios de más indicadores como condiciones de filtro para evitar entrar en posiciones sin señales claras.
A través de la ingeniosa combinación de RMI y Super Trend, esta estrategia realiza juicios precisos de las condiciones del mercado. También sobresale en el control de riesgos.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // @ presentTrading //@version=5 strategy("RMI Trend Sync - Strategy [presentTrading]", shorttitle = "RMI Sync [presentTrading]", overlay=true ) // ---> Inputs -------------- // Add Button for Trading Direction tradeDirection = input.string("Both", "Select Trading Direction", options=["Long", "Short", "Both"]) // Relative Momentum Index (RMI) Settings Length = input.int(21, "RMI Length", group = "RMI Settings") pmom = input.int(70, "Positive Momentum Threshold", group = "RMI Settings") nmom = input.int(30, "Negative Momentum Threshold", group = "RMI Settings") bandLength = input.int(30, "Band Length", group = "Momentum Settings") rwmaLength = input.int(20, "RWMA Length", group = "Momentum Settings") // Super Trend Settings len = input.int(10, "Super Trend Length", minval=1, group="Super Trend Settings") higherTf1 = input.timeframe('480', "Higher Time Frame", group="Super Trend Settings") factor = input.float(3.5, "Super Trend Factor", step=.1, group="Super Trend Settings") maSrc = input.string("WMA", "MA Source", options=["SMA", "EMA", "WMA", "RMA", "VWMA"], group="Super Trend Settings") atr = request.security(syminfo.tickerid, higherTf1, ta.atr(len)) TfClose1 = request.security(syminfo.tickerid, higherTf1, close) // Visual Settings filleshow = input.bool(true, "Display Range MA", group = "Visual Settings") bull = input.color(#00bcd4, "Bullish Color", group = "Visual Settings") bear = input.color(#ff5252, "Bearish Color", group = "Visual Settings") // Calculation of Bar Range barRange = high - low // RMI and MFI Calculations upChange = ta.rma(math.max(ta.change(close), 0), Length) downChange = ta.rma(-math.min(ta.change(close), 0), Length) rsi = downChange == 0 ? 100 : upChange == 0 ? 0 : 100 - (100 / (1 + upChange / downChange)) mf = ta.mfi(hlc3, Length) rsiMfi = math.avg(rsi, mf) // Momentum Conditions positiveMomentum = rsiMfi[1] < pmom and rsiMfi > pmom and rsiMfi > nmom and ta.change(ta.ema(close,5)) > 0 negativeMomentum = rsiMfi < nmom and ta.change(ta.ema(close,5)) < 0 // Momentum Status bool positive = positiveMomentum ? true : negativeMomentum ? false : na bool negative = negativeMomentum ? true : positiveMomentum ? false : na // Band Calculation calculateBand(len) => math.min(ta.atr(len) * 0.3, close * (0.3/100)) * 4 band = calculateBand(bandLength) // Range Weighted Moving Average (RWMA) Calculation calculateRwma(range_, period) => weight = range_ / math.sum(range_, period) sumWeightedClose = math.sum(close * weight, period) totalWeight = math.sum(weight, period) sumWeightedClose / totalWeight rwma = calculateRwma(barRange, rwmaLength) colour = positive ? bull : negative ? bear : na rwmaAdjusted = positive ? rwma - band : negative ? rwma + band : na max = rwma + band min = rwma - band longCondition = positive and not positive[1] shortCondition = negative and not negative[1] longExitCondition = shortCondition shortExitCondition = longCondition // Dynamic Trailing Stop Loss vwma1 = switch maSrc "SMA" => ta.sma(TfClose1*volume, len) / ta.sma(volume, len) "EMA" => ta.ema(TfClose1*volume, len) / ta.ema(volume, len) "WMA" => ta.wma(TfClose1*volume, len) / ta.wma(volume, len) upperBand = vwma1 + factor * atr lowerBand = vwma1 - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) float superTrend = na int direction = na superTrend := direction == -1 ? lowerBand : upperBand longTrailingStop = superTrend - atr * factor shortTrailingStop = superTrend + atr * factor // Strategy Order Execution if (tradeDirection == "Long" or tradeDirection == "Both") strategy.entry("Long", strategy.long, when = longCondition) strategy.exit("Exit Long", "Long", when=longExitCondition, stop = longTrailingStop) if (tradeDirection == "Short" or tradeDirection == "Both") strategy.entry("Short", strategy.short, when =shortCondition) strategy.exit("Exit Short", "Short", when=shortExitCondition, stop = shortTrailingStop)