Cette stratégie est basée sur l’amplitude réelle moyenne ((ATR) et l’indice de force relative (RSI) pour concevoir un système de trading avec une fonction de suivi de la tendance. Le système peut identifier automatiquement la direction de la tendance et dispose d’une fonction d’arrêt et de perte.
Calculer l’ATR et le RSI. L’ATR reflète la fluctuation moyenne des prix au cours de la période la plus récente. Le RSI reflète le rapport de force entre les deux parties.
L’ATR est considéré comme une période de forte volatilité lorsqu’il est supérieur à sa moyenne mobile.
Lorsque le RSI est supérieur à la ligne de survente, faites plus; lorsque le RSI est inférieur à la zone de survente, faites moins.
Après avoir effectué un plus, multipliez le point élevé par le rapport fixe pour suivre le stop loss. Après avoir effectué un short, multipliez le point bas par le rapport fixe pour suivre le stop loss.
Le taux de profit est à l’arrêt.
Le suivi des pertes peut maximiser les pertes et réduire les pertes.
Le RSI peut être un bon indicateur de la force de la hausse et évite de répéter des positions sur des positions de choc.
L’ATR est un indicateur de volatilité qui permet de filtrer les mouvements de choc et de négocier uniquement sur les tendances.
Le seuil de marge peut bloquer une partie de la marge.
L’ATR et le RSI sont des indicateurs de retard qui peuvent entraîner un décalage du point d’entrée. Les paramètres peuvent être optimisés de manière appropriée pour rendre le système plus sensible.
Le stop-loss est plus optimisé que le stop-loss fixe et doit être réglé avec précaution en fonction des résultats de la rétroanalyse.
Dans des conditions de grand cyclone, l’ATR peut être plus élevé que la moyenne mobile pendant une longue période, ce qui entraîne une sur-échange. D’autres conditions de filtrage peuvent être ajoutées.
Optimiser les paramètres ATR et RSI pour rendre le système plus sensible
Il est important d’ajouter des indicateurs comme la MA pour juger de la direction de la tendance et éviter de se tromper sur les chocs.
Essayez le ratio de stop-loss dynamique plutôt que le réglage fixe.
Considérer l’ajout de mesures de contrôle des volumes de transactions.
Cette stratégie intègre les avantages des deux indicateurs ATR et RSI et conçoit un système de trading de suivi de tendance simple et pratique. La stabilité du système peut être encore améliorée par l’optimisation des paramètres et l’ajout de conditions de filtrage.
/*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)