Stratégie synchrone de tendance Momentum


Date de création: 2024-01-16 14:10:25 Dernière modification: 2024-01-16 14:10:25
Copier: 0 Nombre de clics: 818
1
Suivre
1617
Abonnés

Stratégie synchrone de tendance Momentum

Aperçu

La stratégie de synchronisation des tendances dynamiques combine efficacement l’analyse de la dynamique et le jugement des tendances en intégrant les avantages de l’indice de dynamique relative (RMI) et de l’indicateur de super-tendance. La stratégie se concentre sur les tendances des changements de prix et les niveaux de dynamique du marché pour juger de la direction du marché dans une perspective plus globale.

Principe de stratégie

Indice de dynamique relative (RMI)

Le RMI est une version améliorée de l’indice d’intensité relative (RSI). Il intègre plus de caractéristiques telles que la direction et l’ampleur des variations de prix, ce qui permet de juger plus précisément de la dynamique du marché.

Méthode de calcul du RMI

Le RMI est calculé en calculant les hausses et les baisses moyennes d’une période donnée. Contrairement au RSI, le RMI utilise la variation du prix de clôture du jour par rapport au prix de clôture de la journée précédente, plutôt qu’une simple augmentation positive et une augmentation négative.

Décision sur la dynamique

Cette stratégie utilise le RMI par rapport à la moyenne des IFM pour comparer avec les dévaluations de dynamique positive et négative prédéterminées, afin de juger du niveau actuel de dynamique du marché et de décider de la position de placement par rapport à la position de clôture.

Indicateur de super-tendance

L’indicateur de super-tendance est basé sur des calculs de périodes de temps plus élevées et peut fournir des jugements sur les grandes tendances. Il ajuste les paramètres ATR dynamiques en fonction de l’amplitude d’onde réelle, permettant ainsi d’identifier efficacement les points de retournement de tendance.
La stratégie a également ajouté une ligne moyenne pondérée en volume de transactions VWMA, renforçant encore la capacité d’identifier les changements de tendance importants.

Sélection de la direction

Cette stratégie permet de choisir entre la position plus, la position plus courte ou la position bilatérale. Cela permet au trader de s’adapter de manière flexible en fonction de ses propres opinions sur le marché et de ses préférences en matière de risque.

Analyse des forces stratégiques

La dynamique combinée à la tendance

Cette stratégie permet de juger plus précisément les tendances du marché en intégrant les avantages de l’indicateur RMI et de l’indicateur de super-tendance par rapport à une stratégie utilisant uniquement un indicateur de dynamique ou un indicateur de tendance.

Analyse à cycles multiples

L’utilisation d’indicateurs de RMI et de super-tendances pour différents cycles permet de mieux comprendre les tendances à court et à long terme.

Stratégie de stop loss en temps réel

Le système de stop loss en temps réel, basé sur une super tendance, permet de contrôler efficacement les pertes individuelles.

Flexibilité dans la direction de la transaction

Le choix de la plus-value, de la plus-valeur ou de la transaction bidirectionnelle permet à la stratégie de s’adapter à différents environnements de marché.

Analyse des risques

Les paramètres sont difficiles à optimiser

L’optimisation de paramètres tels que l’IMR et les super-tendances est complexe et une mauvaise configuration peut affecter l’efficacité de la stratégie.

Le blocage trop près peut entraîner un blocage excessif.

La sensibilité excessive aux fluctuations de marché à court terme peut entraîner des pertes de liquidité trop fréquentes.

Solution: élargissement approprié du périmètre ou utilisation d’une autre méthode de freinage.

Orientation de l’optimisation de la stratégie

Optimisation de l’adaptation à plusieurs variétés

Élargir la gamme de variétés applicables, identifier les différentes variétés et les directions d’optimisation des paramètres. Permettre à la stratégie d’être reproduite dans plus de marchés.

Optimisation dynamique du stop loss

L’ajout d’un mode d’arrêt dynamique permet à la ligne d’arrêt de mieux suivre la bande passante et de réduire les pertes excessives causées par des vibrations mineures.

Ajout de conditions de filtrage

En combinant plus d’indicateurs de jugement comme conditions de filtrage, on évite de construire un entrepôt en l’absence de signal clair.

Résumer

La stratégie permet de juger avec précision de l’état du marché grâce à une combinaison habile d’indicateurs de RMI et de super-tendances. Elle est également très bonne pour contrôler les risques. Grâce à une optimisation approfondie, on pense que sa performance sera de plus en plus excellente sur plusieurs variétés et plusieurs cycles.

Code source de la stratégie
/*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)