
Cette stratégie est un système de trading de suivi des tendances basé sur la moyenne mobile exponentielle (EMA) sur 5 jours. Elle analyse la relation positionnelle entre le prix et l’EMA et combine l’ajustement dynamique des objectifs de stop loss et de profit pour saisir la tendance du marché. La stratégie adopte une méthode de gestion des positions en pourcentage et prend en compte les facteurs de coûts de transaction, ce qui la rend très pratique et flexible.
La logique principale de la stratégie est de déterminer le moment d’entrée en fonction de l’interaction entre le prix et l’EMA sur 5 jours. Plus précisément, lorsque le prix le plus élevé de la période en cours est inférieur à l’EMA et qu’une percée se produit au cours de la période en cours, le système émettra un signal long. Dans le même temps, la stratégie comprend également une condition supplémentaire facultative qui exige que le prix de clôture soit supérieur à celui de la période précédente pour augmenter la fiabilité du signal. Pour le contrôle des risques, la stratégie propose deux méthodes de stop-loss : un stop-loss dynamique basé sur les plus bas précédents et un stop-loss basé sur des points fixes. Les objectifs de profit sont fixés de manière dynamique en fonction du rapport risque-rendement, garantissant ainsi le potentiel de profit de la transaction.
Il s’agit d’une stratégie de suivi de tendance bien conçue et logique qui peut capturer efficacement les tendances du marché grâce à la combinaison des indicateurs EMA et du comportement des prix. La stratégie dispose de mécanismes relativement complets de contrôle des risques et de gestion du rendement, et offre de multiples directions d’optimisation, avec une forte valeur pratique et une marge d’amélioration. Par la suite, la stabilité et la rentabilité de la stratégie peuvent être encore améliorées en ajoutant une analyse multi-périodes, en ajustant le mécanisme de stop-loss, etc.
/*backtest
start: 2024-12-29 00:00:00
end: 2025-01-05 00:00:00
period: 30m
basePeriod: 30m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Demo GPT - PowerOfStocks 5EMA", overlay=true)
// Inputs
enableSL = input.bool(false, title="Enable Extra SL")
usl = input.int(defval=5, title="SL Distance in Points", minval=1, maxval=100)
riskRewardRatio = input.int(defval=3, title="Risk to Reward Ratio", minval=3, maxval=25)
showSell = input.bool(true, title="Show Sell Signals")
showBuy = input.bool(true, title="Show Buy Signals")
buySellExtraCond = input.bool(false, title="Buy/Sell with Extra Condition")
startDate = input(timestamp("2018-01-01 00:00"), title="Start Date")
endDate = input(timestamp("2069-12-31 23:59"), title="End Date")
// EMA Calculation
ema5 = ta.ema(close, 5)
// Plot EMA
plot(ema5, "EMA 5", color=color.new(#882626, 0), linewidth=2)
// Variables for Buy
var bool longTriggered = na
var float longStopLoss = na
var float longTarget = na
// Variables for Sell (used for signal visualization but no actual short trades)
var bool shortTriggered = na
var float shortStopLoss = na
var float shortTarget = na
// Long Entry Logic
if true
if (showBuy)
longCondition = high[1] < ema5[1] and high[1] < high and (not buySellExtraCond or close > close[1])
if (longCondition and not longTriggered)
entryPrice = high[1]
stopLoss = enableSL ? low[1] - usl * syminfo.mintick : low[1]
target = enableSL ? entryPrice + (entryPrice - stopLoss) * riskRewardRatio : high[1] + (high[1] - low[1]) * riskRewardRatio
// Execute Buy Order
strategy.entry("Buy", strategy.long, stop=entryPrice)
longTriggered := true
longStopLoss := stopLoss
longTarget := target
label.new(bar_index, entryPrice, text="Buy@ " + str.tostring(entryPrice), style=label.style_label_up, color=color.green, textcolor=color.white)
// Short Signal Logic (Visual Only)
if (true)
if (showSell)
shortCondition = low[1] > ema5[1] and low[1] > low and (not buySellExtraCond or close < close[1])
if (shortCondition and not shortTriggered)
entryPrice = low[1]
stopLoss = enableSL ? high[1] + usl * syminfo.mintick : high[1]
target = enableSL ? entryPrice - (stopLoss - entryPrice) * riskRewardRatio : low[1] - (high[1] - low[1]) * riskRewardRatio
// Visual Signals Only
label.new(bar_index, entryPrice, text="Sell@ " + str.tostring(entryPrice), style=label.style_label_down, color=color.red, textcolor=color.white)
shortTriggered := true
shortStopLoss := stopLoss
shortTarget := target
// Exit Logic for Buy
if longTriggered
// Stop-loss Hit
if low <= longStopLoss
strategy.close("Buy", comment="SL Hit")
longTriggered := false
// Target Hit
if high >= longTarget
strategy.close("Buy", comment="Target Hit")
longTriggered := false
// Exit Logic for Short (Signals Only)
if shortTriggered
// Stop-loss Hit
if high >= shortStopLoss
shortTriggered := false
// Target Hit
if low <= shortTarget
shortTriggered := false