Momentum ADX et RSI combinés à une stratégie de stop suiveur réglable


Date de création: 2023-10-09 15:36:07 Dernière modification: 2023-10-09 15:36:07
Copier: 1 Nombre de clics: 711
1
Suivre
1617
Abonnés

Aperçu

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.

Principe de stratégie

Ligne de force et indice RSI pour juger de l’entrée

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

Un mécanisme de suspension de dommages

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.

Analyse des avantages

  • 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

Risques et contre-mesures

  • ADX détermine une fausse intrusion générant un mauvais signal

    • Ajuster les paramètres ADX pour s’assurer que la tendance est réelle
  • Le RSI produit plusieurs faux signaux

    • Modifier les paramètres de survente pour éviter les transactions fréquentes
  • Paramètre de dégradation modulable mal défini

    • Optimiser les paramètres pour trouver le niveau optimal de stop loss
  • Le saut en hauteur a été difficile à arrêter.

    • Envisagez de combiner le prix limite avec la liste de prix pour éviter de manquer le stop loss.

Optimiser les idées

  • 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

Résumer

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.

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