Stratégie de trading Double EMA Golden Cross


Date de création: 2023-12-07 15:08:57 Dernière modification: 2023-12-07 15:08:57
Copier: 0 Nombre de clics: 701
1
Suivre
1619
Abonnés

Stratégie de trading Double EMA Golden Cross

Aperçu

Cette stratégie combine une double croix d’or EMA, un filtre de bruit ATR normalisé et un indicateur de tendance ADX pour fournir aux traders un signal d’achat plus fiable. La stratégie intègre plusieurs indicateurs pour filtrer les faux signaux et identifier des opportunités de négociation plus fiables.

Principe de stratégie

Cette stratégie utilise les EMA de 8 cycles et de 20 cycles pour construire un système de croisement bi-or des EMA. Un signal d’achat est généré lorsque les EMA de courte période traversent les EMA de longue période.

En outre, la stratégie a mis en place plusieurs indicateurs auxiliaires pour le filtrage:

  1. 14 cycles ATR, après traitement normalisé, filtrant les fluctuations de prix excessives sur le marché.

  2. 14 périodes ADX, force utilisée pour identifier une tendance. Les signaux de négociation ne sont pris en compte que dans une tendance forte.

  3. 14 cycles de volumes SMA, filtrage des points de temps avec moins de volumes.

  4. L’indicateur de Super Trend de la période 414 est utilisé pour déterminer la direction du marché de l’hyperfluorure.

Une fois que la direction de la tendance, la valeur standardisée ATR, la valeur ADX et les conditions de rendement sont satisfaites, le croisement d’or EMA déclenche finalement un signal d’achat.

Avantages stratégiques

  1. Une combinaison multi-indicateurs, plus fiable

La stratégie intègre plusieurs indicateurs tels que l’EMA, l’ATR, l’ADX et le Super Trend, qui se complètent pour former un système de filtrage de signal plus puissant et plus fiable.

  1. Les paramètres sont réglables

Les paramètres ATR, ADX et période de détention peuvent être ajustés en fonction de la situation réelle et la stratégie est plus flexible.

  1. On distingue le marché libre

Pour juger de la surpopulation à l’aide de l’indicateur Super Trend, utilisez différents critères de paramètres pour la surpopulation afin d’éviter de rater des opportunités.

Risque stratégique

  1. Les paramètres sont difficiles à optimiser

Les combinaisons de paramètres stratégiques sont complexes, difficiles à optimiser et nécessitent beaucoup de retours d’expérience pour trouver les paramètres optimaux.

  1. Les erreurs d’indicateur déclenchent des risques

Malgré les filtres multiples, il existe un risque de déclenchement erroné en raison de l’état de retard de l’indicateur. La théorie de l’arrêt des pertes doit être pleinement prise en compte.

  1. Faible fréquence des transactions

La fréquence des transactions stratégiques est faible, et il est possible qu’il n’y ait pas de transactions pendant une période prolongée, sous l’effet de multiples indicateurs et de vagues.

Orientation de l’optimisation de la stratégie

  1. Combinaison de paramètres d’optimisation

Trouver la combinaison optimale de paramètres d’indicateur à partir d’une grande quantité de données de retour.

  1. Augmenter l’apprentissage automatique

Les algorithmes d’apprentissage automatique optimisent les paramètres de la stratégie sur la base d’une grande quantité de données historiques et permettent une adaptation de la stratégie.

  1. Considérer plus de facteurs de marché

La diversité des stratégies est enrichie par la combinaison de plus d’indicateurs pour juger de la structure du marché, de l’humeur, etc.

Résumer

Cette stratégie est synthétisée en tenant compte des facteurs de tendance, de volatilité et de quantité, et forme un système de négociation grâce à un filtrage multi-indicateurs et à un ajustement des paramètres. De manière synthétisée, la stratégie est très fiable et peut améliorer l’efficacité des transactions de la stratégie en optimisant davantage sa combinaison de paramètres et sa modélisation.

Code source de la stratégie
/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//Description:
//This strategy is a refactored version of an EMA cross strategy with a normalized ATR filter and ADX control. 
//It aims to provide traders with signals for long positions based on market conditions defined by various indicators.

