Les ressources ont été chargées... Je charge...

Stratégie de synchronisation de tendance RMI

Auteur:ChaoZhang est là., Date: 2024-01-16 à 14h10h25
Les étiquettes:

img

Résumé

La stratégie de synchronisation des tendances RMI combine efficacement les forces de l'indice de dynamique relative (RMI) et de l'indicateur Super Trend pour réaliser l'intégration de l'analyse de la dynamique et du jugement de la tendance.

Principes de stratégie

Indice de dynamique relative (IMR)

Le RMI est une version améliorée de l'indice de force relative (RSI). Il intègre plus de caractéristiques des variations de prix telles que la directionnalité et l'ampleur pour mesurer plus précisément la dynamique du marché.

Méthode de calcul de l'IMR

La méthode de calcul du RMI est: d'abord calculer le gain moyen et la perte moyenne sur une certaine période. Contrairement au RSI, le RMI utilise la variation entre le prix de clôture actuel et le prix de clôture précédent, plutôt que la simple croissance positive et négative. Ensuite, diviser le gain moyen par la perte moyenne et normaliser la valeur pour s'adapter à une échelle de 0 à 100.

Le jugement de l'élan

Cette stratégie utilise la valeur moyenne de l'IMR et de l'IFM pour la comparer avec des seuils de dynamique positive et de dynamique négative prédéfinis afin de déterminer le niveau actuel de dynamique du marché pour les décisions d'entrée et de sortie.

Indicateur de tendance

L'indicateur Super Trend est calculé sur la base d'un laps de temps plus long, ce qui peut fournir des jugements sur les principales tendances.
Cette stratégie intègre également la moyenne mobile pondérée par volume (VWMA) afin d'améliorer encore sa capacité à détecter les changements de tendance importants.

Sélection de la direction de négociation

Cette stratégie permet de choisir le long, le court ou le bidirectionnel. Cette flexibilité permet aux traders de s'adapter à leur vision du marché et à leur envie de prendre des risques.

Analyse des avantages

Combinaison de l'analyse de l'élan et de la tendance

Comparée aux stratégies reposant uniquement sur des indicateurs de dynamique ou de tendance, cette stratégie permet d'identifier plus précisément les tendances du marché en intégrant les atouts de l'IMR et de la Super Tendance.

Analyse à plusieurs délais

L'application de l'IMR et de la Super Tendance dans des délais différents permet une meilleure compréhension des tendances à court et à long terme.

Stop Loss en temps réel

Le mécanisme d'arrêt des pertes en temps réel basé sur la Super Trend peut limiter efficacement les pertes par transaction.

Direction de négociation souple

Le choix entre le long, le court ou le bidirectionnel permet à cette stratégie de s'adapter à différents environnements de marché.

Analyse des risques

Optimisation des paramètres difficile

L'optimisation des paramètres tels que RMI et Super Trend est assez complexe.

Arrêtez la perte trop serrée

Le fait d'être trop sensible à de petites fluctuations peut entraîner des déclencheurs de stop loss excessifs.

Solution: assouplir de manière appropriée la fourchette de stop loss ou adopter d'autres méthodes de stop loss basées sur la volatilité.

Directions d'optimisation

Adaptabilité des actifs croisés

Élargir les actifs applicables et identifier les orientations d'optimisation des paramètres pour différents actifs, afin de permettre une réplication plus large sur plus de marchés.

Résultats de l'analyse

Incorporer des mécanismes de stop loss dynamiques pour mieux suivre les ondes d'oscillation actuelles et réduire les stop loss excessifs causés par des retracements mineurs.

Conditions de filtrage supplémentaires

Ajoutez des jugements d'autres indicateurs comme conditions de filtrage pour éviter d'entrer dans des positions sans signaux clairs.

Conclusion

Grâce à la combinaison ingénieuse de RMI et Super Trend, cette stratégie réalise des jugements précis sur les conditions du marché. Elle excelle également dans le contrôle des risques.


/*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)

Plus de