Stratégie de scalping basée sur l'indicateur RSI avec arrêt-perte de suivi

Auteur:ChaoZhang est là., Date: 2023-12-12 15:46:49 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie s'appelle Scalping Strategy basée sur l'indicateur RSI avec Trailing Stop Loss. Elle utilise l'indicateur RSI pour déterminer les conditions de surachat et de survente, se combine avec des moyennes mobiles (MA) rapides et lentes pour déterminer la direction de la tendance et définit les conditions d'entrée.

La logique de la stratégie

Les signaux d'entrée de cette stratégie sont principalement déterminés par l'indicateur RSI et les croisements MA. Le paramètre RSI est défini sur 2 périodes pour capturer rapidement les situations de surachat et de survente pour des opportunités d'inversion.

Entrée longue: la MA rapide dépasse la MA lente, le prix dépasse la MA lente et le RSI est inférieur au niveau de survente (défaut 10%); Entrée courte: la MA rapide dépasse la MA lente, le prix est inférieur à la MA lente et le RSI est supérieur au niveau de surachat (défaut 90%).

En outre, il y a un filtre de volatilité en option dans la stratégie. Il calcule la différence entre les pentes des MAs rapides et lents. Les positions ne seront ouvertes que lorsque la différence dépasse un seuil. Le but est d'éviter d'ouvrir des positions lorsqu'il n'y a pas de direction claire pendant la fluctuation du marché.

Sur le côté de la sortie, la stratégie utilise un pourcentage de stop loss.

Analyse des avantages

Les principaux avantages de cette stratégie sont les suivants:

  1. L'indice de volatilité de 2 périodes peut rapidement capturer les situations de surachat et de survente pour des opportunités de renversement.
  2. Les MAs rapides et lents permettent d'identifier efficacement la direction de la tendance et les points tournants.
  3. La combinaison des deux indicateurs RSI et MA évite de fausses ruptures.
  4. Le filtre de volatilité évite d'ouvrir des positions lorsqu'il n'y a pas de direction claire pendant la fluctuation.
  5. Le pourcentage de perte par arrêt peut être ajusté en fonction de la volatilité du marché afin de contrôler efficacement les risques.

Analyse des risques

Cette stratégie comporte également certains risques:

  1. Les indicateurs RSI et MA ont un certain effet de retard, peuvent manquer certaines opportunités d'inversion.
  2. Le pourcentage d'arrêt des pertes est susceptible d'être déclenché par de faibles baisses de volume.
  3. Les fluctuations significatives des prix du jour au lendemain et avant le marché ne sont pas gérées efficacement.

Les orientations d'optimisation des risques sont les suivantes:

  1. Ajustez le paramètre RSI à 1 période pour réduire l'effet de retard.
  2. Optimiser les périodes d'AEM en fonction des caractéristiques du symbole.
  3. Ajuster le niveau de stop loss en pourcentage pour équilibrer le stop loss et la tolérance à la fluctuation.

Directions d'optimisation

Les orientations d'optimisation de cette stratégie sont les suivantes:

  1. Ajouter d'autres jugements d'indicateurs, comme le volume, pour éviter de faux signaux de rupture.
  2. Ajouter des prédictions de modèles d'apprentissage automatique pour aider à la prise de décision.
  3. Optimiser les temps de pyramide et le dimensionnement des positions pour améliorer encore le rendement.
  4. Mettez en place des filtres pour les fluctuations des prix du jour au lendemain et avant le marché.

Conclusion

En général, il s'agit d'une stratégie de suivi de tendance relativement stable. En combinant des indicateurs doubles RSI et MA, il assure une certaine stabilité tout en capturant des opportunités d'inversion de tendance plus claires. Le filtre de volatilité évite certains risques et le stop loss en pourcentage contrôle également efficacement la perte d'un seul commerce. Cette stratégie peut être utilisée comme une stratégie générique multi-symbole et peut également être optimisée sur des paramètres et des modèles pour des symboles spécifiques pour obtenir de meilleurs résultats.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// Scalping strategy
// © Lukescream and Ninorigo
// (original version by Lukescream - lastest versions by Ninorigo) - v1.3
//

