Cette stratégie combine des indicateurs de dynamisme avec l'indice de force relative (RSI) ainsi qu'un mécanisme dynamique de trailing stop pour capturer la direction de la tendance tout en contrôlant le risque.
Utiliser l'indicateur ADX pour déterminer la direction de la tendance des prix
ADX supérieur à 20 montre une tendance présente
+DI traversant au-dessus de -DI est un signal long
- Le passage de DI en dessous de +DI est un signal court
Indice de volatilité pour détecter le surachat/survente
Le RSI supérieur à 70 suggère un signal de surachat et de short
Le RSI inférieur à 30 indique une survente, un signal long.
Prendre des positions longues/courtes lorsque l'ADX affiche une tendance + un signal de confirmation RSI.
La stratégie utilise un mécanisme dynamique d'arrêt de traînée avec deux paramètres:
Niveau d'activation: Activation du trailing stop lorsque le prix atteint le pourcentage fixé après l'entrée
Pourcentage de traînée: pourcentage des traînées de niveau d'arrêt fixé par rapport au bénéfice le plus élevé
Une fois activé, l'arrêt de trailing suivra le niveau de profit le plus élevé. Au fur et à mesure que le prix se rétracte, le niveau d'arrêt descend. Si le retracement dépasse le pourcentage de trail, l'arrêt est déclenché pour fermer toutes les positions.
L'ADX de l'élan détermine la direction de la tendance, évitant de fausses ruptures
La confirmation de l'indice de résistance garantit que les opportunités d'inversion ne sont pas manquées
Un arrêt de traction réglable garantit les bénéfices et minimise les pertes
Une logique de stratégie simple et claire, facile à comprendre
Applicable à différents marchés et délais
L'ADX peut signaler une fausse rupture
Le RSI peut donner plusieurs faux signaux
Faibles paramètres de freinage du trail
Les lacunes peuvent entraîner des arrêts manqués
Testez les combinaisons ADX/RSI pour optimiser les entrées
Retour à l'essai des différents niveaux d'activation et des pourcentages de traces
Ajouter des filtres supplémentaires pour améliorer la qualité du signal
Test sur différents marchés pour trouver des paramètres fiables
Cette stratégie intègre l'analyse de l'élan, RSI et trailing stops pour déterminer efficacement la direction de la tendance, les inversions au comptant et contrôler le risque. La logique simple la rend simple à mettre en œuvre sur les marchés boursiers, forex, crypto et autres marchés tendance.
/*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)