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

L'ADX de l'élan avec la stratégie RSI Trailing Stop

Auteur:ChaoZhang est là., Date: 2023-10-09 15h36:07
Les étiquettes:

Résumé

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.

Comment fonctionne- t- il?

Entrée avec Momentum ADX et RSI

  • 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.

Arrêt de traction réglable

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.

Les avantages

  • 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

Risques et atténuations

  • L'ADX peut signaler une fausse rupture

    • Ajustez les paramètres ADX pour détecter les véritables mouvements de tendance
  • Le RSI peut donner plusieurs faux signaux

    • Ajustez les niveaux de surachat/survente pour réduire les déficits
  • Faibles paramètres de freinage du trail

    • Optimiser les paramètres pour trouver les meilleurs niveaux d'arrêt
  • Les lacunes peuvent entraîner des arrêts manqués

    • Considérez l' utilisation d' ordres stop-limit

Des possibilités d'optimisation

  • 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

Conclusion

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)


Plus de