//@version=4
strategy(title="Scalping using RSI 2 indicator", shorttitle="RSI 2 Strategy", overlay=true, pyramiding=0, process_orders_on_close=false)

var bool ConditionEntryL = false
var bool ConditionEntryS = false


//***********
// Costants
//***********
def_start_date = timestamp("01 Jan 2021 07:30 +0000")
def_end_date   = timestamp("01 Dec 2024 07:30 +0000")

def_rsi_length = 2
def_overbought_value = 90
def_oversold_value   = 10

def_slow_ma_length = 200
def_fast_ma_length = 50
def_ma_choice      = "EMA"

def_tick   = 0.5
def_filter = true

def_trailing_stop = 1


//***********
// Change the optional parameters
//***********
start_time  = input(title="Start date", defval=def_start_date, type=input.time)
end_time    = input(title="End date", defval=def_end_date, type=input.time)
// RSI
src         = input(title="Source", defval=close, type=input.source)
rsi_length  = input(title="RSI Length", defval=def_rsi_length, minval=1, type=input.integer)
overbought_threshold = input(title="Overbought threshold", defval=def_overbought_value, type=input.float)
oversold_threshold   = input(title="Oversold threshold", defval=def_oversold_value, type=input.float)
// Moving average
slow_ma_length = input(title="Slow MA length", defval=def_slow_ma_length, type=input.integer)
fast_ma_length = input(title="Fast MA length", defval=def_fast_ma_length, type=input.integer)
ma_choice = input(title="MA choice", defval="EMA", options=["SMA", "EMA"])
// Input ticker
tick   = input(title="Ticker size", defval=def_tick, type=input.float)
filter = input(title="Trend Filter", defval=def_filter, type=input.bool)
// Trailing stop (%)
ts_rate = input(title="Trailing Stop %", defval=def_trailing_stop, type=input.float)


//***********
// RSI
//***********
// Calculate RSI
up   = rma(max(change(src), 0), rsi_length)
down = rma(-min(change(src), 0), rsi_length)
rsi = (down == 0 ? 100 : (up == 0 ? 0 : 100-100/(1+up/down)))


//***********
// Moving averages
//***********
slow_ma = (ma_choice == "SMA" ? sma(close, slow_ma_length) : ema(close, slow_ma_length))
fast_ma = (ma_choice == "SMA" ? sma(close, fast_ma_length) : ema(close, fast_ma_length))
// Show the moving averages
plot(slow_ma, color=color.white,  title="Slow MA")
plot(fast_ma, color=color.yellow, title="Fast MA")


//***********
// Strategy
//***********
if true
    // Determine the entry conditions (only market entry and market exit conditions)
    // Long position
    ConditionEntryL := (filter == true ? (fast_ma > slow_ma and close > slow_ma and rsi < oversold_threshold) : (fast_ma > slow_ma and rsi < oversold_threshold))
    // Short position
    ConditionEntryS := (filter == true ? (fast_ma < slow_ma and close < slow_ma and rsi > overbought_threshold) : (fast_ma < slow_ma and rsi > overbought_threshold))
   
    // Calculate the trailing stop
    ts_calc = close * (1/tick) * ts_rate * 0.01

    // Submit the entry orders and the exit orders
    // Long position
    if ConditionEntryL
        strategy.entry("RSI Long", strategy.long)
    // Exit from a long position
    strategy.exit("Exit Long", "RSI Long", trail_points=0, trail_offset=ts_calc)

    // Short position 
    if ConditionEntryS
        strategy.entry("RSI Short", strategy.short)
    // Exit from a short position
    strategy.exit("Exit Short", "RSI Short", trail_points=0, trail_offset=ts_calc)

// Highlights long conditions
bgcolor (ConditionEntryL ? color.navy : na, transp=60, offset=1, editable=true, title="Long position band")
// Highlights short conditions
bgcolor (ConditionEntryS ? color.olive : na, transp=60, offset=1, editable=true, title="Short position band")


Plus de