
La double EMA est une stratégie de suivi de tendance qui consiste à ouvrir seulement des positions multiples. La stratégie utilise simultanément les trois moyennes mobiles EMA à court terme, EMA à moyen terme et EMA à long terme. La règle d’entrée spécifique est la suivante: le prix est supérieur à l’EMA à long terme, tandis que l’EMA à court terme est supérieur à l’EMA à moyen terme en passant par le bas pour constituer une croix en or.
Il est possible de configurer trois cycles d’EMA pour calculer respectivement l’EMA à court terme, l’EMA à moyen terme et l’EMA à long terme.
Si le prix est supérieur à l’EMA à long terme, cela prouve qu’il est actuellement dans une tendance à plusieurs têtes.
Si l’EMA à court terme traverse l’EMA intermédiaire de bas en haut, formant une croix dorée, cela confirme davantage le renforcement de la tendance à plusieurs têtes.
Lorsque les deux conditions ci-dessus sont réunies, il est possible d’ouvrir plus de positions.
Le plus grand avantage de cette stratégie est la capacité d’identifier efficacement les tendances, d’utiliser des jugements combinés à des EMA pluricycliques et d’éviter d’être induits en erreur par le bruit du marché à court terme. En même temps, la configuration des arrêts de perte comme moyen de contrôle des risques permet de contrôler les pertes dans une certaine mesure.
Le risque principal de cette stratégie réside dans les positions multiples. L’incapacité de fermer une position à temps lorsque le marché se retourne entraîne un risque d’augmentation des pertes. En outre, une mauvaise configuration du cycle EMAS peut entraîner une fréquence des transactions et augmenter les coûts de transaction.
Augmentation de la gestion du nombre de positions et réduction des positions lorsque le retrait atteint un certain pourcentage.
Ajout d’un nouveau paramètre de stop-loss de pointe.
Optimiser les paramètres du cycle EMAS et réduire la fréquence des transactions.
Cette stratégie est globalement une stratégie stable et de bonne qualité. La capacité d’identifier les tendances est forte et le risque est en place.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Strategia EMA Long con Opzioni di Uscita Avanzate e Periodi EMA Personalizzabili", overlay=true)
// Parametri di input generali
useVolatilityFilter = input.bool(true, title="Usa Filtro di Volatilità")
atrPeriods = input.int(14, title="Periodi ATR", minval=1)
atrMultiplier = input.float(1.5, title="Moltiplicatore ATR", step=0.1)
useTrailingStop = input.bool(true, title="Usa Trailing Stop")
trailingStopPercent = input.float(15.0, title="Percentuale Trailing Stop", minval=0.1, step=0.1) / 100.0
useEMAExit = input.bool(true, title="Usa Uscita EMA Corta incrocia EMA Media al Ribasso")
// Parametri di input per periodi EMA personalizzabili
emaLongTermPeriod = input.int(200, title="Periodo EMA Lungo Termine", minval=1)
emaShortTermPeriod = input.int(5, title="Periodo EMA Breve Termine", minval=1)
emaMidTermPeriod = input.int(10, title="Periodo EMA Medio Termine", minval=1)
// Calcolo delle EMA con periodi personalizzabili
longTermEMA = ta.ema(close, emaLongTermPeriod)
shortTermEMA = ta.ema(close, emaShortTermPeriod)
midTermEMA = ta.ema(close, emaMidTermPeriod)
// Calcolo ATR e soglia di volatilità
atr = ta.atr(atrPeriods)
atrThreshold = ta.sma(atr, atrPeriods) * atrMultiplier
// Condizione di entrata
enterLongCondition = close > longTermEMA and shortTermEMA > midTermEMA
enterLong = useVolatilityFilter ? (enterLongCondition and atr > atrThreshold) : enterLongCondition
if (enterLong)
strategy.entry("Enter Long", strategy.long)
// Tracking del prezzo di entrata e del massimo prezzo raggiunto per il trailing stop
var float entryPrice = na
var float maxPriceSinceEntry = na
if (strategy.position_size > 0)
maxPriceSinceEntry := math.max(na(maxPriceSinceEntry) ? high : maxPriceSinceEntry, high)
entryPrice := na(entryPrice) ? strategy.position_avg_price : entryPrice
else
maxPriceSinceEntry := na
entryPrice := na
// Calcolo del valore del trailing stop
trailStopPrice = maxPriceSinceEntry * (1 - trailingStopPercent)
// Implementazione delle condizioni di uscita
exitCrossUnder = close < longTermEMA
emaCross = ta.crossunder(shortTermEMA, midTermEMA)
if (useEMAExit and emaCross)
strategy.close("Enter Long", comment="EMA Cross Exit")
if (useTrailingStop)
strategy.exit("Trailing Stop", from_entry="Enter Long", stop=trailStopPrice)
// Visualizzazioni
plot(longTermEMA, color=color.yellow, title="EMA Lungo Termine")
plot(shortTermEMA, color=color.blue, title="EMA Breve Termine")
plot(midTermEMA, color=color.green, title="EMA Medio Termine")
plot(useVolatilityFilter ? atrThreshold : na, color=color.purple, title="ATR Threshold")
plot(strategy.position_size > 0 ? trailStopPrice : na, color=color.orange, title="Trailing Stop Value", style=plot.style_linebr)