Stratégie de négociation à double EMA Golden Cross

Auteur:ChaoZhang est là., Date: 2023-12-07 15:08:57 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie combine des doubles croix dorées EMA, un filtre de bruit ATR normalisé et un indicateur de tendance ADX pour fournir des signaux d'achat plus fiables aux traders.

Principe de stratégie

La stratégie utilise des EMA à 8 périodes et à 20 périodes pour construire un double système de croix d'or EMA. Elle génère des signaux d'achat lorsque l'EMA à courte période franchit le niveau de l'EMA à plus longue période.

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

  1. ATR de 14 périodes, normalisé pour filtrer les fluctuations mineures des prix sur le marché.

  2. L'ADX de 14 périodes permet d'identifier la force des tendances.

  3. SMA de volume de 14 périodes pour filtrer les points de temps avec de petits volumes de négociation.

  4. Indicateur de tendance à la hausse ou à la baisse du marché.

Ce n'est que lorsque la direction de la tendance, la valeur ATR normalisée, le niveau ADX et les conditions de volume sont remplies que la croix dorée de l'EMA déclenchera finalement le signal d'achat.

Les avantages de la stratégie

  1. Fiabilité à partir d'une combinaison de plusieurs indicateurs

    L'intégration d'indicateurs tels que l'EMA, l'ATR, l'ADX et le Super Trend constitue un système de filtrage des signaux solide, une fiabilité accrue.

  2. Plus de souplesse dans le réglage des paramètres

    Les valeurs seuil de l'ATR normalisé, de l'ADX, de la période de détention, etc. peuvent être optimisées, plus de souplesse.

  3. Distinction entre les marchés haussiers et les marchés baissiers

    Identifier les marchés haussiers et baissiers en utilisant Super Trend, éviter les occasions manquées.

Risques stratégiques

  1. Difficulté à optimiser les paramètres

    Trop de paramètres, difficulté à trouver la combinaison optimale.

  2. Risque de défaillance des indicateurs

    Il existe toujours un risque de faux signaux en raison de la nature retardée des indicateurs.

  3. Faible fréquence de négociation

    La fréquence tend à être faible en raison de plusieurs filtres, une longue durée de non-échange possible.

Directions d'optimisation

  1. Optimiser la combinaison de paramètres

    Trouver la combinaison optimale nécessite une grande quantité de données de backtesting.

  2. Incorporer l'apprentissage automatique

    Utilisez des algorithmes ML pour optimiser automatiquement les paramètres au fil du temps.

  3. Considérez d'autres facteurs du marché

    La combinaison d'indicateurs de la structure du marché, des émotions, etc., améliore la diversité.

Conclusion

Cette stratégie prend en considération la tendance, la volatilité et les facteurs de prix de volume.


/*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")


Plus de