
Une stratégie de trading à objectifs multiples basée sur des signaux de croisement des moyennes mobiles indicielles à court et à long terme (EMA) est un système de trading quantitatif. La stratégie utilise le croisement d’une EMA à 9 cycles et à 21 cycles comme signal d’entrée, tout en définissant jusqu’à 10 objectifs de profit et un point d’arrêt pour la gestion des risques et la maximisation des profits.
Le principe central de cette stratégie est basé sur un système de croisement des moyennes mobiles indicielles, qui se concrétise comme suit:
La stratégie utilise une méthode de gestion du risque systématique, avec par défaut 10% du capital du compte pour chaque transaction, un capital initial de 100 000 et une interdiction des opérations de surtaxe.
Pour atténuer ces risques, il est recommandé d’introduire des conditions de filtrage supplémentaires, telles que des indicateurs de force de tendance, et d’envisager d’ajuster les paramètres de stop-loss et de cible en fonction de la dynamique de la volatilité du marché.
Grâce à ces optimisations, la robustesse et la rentabilité des stratégies peuvent être considérablement améliorées, et la fréquence des retraits et des transactions à perte réduite.
La stratégie de négociation multi-objectifs en moyenne mobile à deux indices est un système de négociation quantitatif, structuré, logiquement simple, basé sur les signaux croisés classiques des EMA, et complété par une gestion des bénéfices et un arrêt-perte multi-objectifs. La stratégie est adaptée à la négociation de tendances à court et moyen terme et fonctionne mieux dans les marchés clairement tendance.
Bien que la conception de la stratégie soit relativement simple, elle contient les éléments centraux de la stratégie de négociation: les signaux d’entrée, les conditions d’exit, la gestion des arrêts de perte et les objectifs de profit. Les principaux avantages de la stratégie résident dans la clarté de l’opération, la facilité de compréhension et d’exécution, ainsi qu’un bon support visuel.
Cependant, la stratégie présente également des limites telles que la dépendance à un seul indicateur, le manque d’identification de l’environnement du marché et l’insuffisance de la flexibilité de la gestion des fonds. La stratégie a une grande marge d’optimisation en ajoutant des filtres de tendance, en optimisant les mécanismes d’arrêt des pertes, en réalisant de véritables bénéfices en lots et en améliorant les méthodes de gestion des fonds.
Pour les traders, cette stratégie peut servir de cadre de base pour un ajustement et une optimisation personnalisés en fonction des préférences de risque individuelles et des caractéristiques de la variété de transactions, afin d’obtenir de meilleures performances de négociation.
/*backtest
start: 2024-08-21 00:00:00
end: 2025-08-20 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_OKX","currency":"BNB_USDT","balance":5000}]
*/
//@version=5
strategy("9/21 EMA with 10 Targets + Stoploss",
overlay = true,
initial_capital = 100000,
default_qty_type = strategy.percent_of_equity,
default_qty_value = 10,
pyramiding = 0)
// === Inputs ===
emaFastLen = input.int(9, "Fast EMA Length")
emaSlowLen = input.int(21, "Slow EMA Length")
slPercent = input.float(0.5, "Stoploss %", step=0.1)
// 10 Targets
tp1Percent = input.float(0.5, "Target 1 %", step=0.1)
tp2Percent = input.float(1.0, "Target 2 %", step=0.1)
tp3Percent = input.float(1.5, "Target 3 %", step=0.1)
tp4Percent = input.float(2.0, "Target 4 %", step=0.1)
tp5Percent = input.float(2.5, "Target 5 %", step=0.1)
tp6Percent = input.float(3.0, "Target 6 %", step=0.1)
tp7Percent = input.float(3.5, "Target 7 %", step=0.1)
tp8Percent = input.float(4.0, "Target 8 %", step=0.1)
tp9Percent = input.float(4.5, "Target 9 %", step=0.1)
tp10Percent = input.float(5.0, "Target 10 %", step=0.1)
// === EMA Calculation ===
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
// === Entry Conditions ===
longCond = ta.crossover(emaFast, emaSlow)
shortCond = ta.crossunder(emaFast, emaSlow)
// === Entry ===
if (longCond and strategy.position_size <= 0)
strategy.entry("BUY", strategy.long)
if (shortCond and strategy.position_size >= 0)
strategy.entry("SELL", strategy.short)
// === Series Variables for Targets ===
var float tp1 = na
var float tp2 = na
var float tp3 = na
var float tp4 = na
var float tp5 = na
var float tp6 = na
var float tp7 = na
var float tp8 = na
var float tp9 = na
var float tp10 = na
var float stopLevel = na
// === Long Positions ===
if strategy.position_size > 0
stopLevel := strategy.position_avg_price * (1 - slPercent/100)
tp1 := strategy.position_avg_price * (1 + tp1Percent/100)
tp2 := strategy.position_avg_price * (1 + tp2Percent/100)
tp3 := strategy.position_avg_price * (1 + tp3Percent/100)
tp4 := strategy.position_avg_price * (1 + tp4Percent/100)
tp5 := strategy.position_avg_price * (1 + tp5Percent/100)
tp6 := strategy.position_avg_price * (1 + tp6Percent/100)
tp7 := strategy.position_avg_price * (1 + tp7Percent/100)
tp8 := strategy.position_avg_price * (1 + tp8Percent/100)
tp9 := strategy.position_avg_price * (1 + tp9Percent/100)
tp10 := strategy.position_avg_price * (1 + tp10Percent/100)
strategy.exit("Exit Long", "BUY", stop=stopLevel, limit=tp1)
// === Short Positions ===
if strategy.position_size < 0
stopLevel := strategy.position_avg_price * (1 + slPercent/100)
tp1 := strategy.position_avg_price * (1 - tp1Percent/100)
tp2 := strategy.position_avg_price * (1 - tp2Percent/100)
tp3 := strategy.position_avg_price * (1 - tp3Percent/100)
tp4 := strategy.position_avg_price * (1 - tp4Percent/100)
tp5 := strategy.position_avg_price * (1 - tp5Percent/100)
tp6 := strategy.position_avg_price * (1 - tp6Percent/100)
tp7 := strategy.position_avg_price * (1 - tp7Percent/100)
tp8 := strategy.position_avg_price * (1 - tp8Percent/100)
tp9 := strategy.position_avg_price * (1 - tp9Percent/100)
tp10 := strategy.position_avg_price * (1 - tp10Percent/100)
strategy.exit("Exit Short", "SELL", stop=stopLevel, limit=tp1)
// === Plotting ===
plot(emaFast, "EMA 9", color=color.yellow, linewidth=2)
plot(emaSlow, "EMA 21", color=color.orange, linewidth=2)
// Global plots (avoid local scope error)
plot(tp1, "TP1", color=color.new(color.green, 0))
plot(tp2, "TP2", color=color.new(color.green, 10))
plot(tp3, "TP3", color=color.new(color.green, 20))
plot(tp4, "TP4", color=color.new(color.green, 30))
plot(tp5, "TP5", color=color.new(color.green, 40))
plot(tp6, "TP6", color=color.new(color.green, 50))
plot(tp7, "TP7", color=color.new(color.green, 60))
plot(tp8, "TP8", color=color.new(color.green, 70))
plot(tp9, "TP9", color=color.new(color.green, 80))
plot(tp10, "TP10", color=color.new(color.green, 90))
plot(stopLevel, "Stoploss", color=color.red, linewidth=2)
// Entry Signals
plotshape(longCond, title="BUY Signal", style=shape.labelup, color=color.green, text="BUY")
plotshape(shortCond, title="SELL Signal", style=shape.labeldown, color=color.red, text="SELL")