Estrategia de sincronización de tendencias de RMI

El autor:¿ Qué pasa?, Fecha: 2024-01-16 14:10:25
Las etiquetas:

img

Resumen general

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.

Principios de estrategia

Indice de impulso relativo (RMI)

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.

Método de cálculo del IMR

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.

El juicio del impulso

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.

Indicador de tendencia

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.

Selección de la dirección de negociación

Esta estrategia permite elegir entre operaciones largas, cortas o bidireccionales.

Análisis de ventajas

Combinando el impulso y el análisis de tendencias

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.

Análisis de marcos de tiempo múltiples

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.

Stop Loss en tiempo real

El mecanismo de stop loss en tiempo real basado en la súper tendencia puede limitar efectivamente la pérdida por operación.

Dirección de negociación flexible

La elección entre el comercio largo, corto o bidireccional permite que esta estrategia se adapte a diferentes entornos de mercado.

Análisis de riesgos

Optimización de parámetros difícil

La optimización para parámetros como RMI y Super Trend es bastante compleja.

Detener la pérdida demasiado apretada

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.

Direcciones de optimización

Adaptabilidad de activos cruzados

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.

Pérdida de parada dinámica

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.

Condiciones adicionales del filtro

Añadir juicios de más indicadores como condiciones de filtro para evitar entrar en posiciones sin señales claras.

Conclusión

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)

Más.