Estrategia sincrónica de tendencia de momentum


Fecha de creación: 2024-01-16 14:10:25 Última modificación: 2024-01-16 14:10:25
Copiar: 0 Número de Visitas: 818
1
Seguir
1617
Seguidores

Estrategia sincrónica de tendencia de momentum

Descripción general

La estrategia de sincronización de tendencias dinámicas logra una combinación eficaz de análisis de la dinámica y el juicio de tendencias mediante la integración de las ventajas del índice de dinámica relativa (RMI) y el indicador de tendencias súper. La estrategia también se centra en las tendencias de cambio de precios y los niveles de dinámica del mercado para juzgar la dirección del mercado desde una perspectiva más integral.

Principio de estrategia

Índice de Dinámica Relativa (RMI)

El RMI es una versión mejorada del índice de fuerza relativa (RSI). Incorpora más características como la dirección y la magnitud de los cambios en los precios, lo que ayuda a juzgar con mayor precisión la dinámica del mercado.

Método de cálculo de RMI

El RMI se calcula de la siguiente manera: primero se calcula el aumento promedio y la caída promedio durante un período determinado. A diferencia del RSI, el RMI utiliza el cambio en el precio de cierre del día en relación con el precio de cierre del día anterior, en lugar de un simple aumento positivo y un aumento negativo.

El juicio de la dinámica

Esta estrategia utiliza el promedio de RMI y MFI para comparar con los valores predeterminados positivos y negativos para determinar el nivel actual de dinámica del mercado y decidir entre posiciones abiertas y posiciones cerradas.

Indicadores de las tendencias súper

El indicador de tendencia súper, basado en el cálculo de un período de tiempo más alto, puede proporcionar un juicio sobre la tendencia general. Se ajusta el parámetro ATR dinámico en función de la amplitud de onda real, lo que permite identificar eficazmente los puntos de inflexión de la tendencia.
La estrategia también incluye la línea media ponderada por volumen de transacciones VWMA, lo que mejora aún más la capacidad de identificar cambios importantes en las tendencias.

Selección de la dirección

Esta estrategia permite opciones de hacer más, hacer menos o negociar de dos maneras. Esto permite al comerciante la flexibilidad de adaptarse a su visión del mercado y sus preferencias de riesgo.

Análisis de las ventajas estratégicas

Combinando movimiento y tendencia

En comparación con las estrategias que utilizan solo un indicador de dinámica o un indicador de tendencia, esta estrategia permite un juicio más preciso de la tendencia del mercado mediante la integración de las ventajas de RMI y el indicador de tendencia súper.

Análisis de ciclo de tiempo múltiple

La aplicación de RMI y indicadores de tendencias súper de diferentes períodos permite una mejor comprensión de las tendencias a corto y largo plazo.

Estrategias de deterioro en tiempo real

El mecanismo de stop loss en tiempo real basado en supertrends permite un control efectivo de las pérdidas individuales.

La dirección de la transacción es flexible

La opción de operar a largo plazo, a corto plazo o en dos direcciones permite que la estrategia se adapte a diferentes entornos de mercado.

Análisis de riesgos

Optimización de parámetros muy difícil

La optimización de parámetros como el RMI y las supertendencias es compleja, y la configuración incorrecta puede afectar la eficacia de la estrategia.

El cierre de pérdidas demasiado cercano puede causar un cierre excesivo.

El exceso de sensibilidad a las fluctuaciones de los mercados en períodos pequeños puede causar problemas con el exceso de pérdidas.

Solución: una ampliación adecuada del rango de pérdidas, o la adopción de otros métodos de pérdidas de tipo vibratorio.

Dirección de optimización de la estrategia

Optimización de la adaptabilidad de varias variedades

Ampliar el rango de variedades aplicables, identificar las diferentes variedades y orientar la optimización de los parámetros. Permitir que las estrategias se puedan replicar en más mercados.

Optimización dinámica del stop loss

La inclusión de un modo de parada dinámica permite a la línea de parada seguir mejor el rango de onda actual, reduciendo la parada excesiva causada por pequeños temblores.

Añadir condiciones de filtración

En combinación con más indicadores de juicio como condición de filtración, evitar la construcción de un almacén sin una señal clara.

Resumir

La estrategia logra un juicio preciso del estado del mercado a través de una combinación ingeniosa de RMI y indicadores de tendencia súper. También es excelente en el control de riesgos. Con una optimización profunda, se cree que su rendimiento será cada vez mejor en múltiples variedades y ciclos múltiples.

Código Fuente de la Estrategia
/*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)