
Cet article présente une stratégie de négociation croisée de moyennes mobiles, flexible et puissante, qui permet aux traders de personnaliser les paramètres et les types de moyennes mobiles en fonction des différentes conditions du marché. Le cœur de la stratégie est de suivre les tendances et de générer des signaux en utilisant des moyennes mobiles de différentes périodes et types.
La stratégie génère des signaux de trading en calculant des moyennes mobiles sur trois périodes différentes (ligne rapide, ligne lente et ligne de sortie). Les principaux principes incluent:
La stratégie MA-X offre un cadre flexible de suivi des tendances. Avec une configuration raisonnable et une optimisation continue, la stratégie peut devenir un outil puissant dans le kit de trading quantitatif. Les traders doivent effectuer des ajustements personnalisés en fonction des caractéristiques spécifiques du marché et effectuer un retour d’expérience et une vérification adéquats.
/*backtest
start: 2024-04-03 00:00:00
end: 2025-04-02 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © YetAnotherTA
//@version=6
strategy("Configurable MA Cross (MA-X) Strategy", "MA-X", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type = strategy.commission.percent, commission_value = 0.06)
// === Inputs ===
// Moving Average Periods
maPeriodA = input.int(13, title="Fast MA")
maPeriodB = input.int(55, title="Slow MA")
maPeriodC = input.int(34, title="Exit MA")
// MA Type Selection
maType = input.string("EMA", title="MA Type", options=["SMA", "EMA", "WMA", "HMA"])
// Toggle for Short Trades (Disabled by Default)
enableShorts = input.bool(false, title="Enable Short Trades", tooltip="Enable or disable short positions")
// === Function to Select MA Type ===
getMA(src, length) =>
maType == "SMA" ? ta.sma(src, length) : maType == "EMA" ? ta.ema(src, length) : maType == "WMA" ? ta.wma(src, length) : ta.hma(src, length)
// === MA Calculation ===
maA = getMA(close, maPeriodA)
maB = getMA(close, maPeriodB)
maC = getMA(close, maPeriodC)
// === Global Variables for Crossover Signals ===
var bool crossAboveA = false
var bool crossBelowA = false
crossAboveA := ta.crossover(close, maA)
crossBelowA := ta.crossunder(close, maA)
// === Bar Counter for Exit Control ===
var int barSinceEntry = na
// Reset the counter on new entries
if (strategy.opentrades == 0)
barSinceEntry := na
// Increment the counter on each bar
if (strategy.opentrades > 0)
barSinceEntry := (na(barSinceEntry) ? 1 : barSinceEntry + 1)
// === Entry Conditions ===
goLong = close > maA and maA > maB and close > maC and crossAboveA
goShort = enableShorts and close < maA and maA < maB and close < maC and crossBelowA // Shorts only when toggle is enabled
// === Exit Conditions (only after 1+ bar since entry) ===
exitLong = (strategy.position_size > 0) and (barSinceEntry >= 2) and (close < maC)
exitShort = enableShorts and (strategy.position_size < 0) and (barSinceEntry >= 2) and (close > maC)
// === Strategy Execution ===
// Long entry logic
if (goLong)
strategy.close("Short") // Close any short position
strategy.entry("Long", strategy.long)
alert("[MA-X] Go Long")
barSinceEntry := 1 // Reset the bar counter
// Short entry logic (only if enabled)
if (enableShorts and goShort)
strategy.close("Long") // Close any long position
strategy.entry("Short", strategy.short)
alert("[MA-X] Go Short")
barSinceEntry := 1 // Reset the bar counter
// Exit logic (only after at least 1 bar has passed)
if (exitLong)
strategy.close("Long")
alert("[MA-X] Exit Long")
if (enableShorts and exitShort)
strategy.close("Short")
alert("[MA-X] Exit Short")
// === Plotting ===
plot(maA, color=color.green, linewidth=2, title="Fast MA")
plot(maB, color=color.blue, linewidth=2, title="Slow MA")
plot(maC, color=color.red, linewidth=2, title="Exit MA")