
Cette stratégie est une stratégie combinée utilisant le RSI, le MACD et les moyennes mobiles. Elle combine le signal de survente du RSI, la sensibilité du MACD et l’effet de l’indicateur des moyennes mobiles pour déterminer le moment de la mise en marché.
La stratégie repose principalement sur les quatre critères suivants:
La stratégie se termine lorsque les deux conditions suivantes sont remplies:
Ainsi, les stratégies de retrait des bénéfices sont arrêtées en temps opportun pour éviter de grandes pertes.
Le plus grand avantage de cette stratégie réside dans l’utilisation combinée des indicateurs, qui tirent parti des avantages de chaque indicateur, à savoir:
La stratégie présente deux principaux risques:
Le plus grand risque pour les stratégies tendancielles telles que les moyennes mobiles est le plus grand risque de retrait causé par une inversion de la tendance. Les retraits peuvent être contrôlés activement en réduisant la taille de la position et les paramètres de stop-loss.
L’optimisation des paramètres est plus difficile. La stratégie de combinaison de plusieurs indicateurs est plus difficile à définir et à optimiser. Des méthodes d’optimisation des paramètres telles que la méthode de progression par étapes et les algorithmes génétiques peuvent être utilisées pour déterminer les paramètres optimaux.
Cette stratégie peut être améliorée de plusieurs façons:
Ajout de conditions supplémentaires pour filtrer davantage les faux signaux. Par exemple, la combinaison d’indicateurs de volume de transactions, d’indicateurs de volatilité, etc.
Testez les différences de paramètres entre les différentes variétés. Adaptez les paramètres pour s’adapter à plus de variétés.
Optimiser les paramètres des moyennes mobiles. Tester les différences entre les paramètres de différentes longueurs.
L’étude utilise des moyennes mobiles adaptatives qui changent en fonction des conditions du marché.
Cette stratégie est généralement une version optimisée de la stratégie de suivi des moyennes mobiles et des tendances. Elle absorbe les avantages de plusieurs indicateurs principaux tels que le MACD, le RSI, et est unique dans la détermination du moment d’entrée sur le marché et de l’arrêt des pertes.
/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Improved RSI MACD Strategy with Moving Averages", overlay=true)
// Inputs
src = input(close, title="RSI Source")
// RSI Settings
lengthRSI = input.int(14, minval=1)
// Stop Loss Settings
stopLossPct = input.float(0.09, title="Stop Loss Percentage")
takeProfitPct = input.float(0.15, title="Take Profit Percentage")
// MACD Settings
fastlen = input(12)
slowlen = input(26)
siglen = input(9)
// Strategy Settings
longEntry = input(0, title="Long Entry Level")
exitLevel = input(0, title="Exit Level")
// EMA Settings
emaShortLength = input(8, title="Short EMA Length")
emaLongLength = input(21, title="Long EMA Length")
atrMultiplier = input.float(2, title="atrMultiplier")
atrLength = input.int(20, title="atrLength")
// Indicators
rsi1 = ta.rsi(src, lengthRSI)
[macd, signal, hist] = ta.macd(src, fastlen, slowlen, siglen)
// Calculate EMAs
emaShort = ta.ema(src, emaShortLength)
emaLong = ta.ema(src, emaLongLength)
// Calculate ATR
atr = ta.atr(atrLength)
// Variables
var bool canEnterLong = na
// Strategy conditions
longCondition = hist > longEntry and rsi1 > 50 and emaShort > emaLong and close > emaLong + atrMultiplier * atr
// Entries and Exits
if hist < exitLevel and emaShort < emaLong
canEnterLong := true
strategy.close("Long")
// Store last entry price
var lastEntryPrice = float(na)
var lastEntryPrice2 = float(na)
if longCondition
strategy.entry("Long", strategy.long)
canEnterLong := false
lastEntryPrice := close
if lastEntryPrice < close
lastEntryPrice := close
// Calculate Stop Loss and Take Profit Levels based on last entry price
stopLossLevel = lastEntryPrice * (1 - stopLossPct)
// Check for stop loss and take profit levels and close position if triggered
if (strategy.position_size > 0)
last_buy = strategy.opentrades[0]
if (close < stopLossLevel)
strategy.close("Long", comment="Stop Loss Triggered")
if (close * (1 - takeProfitPct) > strategy.opentrades.entry_price(strategy.opentrades - 1) )
strategy.close("Long", comment="Take Profit Triggered")