Stratégie de mise à l'échelle de la couverture de momentum RSI-EMA multiple

RSI EMA TP SL
Date de création: 2024-12-04 15:41:10 Dernière modification: 2024-12-04 15:41:10
Copier: 0 Nombre de clics: 130
1
Suivre
1166
Abonnés

Stratégie de mise à l’échelle de la couverture de momentum RSI-EMA multiple

Aperçu

Il s’agit d’une stratégie de trading dynamiquement couverte basée sur les indicateurs RSI et la moyenne EMA. Cette stratégie utilise le double cycle de temps RSI ((RSI-14 et RSI-2) en combinaison avec le triple moyen EMA ((50 et 100 et 200) pour capturer les occasions de retournement de tendance du marché et pour obtenir un effet de levier grâce à la gestion dynamique de la position. La caractéristique centrale de la stratégie est d’augmenter progressivement les positions lorsque les conditions d’entrée sont remplies, tout en définissant des conditions d’arrêt de survente basées sur le RSI.

Principe de stratégie

La stratégie utilise des indices de force relative RSI-14 et RSI-2 de deux cycles différents, en combinaison avec les trois courbes EMA-50, EMA-100 et EMA-200, pour déterminer le signal de négociation. La condition multiconditionnelle nécessite que le RSI-14 soit inférieur à 31 et le RSI-2 soit supérieur à 10, tout en exigeant que les trois courbes équivalentes présentent un alignement à vide (EMA-50 < EMA-100 < EMA-200).

Avantages stratégiques

  1. Vérification croisée de multiples indicateurs techniques pour améliorer la fiabilité du signal
  2. Gestion dynamique des positions, permettant une adaptation flexible des positions en fonction des conditions du marché
  3. Un mécanisme de négociation bidirectionnel qui permet de tirer profit dans les deux sens
  4. Les conditions d’arrêt adaptées pour éviter un départ prématuré
  5. L’interface graphique affiche clairement les signaux de négociation et l’état du marché
  6. Les mécanismes de couverture peuvent réduire l’exposition aux risques unilatéraux
  7. Le calcul de positions dynamiques basé sur les droits et intérêts rend le contrôle des risques plus raisonnable

Risque stratégique

  1. Le risque de rupture de position peut être plus élevé avec un multiplicateur de levier élevé (de 20 fois)
  2. Les positions accrues peuvent entraîner de lourdes pertes en cas de fortes fluctuations du marché
  3. Il n’y a pas de conditions de stop-loss et le risque de baisse continue est possible
  4. L’indicateur RSI peut générer de faux signaux dans un marché latéral
  5. La combinaison de plusieurs indicateurs techniques pourrait réduire les opportunités de négociation
  6. La gestion de position peut engendrer un risque accru lors de transactions simultanées

Orientation de l’optimisation de la stratégie

  1. Introduction de mécanismes d’arrêt adaptatifs, tels que l’arrêt dynamique basé sur l’ATR ou la volatilité
  2. Optimiser le multiplicateur de levier, en tenant compte de la dynamique de la volatilité du marché
  3. Ajout d’un filtre temporel pour éviter de négocier pendant les périodes de faible volatilité
  4. L’introduction d’indicateurs de trafic pour améliorer la fiabilité du signal
  5. Optimiser le nombre de fois que la position est augmentée, en envisageant de définir une limite de position maximale
  6. Ajout d’un filtre de force de tendance pour éviter de négocier dans des tendances faibles
  7. Améliorer les mécanismes de gestion des risques, tels que la fixation d’une limite de perte maximale par jour

Résumer

Il s’agit d’une stratégie globale qui combine dynamisme et tendances pour améliorer la précision des transactions grâce à la combinaison de plusieurs indicateurs techniques. L’innovation de la stratégie réside dans l’utilisation d’une gestion de position dynamique et d’un mécanisme de couverture, mais elle comporte également un risque plus élevé.

Code source de la stratégie
/*backtest
start: 2024-11-26 00:00:00
end: 2024-12-03 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Custom RSI EMA Strategy Hedge", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// Definování vstupních podmínek
rsi_14 = ta.rsi(close, 14)
rsi_2 = ta.rsi(close, 2)
ema_50 = ta.ema(close, 50)
ema_100 = ta.ema(close, 100)
ema_200 = ta.ema(close, 200)

// Pákový efekt
leverage = 20

// Podmínky pro long pozici
longCondition = (rsi_14[1] < 31) and ta.crossover(rsi_2, 10) and (ema_50 < ema_100) and (ema_100 < ema_200)

// Podmínky pro short pozici
shortCondition = (rsi_14[1] > 69) and ta.crossunder(rsi_2, 90) and (ema_50 > ema_100) and (ema_100 > ema_200)

// Identifikátory pozic
long_id = "Long"
short_id = "Short"

// Definování průměrné ceny pozice pro long a short
var float long_avg_price = na
var float short_avg_price = na

// Sledujeme, zda se velikost pozice změnila
var float last_long_position_size = na
var float last_short_position_size = na

// Přerušení průměrné ceny pozice při změně pozice
if (last_long_position_size != strategy.position_size and strategy.position_size > 0)
    long_avg_price := na
if (last_short_position_size != strategy.position_size and strategy.position_size < 0)
    short_avg_price := na

// Aktualizace průměrné ceny pozice
if (strategy.position_size > 0)
    long_avg_price := strategy.position_avg_price
else
    long_avg_price := na

if (strategy.position_size < 0)
    short_avg_price := strategy.position_avg_price
else
    short_avg_price := na

// Uložení aktuální velikosti pozice pro příští bar
if (strategy.position_size > 0)
    last_long_position_size := strategy.position_size
else if (strategy.position_size < 0)
    last_short_position_size := strategy.position_size

// Podmínky pro take profit
takeProfitLongCondition = (rsi_14 > 69) and (rsi_2 > 90) and (long_avg_price < close)
takeProfitShortCondition = (rsi_14 < 31) and (rsi_2 < 10) and (short_avg_price > close)

// Velikost pozice
new_long_position_size = strategy.position_size == 0 ? na : math.abs(strategy.position_size) * 2
new_short_position_size = strategy.position_size == 0 ? na : math.abs(strategy.position_size) * 2

// Úprava velikosti pozice s ohledem na pákový efekt
position_value = strategy.equity * leverage
trade_qty_long = position_value / close
trade_qty_short = position_value / close

// Vstup do long pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici
if (longCondition)
    strategy.entry(long_id, strategy.long, qty=new_long_position_size == na ? trade_qty_long : new_long_position_size)

// Vstup do short pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici
if (shortCondition)
    strategy.entry(short_id, strategy.short, qty=new_short_position_size == na ? trade_qty_short : new_short_position_size)

// Výstup z long pozice při splnění podmínek pro take profit
if (takeProfitLongCondition)
    strategy.close(long_id)

// Výstup z short pozice při splnění podmínek pro take profit
if (takeProfitShortCondition)
    strategy.close(short_id)

// Zvýraznění části grafu, kde platí podmínky pro long
highlightLongCondition = (ema_50 < ema_100) and (ema_100 < ema_200)
bgcolor(highlightLongCondition ? color.new(color.green, 90) : na)

// Zvýraznění části grafu, kde platí podmínky pro short
highlightShortCondition = (ema_50 > ema_100) and (ema_100 > ema_200)
bgcolor(highlightShortCondition ? color.new(color.red, 90) : na)

// Přidání bodů pozic do grafu
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="L")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="S")

// Vykreslení průměrné ceny pozice pro long a short pouze pokud pozice existuje
plot(strategy.position_size > 0 ? long_avg_price : na, title="Long Avg Price", color=color.blue, linewidth=2)
plot(strategy.position_size < 0 ? short_avg_price : na, title="Short Avg Price", color=color.orange, linewidth=2)

// Zvýraznění čtverců pro RSI14 > 70 (červeně) a RSI14 < 30 (zeleně)
var int rsi_above_70_start = na
var int rsi_below_30_start = na

var float top_value_above_70 = na
var float bottom_value_above_70 = na

var float top_value_below_30 = na
var float bottom_value_below_30 = na

// Identifikace začátku a konce období pro RSI14 > 70
if (rsi_14[1] > 70 and rsi_14[2] > 70)
    if na(rsi_above_70_start)
        rsi_above_70_start := bar_index
        top_value_above_70 := high
        bottom_value_above_70 := low
    else
        top_value_above_70 := math.max(top_value_above_70, high)
        bottom_value_above_70 := math.min(bottom_value_above_70, low)
else
    if not na(rsi_above_70_start)
        // box.new(left = rsi_above_70_start, right = bar_index - 1, top = top_value_above_70, bottom = bottom_value_above_70, border_color = color.red, border_width = 2, bgcolor=color.new(color.red, 90))
        rsi_above_70_start := na
        top_value_above_70 := na
        bottom_value_above_70 := na

// Identifikace začátku a konce období pro RSI14 < 30
if (rsi_14[1] < 30 and rsi_14[2] < 30)
    if na(rsi_below_30_start)
        rsi_below_30_start := bar_index
        top_value_below_30 := high
        bottom_value_below_30 := low
    else
        top_value_below_30 := math.max(top_value_below_30, high)
        bottom_value_below_30 := math.min(bottom_value_below_30, low)
else
    if not na(rsi_below_30_start)
        // box.new(left = rsi_below_30_start, right = bar_index - 1, top = top_value_below_30, bottom = bottom_value_below_30, border_color = color.green, border_width = 2, bgcolor=color.new(color.green, 90))
        rsi_below_30_start := na
        top_value_below_30 := na
        bottom_value_below_30 := na