
Cette stratégie est un système de trading quantitatif avancé qui combine les bandes de Brin, l’indicateur RSI et le filtre de tendance EMA à 200 cycles. La stratégie capture les opportunités de rupture à haute probabilité dans la direction de la tendance grâce à la coordination de plusieurs indicateurs techniques, tout en filtrant efficacement les faux signaux dans les marchés en crise.
La logique de base de la stratégie repose sur les trois niveaux suivants:
La confirmation de la transaction doit répondre aux conditions suivantes:
Suggestions de contrôle des risques :
Les principales idées d’optimisation:
La stratégie a été développée en utilisant une combinaison organique d’indicateurs techniques tels que les bandes de Brin, le RSI et l’EMA pour construire un système de négociation complet. Le système a démontré une forte valeur d’application dans le monde réel grâce à un contrôle strict des risques et à un espace d’optimisation flexible des paramètres, tout en garantissant la qualité des transactions.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Improved Bollinger Breakout with Trend Filtering", overlay=true)
// === Inputs ===
length = input(20, title="Bollinger Bands Length", tooltip="The number of candles used to calculate the Bollinger Bands. Higher values smooth the bands, lower values make them more reactive.")
mult = input(2.0, title="Bollinger Bands Multiplier", tooltip="Controls the width of the Bollinger Bands. Higher values widen the bands, capturing more price movement.")
rsi_length = input(14, title="RSI Length", tooltip="The number of candles used to calculate the RSI. Shorter lengths make it more sensitive to recent price movements.")
rsi_midline = input(50, title="RSI Midline", tooltip="Defines the midline for RSI to confirm momentum. Higher values make it stricter for bullish conditions.")
risk_reward_ratio = input(1.5, title="Risk/Reward Ratio", tooltip="Determines the take-profit level relative to the stop-loss.")
atr_multiplier = input(1.5, title="ATR Multiplier for Stop-Loss", tooltip="Defines the distance of the stop-loss based on ATR. Higher values set wider stop-losses.")
volume_filter = input(true, title="Enable Volume Filter", tooltip="If enabled, trades will only execute when volume exceeds the 20-period average.")
trend_filter_length = input(200, title="Trend Filter EMA Length", tooltip="The EMA length used to filter trades based on the market trend.")
trade_direction = input.string("Both", title="Trade Direction", options=["Long", "Short", "Both"], tooltip="Choose whether to trade only Long, only Short, or Both directions.")
confirm_candles = input(2, title="Number of Confirming Candles", tooltip="The number of consecutive candles that must meet the conditions before entering a trade.")
// === Indicator Calculations ===
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper_band = basis + dev
lower_band = basis - dev
rsi_val = ta.rsi(close, rsi_length)
atr_val = ta.atr(14)
vol_filter = volume > ta.sma(volume, 20)
ema_trend = ta.ema(close, trend_filter_length)
// === Helper Function for Confirmation ===
confirm_condition(cond, lookback) =>
count = 0
for i = 0 to lookback - 1
count += cond[i] ? 1 : 0
count == lookback
// === Trend Filter ===
trend_is_bullish = close > ema_trend
trend_is_bearish = close < ema_trend
// === Long and Short Conditions with Confirmation ===
long_raw_condition = close > upper_band * 1.01 and rsi_val > rsi_midline and (not volume_filter or vol_filter) and trend_is_bullish
short_raw_condition = close < lower_band * 0.99 and rsi_val < rsi_midline and (not volume_filter or vol_filter) and trend_is_bearish
long_condition = confirm_condition(long_raw_condition, confirm_candles)
short_condition = confirm_condition(short_raw_condition, confirm_candles)
// === Trade Entry and Exit Logic ===
if long_condition and (trade_direction == "Long" or trade_direction == "Both")
strategy.entry("Long", strategy.long)
strategy.exit("Exit Long", "Long", stop=close - (atr_multiplier * atr_val), limit=close + (atr_multiplier * risk_reward_ratio * atr_val))
if short_condition and (trade_direction == "Short" or trade_direction == "Both")
strategy.entry("Short", strategy.short)
strategy.exit("Exit Short", "Short", stop=close + (atr_multiplier * atr_val), limit=close - (atr_multiplier * risk_reward_ratio * atr_val))
// === Plotting ===
plot(upper_band, color=color.green, title="Upper Band")
plot(lower_band, color=color.red, title="Lower Band")
plot(basis, color=color.blue, title="Basis")
plot(ema_trend, color=color.orange, title="Trend Filter EMA")