//How it Works:
//1. EMA: Uses short (8 periods) and long (20 periods) EMAs to identify crossovers.
//2. ATR: Uses a 14-period ATR, normalized to its 20-period historical range, to filter out noise.
//3. ADX: Uses a 14-period RMA to identify strong trends.
//4. Volume: Filters trades based on a 14-period SMA of volume.
//5. Super Trend: Uses a Super Trend indicator to identify the market direction.

//How to Use:
//- Buy Signal: Generated when EMA short crosses above EMA long, and other conditions like ATR and market direction are met.
//- Sell Signal: Generated based on EMA crossunder and high ADX value.

//Originality and Usefulness:
//This script combines EMA, ATR, ADX, and Super Trend indicators to filter out false signals and identify more reliable trading opportunities. 
//USD Strength is not working, just simulated it as PSEUDO CODE: [close>EMA(50)]

//Strategy Results:
//- Account Size: $1000
//- Commission: Not considered
//- Slippage: Not considered
//- Risk: Less than 5% per trade
//- Dataset: Aim for more than 100 trades for sufficient sample size

//Note: This script should be used for educational purposes and should not be considered as financial advice.

//Chart:
//- The script's output is plotted as Buy and Sell signals on the chart.
//- No other scripts are included for clarity.
//- Have tested with 30mins period
//- You are encouraged to play with parameters, let me know if you 

//@version=5
strategy("Advanced EMA Cross with Normalized ATR Filter, Controlling ADX", shorttitle="ALP V5", overlay=true )

// Initialize variables
var bool hasBought = false
var int barCountSinceBuy = 0

// Define EMA periods
emaShort = ta.ema(close, 8)
emaLong = ta.ema(close, 20)

// Define ATR parameters
atrLength = 14
atrValue = ta.atr(atrLength)
maxHistoricalATR = ta.highest(atrValue, 20)
minHistoricalATR = ta.lowest(atrValue, 20)
normalizedATR = (atrValue - minHistoricalATR) / (maxHistoricalATR - minHistoricalATR)

// Define ADX parameters
adxValue = ta.rma(close, 14)
adxHighLevel = 30
isADXHigh = adxValue > adxHighLevel

// Initialize risk management variables
var float stopLossPercent = na
var float takeProfitPercent = na

// Calculate USD strength
// That's not working as usd strenght, since I couldn't manage to get usd strength 
//I've just simulated it as if the current close price is above 50 days average (it's likely a bullish trend), usd is strong (usd_strenth variable is positive)
usd_strength = close / ta.ema(close, 50) - 1

// Adjust risk parameters based on USD strength
if (usd_strength > 0)
    stopLossPercent := 3
    takeProfitPercent := 6
else
    stopLossPercent := 4
    takeProfitPercent := 8

// Initialize position variable
var float positionPrice = na

// Volume filter
minVolume = ta.sma(volume, 14) * 1.5
isVolumeHigh = volume > minVolume

// Market direction using Super Trend indicator
[supertrendValue, supertrendDirection] = ta.supertrend(4, 14)
bool isBullMarket = supertrendDirection < 0
bool isBearMarket = supertrendDirection > 0

// Buy conditions for Bull and Bear markets
buyConditionBull = isBullMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.2
buyConditionBear = isBearMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.5
buyCondition = buyConditionBull or buyConditionBear

// Sell conditions for Bull and Bear markets
sellConditionBull = isBullMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
sellConditionBear = isBearMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
sellCondition = sellConditionBull or sellConditionBear

// Final Buy and Sell conditions
if (buyCondition)
    strategy.entry("Buy", strategy.long)
    positionPrice := close
    hasBought := true
    barCountSinceBuy := 0

if (hasBought)
    barCountSinceBuy := barCountSinceBuy + 1

// Stop-loss and take-profit levels
longStopLoss = positionPrice * (1 - stopLossPercent / 100)
longTakeProfit = positionPrice * (1 + takeProfitPercent / 100)

// Final Sell condition
finalSellCondition = sellCondition and hasBought and barCountSinceBuy >= 3 and isVolumeHigh

if (finalSellCondition)
    strategy.close("Buy")
    positionPrice := na
    hasBought := false
    barCountSinceBuy := 0

// Implement stop-loss and take-profit
strategy.exit("Stop Loss", "Buy", stop=longStopLoss)
strategy.exit("Take Profit", "Buy", limit=longTakeProfit)

// Plot signals
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=finalSellCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")