Tendance basée sur l'ATR et le RSI à la suite d'une stratégie de négociation

Auteur:ChaoZhang est là., Date: 2023-10-09 15:18:10 Je suis désolé.
Les étiquettes:

Résumé

Cette stratégie conçoit un système de trading avec une fonction de suivi de tendance basée sur la plage moyenne vraie (ATR) et l'indice de force relative (RSI).

La logique de la stratégie

  1. Calculer ATR et RSI. ATR reflète la volatilité moyenne des prix sur une période. RSI reflète la comparaison de puissance entre les taureaux et les ours.

  2. Lorsque l'ATR est supérieur à sa moyenne mobile, il est considéré comme une période de forte volatilité adaptée à la négociation.

  3. Lorsque le RSI est au-dessus de la ligne de surachat, allez long. Lorsque le RSI est en dessous de la zone de survente, allez court.

  4. Après long, utiliser le point élevé multiplié par un ratio fixe comme prix de stop-loss.

  5. Prenez le profit par rapport au ratio de profit.

Analyse des avantages

  1. Les ordres de stop loss peuvent maximiser les ordres de stop loss pour réduire les pertes.

  2. Le RSI peut évaluer efficacement la puissance des taureaux et des ours afin d'éviter d'ouvrir à plusieurs reprises des positions sur des marchés à fourchette.

  3. En tant qu'indicateur de volatilité, l'ATR peut filtrer les marchés à fourchette et ne négocier que sur les marchés à tendance.

  4. Le rapport bénéfice/bénéfice peut engendrer des bénéfices.

Analyse des risques

  1. L'ATR et le RSI sont tous deux des indicateurs à retardement, ce qui peut entraîner un délai d'entrée tardif.

  2. Le ratio de profit et de perte fixe pour les arrêts de perte et les prises de profit est sujet à une optimisation excessive, il convient de le fixer avec prudence sur la base des résultats des tests antérieurs.

  3. Dans les grands marchés liés à la fourchette de cycles, l'ATR peut être supérieur à la moyenne mobile pendant une longue période, ce qui conduit à une survente.

Directions d'optimisation

  1. Optimiser les paramètres d'ATR et RSI pour rendre le système plus sensible.

  2. Ajouter MA et d'autres indicateurs pour déterminer la direction de la tendance, éviter d'entrer à tort sur des marchés à fourchette.

  3. Essayez le stop loss dynamique et prenez des ratios de profit, au lieu de réglages fixes.

  4. Envisager d'ajouter des mesures de contrôle de la taille des transactions.

Résumé

Cette stratégie intègre les avantages des indicateurs ATR et RSI et conçoit une tendance simple et pratique suivant le système de trading. Amélioration de la stabilité du système par l'optimisation des paramètres et l'ajout de filtres.


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

// © liwei666
//@version=5
// # ========================================================================= #
// #                   |   Strategy  |
// # ========================================================================= #
strategy(
 title                = "ATR_RSI_Strategy v2[liwei666]",
 shorttitle           = "ATR_RSI_Strategy",
 overlay              =  true,
 max_lines_count                 =  500, 
 max_labels_count                =  500, 
 max_boxes_count                 =  500,
 max_bars_back = 5000,
 initial_capital = 10000,
 default_qty_type=strategy.percent_of_equity, 
 default_qty_value=50, commission_type=strategy.commission.percent, pyramiding=1, 
 commission_value=0.05
 )
// # ========================================================================= #
// #                   |   Strategy  |
// # ========================================================================= #

atr_length = input.int(26, "atr_length", minval = 6, maxval = 100, step=1)
atr_ma_length = input.int(45, "atr_ma_length", minval = 6, maxval = 100, step=1)
rsi_length = input.int(15, "rsi_length", minval = 6, maxval = 100, step=1)
rsi_entry = input.int(10, "rsi_entry", minval = 6, maxval = 100, step=1)
atr_ma_norm_min = input.float(0.3, "atr_ma_norm_min", minval = 0.1, maxval = 0.5, step=0.1)
atr_ma_norm_max = input.float(0.7, "atr_ma_norm_max", minval = 0.5, maxval = 1, step=0.1)
trailing_percent= input.float(1.5, "trailing_percent", minval = 0.1, maxval = 2, step=0.1)

var rsi_buy = 50 + rsi_entry
var rsi_sell = 50 - rsi_entry

sma_norm_h_45() => 
    source = high
    n = 45
    sma = ta.sma(source, n) 
    sma_norm = (sma - ta.lowest(sma, n)) / (ta.highest(sma,n) - ta.lowest(sma, n))
    sma_norm

atr_value = ta.atr(atr_length)
atr_ma = ta.sma(atr_value, atr_ma_length) 
rsi_value = ta.rsi(close, length = rsi_length) 
atr_ma_norm = atr_ma / close * 100
sma_norm = sma_norm_h_45()

var intra_trade_high = 0.0
var intra_trade_low = 0.0

if strategy.position_size == 0
    intra_trade_high := high
    intra_trade_low := low

    if atr_ma_norm >= atr_ma_norm_min and atr_ma_norm <= atr_ma_norm_max
        if atr_value > atr_ma
            if rsi_value > rsi_buy
                strategy.entry("B1", strategy.long, limit = close + 5 )
            else if rsi_value < rsi_sell
                strategy.entry("S1", strategy.short, limit = close - 5 )
else if strategy.position_size > 0
    intra_trade_high := math.max(intra_trade_high, high)
    intra_trade_low := low

    long_tp = intra_trade_high * (1 - trailing_percent / 100)
    strategy.exit("Exit B1", from_entry="B1", stop = long_tp, limit = strategy.position_avg_price * 1.03)

else if strategy.position_size < 0
    intra_trade_high := high
    intra_trade_low := math.min(intra_trade_low, low) 

    short_tp = intra_trade_low * (1 + trailing_percent / 100)
    strategy.exit("Exit S1", from_entry="S1", stop = short_tp, limit = strategy.position_avg_price * 0.94)

Plus de