La stratégie combine l’indicateur de dynamique avec l’indicateur relativement fort (RSI) et un mécanisme de stop-loss qui peut être suivi pour capturer la direction de la tendance tout en contrôlant le risque. Lorsque le prix est fort, achetez plus; lorsque le prix est faible, vendez à zéro. La stratégie définit également des conditions de stop-loss et utilise le stop-loss pour suivre les niveaux de profit les plus élevés, afin de bloquer les profits et réduire les pertes.
Utilisation de l’indicateur de dynamique ADX pour déterminer la direction de la tendance des prix
ADX plus grand que 20 indique une tendance
Signal de réveil lorsque le +DI passe par le -DI
Un signal baissier lorsque la ligne -DI est traversée par la ligne +DI
L’indicateur RSI détermine le surachat et le survente
Le RSI au-dessus de 70 est une zone de sur-achat et de baisse
RSI inférieur à 30 est une zone de survente et un signal de baisse
Lorsque l’ADX estime qu’une tendance est présente et que le RSI émet un signal de confirmation, effectuez une opération de plus-value correspondante.
La stratégie utilise un mécanisme d’arrêt de la traînée dynamiquement ajustable, comprenant deux paramètres:
Ratio d’activation: après l’ouverture d’une position, le stop loss est activé lorsque le prix atteint le ratio défini
Ratio de suivi: la distance de suivi entre les pertes et les gains les plus récents
Lorsque le prix atteint les conditions d’activation, la ligne de stop-loss suivante suit le niveau de gain le plus élevé. Lorsque le prix recule, la ligne de stop-loss se déplace en dessous. Si la reprise dépasse le taux de suivi défini, la ligne de stop-loss est déclenchée et toutes les positions sont fermées.
Les indicateurs dynamiques permettent de juger de la direction de la tendance et d’éviter les déboires des entreprises
L’indicateur RSI assure de ne pas rater une reprise
Le stop loss peut être suivi pour bloquer les bénéfices et réduire les pertes.
La stratégie est claire, concise et facile à comprendre.
Large portée pour différents marchés et périodes
ADX détermine une fausse intrusion générant un mauvais signal
Le RSI produit plusieurs faux signaux
Paramètre de dégradation modulable mal défini
Le saut en hauteur a été difficile à arrêter.
Test d’optimisation d’entrée avec différentes combinaisons de paramètres ADX et RSI
Détection des différents points d’activation de stop-loss et de l’amplitude de suivi pour trouver les paramètres optimaux
Envisager d’ajouter des filtres à d’autres indicateurs pour améliorer la qualité du signal
Test des paramètres généraux pour différents marchés
La stratégie intègre l’analyse de la dynamique, l’indicateur RSI et le mécanisme de stop-loss de suivi, permettant de déterminer efficacement la direction de la tendance, d’identifier les points de retournement et de contrôler les risques de négociation. La stratégie est clairement pensée, simple à mettre en œuvre et peut être largement utilisée dans les marchés tels que les actions, les devises et les monnaies numériques.
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-03 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Trailing Stop with RSI", overlay=true)
length = input.int(12, "Momentum Length")
price = close
momentum(seria, length) =>
mom = seria - seria[length]
mom
mom0 = momentum(price, length)
mom1 = momentum(mom0, 1)
rsiLength = input.int(14, "RSI Length")
rsiOverbought = input(70, "RSI Overbought Level")
rsiOversold = input(30, "RSI Oversold Level")
rsiValue = ta.rsi(close, rsiLength)
tsact = input.float(0.0, "Trailing Stop Activation (%)", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100
tsact := tsact ? tsact : na
ts = input.float(0.0, "Position Trailing Stop (%)", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100
ts := ts ? ts : na
in_long = strategy.position_size > 0
in_short = strategy.position_size < 0
var ts_ = array.new_float()
ts_size = array.size(ts_)
ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0
if in_long
if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact
if ts_size > 0 and ts_get < high
array.push(ts_, high)
if ts_size < 1
array.push(ts_, high)
if not tsact
if ts_size > 0 and ts_get < high
array.push(ts_, high)
if ts_size < 1
array.push(ts_, high)
if in_short
if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact
if ts_size > 0 and ts_get > low
array.push(ts_, low)
if ts_size < 1
array.push(ts_, low)
if not tsact
if ts_size > 0 and ts_get > low
array.push(ts_, low)
if ts_size < 1
array.push(ts_, low)
trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na
if (mom0 > 0 and mom1 > 0)
strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
strategy.cancel("MomSE")
tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na
if trail
strategy.close_all()
if not strategy.opentrades
array.clear(ts_)
rsiOverboughtCondition = rsiValue >= rsiOverbought
rsiOversoldCondition = rsiValue <= rsiOversold
if rsiOverboughtCondition
strategy.close("SHORT", "SX")
strategy.entry("LONG", strategy.long)
if rsiOversoldCondition
strategy.close("LONG", "LX")
strategy.entry("SHORT", strategy.short)
plotchar(ts_get, "GET", "")
plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross)
plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross)
plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)