
Il s’agit d’une stratégie de négociation de tendance à plusieurs niveaux combinant une double rupture de la moyenne et une analyse de la transaction. La stratégie prend des décisions de négociation en comparant les signaux croisés des moyennes mobiles à court et à long terme et en combinant les indicateurs de la transaction.
La logique fondamentale de la stratégie repose sur les éléments clés suivants :
Risque de choc des marchés: dans les marchés de choc horizontal, les croisements de moyenne fréquents peuvent entraîner de multiples fausses ruptures. Solution: Ajouter des indicateurs de confirmation de tendance tels que l’ADX ou l’indicateur de force de tendance.
Risque de glissement: une forte augmentation du volume de transactions peut entraîner une perte de glissement importante. Solution: Il est recommandé de définir des tolérances de points de glissement raisonnables et d’utiliser des feuilles de prix limites lors de l’ouverture d’une position.
Risque de déclenchement d’un stop loss: le stop loss à pourcentage fixe peut être trop sensible lorsque la volatilité du marché augmente. Solution: Vous pouvez envisager d’utiliser l’arrêt dynamique d’ATR ou l’ajustement de la volatilité.
La stratégie a pour avantage de disposer d’un mécanisme de confirmation multiple et d’une bonne maîtrise des risques, mais elle peut faire face à des risques de fausses percées dans un marché en turbulence. Grâce à l’optimisation des paramètres dynamiques et à l’optimisation des signaux, la stratégie a encore beaucoup de place pour l’amélioration.
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-17 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MA Crossover with Volume (Long Only) + Stop Loss", overlay=true)
// Input settings for Moving Averages
shortMaLength = input.int(9, title="Short MA Length", minval=1)
longMaLength = input.int(21, title="Long MA Length", minval=1)
// Input settings for Volume
volumeMaLength = input.int(20, title="Volume MA Length", minval=1)
volumeThresholdMultiplier = input.float(1.5, title="Volume Multiplier (x times the average)", step=0.1)
// Input settings for Stop Loss
stopLossPercent = input.float(2.0, title="Stop Loss (%)", minval=0.1, step=0.1) / 100 // Stop loss in percentage
// Calculating Moving Averages
shortMa = ta.sma(close, shortMaLength)
longMa = ta.sma(close, longMaLength)
// Calculating Volume Metrics
volumeMa = ta.sma(volume, volumeMaLength) // Average volume
isVolumeAboveAverage = volume > (volumeMa * volumeThresholdMultiplier) // Volume above threshold
isVolumeIncreasing = volume > volume[1] // Volume increasing compared to the previous bar
// Plotting Moving Averages
plot(shortMa, color=color.blue, title="Short MA")
plot(longMa, color=color.orange, title="Long MA")
// Buy Condition with Volume
longCondition = ta.crossover(shortMa, longMa) and isVolumeAboveAverage and isVolumeIncreasing
exitCondition = ta.crossunder(shortMa, longMa) // Exit when the MAs cross downward
// Calculate Stop Loss Level
var float entryPrice = na // Variable to store entry price
if (strategy.position_size > 0 and na(entryPrice)) // Update entry price only when entering a new trade
entryPrice := strategy.position_avg_price
stopLossLevel = entryPrice * (1 - stopLossPercent) // Stop-loss level based on entry price
// Strategy Entry (Long Only)
if (longCondition)
strategy.entry("Long", strategy.long)
// Close position on Stop Loss or Exit Condition
if (strategy.position_size > 0)
if (low < stopLossLevel) // If the price drops below the stop-loss level
strategy.close("Long", comment="Stop Loss Hit")
if (exitCondition)
strategy.close("Long", comment="Exit Signal Hit")
// Debugging Plots
plot(volumeMa, color=color.purple, title="Volume MA", style=plot.style_area, transp=80)
hline(0, "Zero Line", color=color.gray)