
La stratégie est un système de trading quantitatif qui combine le principe de la régression des valeurs moyennes avec les indicateurs techniques MACD et ATR. La stratégie identifie les écarts de prix à travers les bandes de Bollinger, utilise la dynamique de confirmation du MACD et gère les risques dynamiques en combinaison avec ATR. L’idée centrale de la stratégie est de capturer les opportunités de régression des prix en cas d’écarts significatifs, par vérification de plusieurs indicateurs techniques.
La stratégie utilise une triple synchronisation des indicateurs techniques: d’abord, pour déterminer si le prix s’est écarté de manière significative en remontant et en descendant la courbe de Brin; ensuite, pour vérifier la dynamique des prix en utilisant l’indicateur MACD pour s’assurer que la direction des transactions est conforme à la tendance du marché; enfin, pour introduire l’indicateur ATR pour définir des positions de stop-loss et de gain dynamiques. Plus précisément, lorsque le prix franchit la courbe de Brin en descendant et que la ligne MACD est en haut de la ligne de signal, le système génère un signal multiple; lorsque le prix franchit la courbe de Brin en remontant et que la ligne MACD est en bas de la ligne de signal, le système génère un signal vide.
Il s’agit d’une stratégie qui combine l’analyse technique classique avec des méthodes de trading quantitatives modernes. Grâce à l’utilisation conjointe de plusieurs indicateurs, les avantages de base de la stratégie de régression moyenne sont conservés, tout en surmontant les limites d’un seul indicateur. La stratégie est extensible, grâce à l’optimisation des paramètres et à l’ajout de modules fonctionnels, ce qui permet d’améliorer continuellement sa performance dans différents environnements de marché.
/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Enhanced Mean Reversion with MACD and ATR", overlay=true)
// Nastavenia Bollinger Bands
bbLength = input(20, title="Bollinger Bands Length")
bbMult = input(2, title="Bollinger Bands Multiplier")
basis = ta.sma(close, bbLength)
dev = ta.stdev(close, bbLength)
upperBand = basis + bbMult * dev
lowerBand = basis - bbMult * dev
// MACD indikátor
macdShort = input(12, title="MACD Short Length")
macdLong = input(26, title="MACD Long Length")
macdSignal = input(9, title="MACD Signal Length")
[macdLine, signalLine, _] = ta.macd(close, macdShort, macdLong, macdSignal)
// ATR pre dynamický Stop Loss a Take Profit
atrLength = input(14, title="ATR Length")
atrMultiplier = input(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
// Vstupné podmienky pre long pozície
longCondition = ta.crossover(close, lowerBand) and macdLine > signalLine
if (longCondition)
strategy.entry("Long", strategy.long)
// Vstupné podmienky pre short pozície
shortCondition = ta.crossunder(close, upperBand) and macdLine < signalLine
if (shortCondition)
strategy.entry("Short", strategy.short)
// Dynamický Stop Loss a Take Profit na základe ATR
longSL = strategy.position_avg_price - atrValue * atrMultiplier
longTP = strategy.position_avg_price + atrValue * atrMultiplier * 2
shortSL = strategy.position_avg_price + atrValue * atrMultiplier
shortTP = strategy.position_avg_price - atrValue * atrMultiplier * 2
// Pridanie stop loss a take profit
if (strategy.position_size > 0)
strategy.exit("Take Profit/Stop Loss", "Long", stop=longSL, limit=longTP)
if (strategy.position_size < 0)
strategy.exit("Take Profit/Stop Loss", "Short", stop=shortSL, limit=shortTP)
// Vizualizácia Bollinger Bands a MACD
plot(upperBand, color=color.red, title="Upper Bollinger Band")
plot(lowerBand, color=color.green, title="Lower Bollinger Band")
plot(basis, color=color.blue, title="Bollinger Basis")
hline(0, "MACD Zero Line", color=color.gray)
plot(macdLine - signalLine, color=color.blue, title="MACD Histogram")
plot(macdLine, color=color.red, title="MACD Line")
plot(signalLine, color=color.green, title="Signal Line")
// Generovanie alertov
alertcondition(longCondition, title="Long Alert", message="Long Entry Signal")
alertcondition(shortCondition, title="Short Alert", message="Short Entry Signal")