
La stratégie utilise les croisements des lignes EMA rapides et des lignes EMA lentes comme signaux d’achat et de vente, permettant de négocier automatiquement en fonction des croisements des lignes médianes. Les lignes EMA rapides serrent les fluctuations des prix et les lignes EMA lentes aplatissent les fluctuations des prix.
La stratégie consiste principalement à calculer les lignes EMA rapides et les lignes EMA lentes et à comparer la relation entre les deux lignes normales pour générer un signal de transaction.
Tout d’abord, dans les paramètres d’entrée, définissez la période emaFast pour les EMAs rapides à 1, afin que les EMAs rapides puissent suivre les variations de prix. En même temps, définissez la période emaSlowBuy pour générer un signal d’achat et emaSlowSell pour générer un signal de vente.
Ensuite, en fonction de la période de l’entrée, calculer l’EMA rapide et l’EMA lente. L’EMA rapide a une période fixe de 1, suivez le prix; l’EMA lente est un paramètre réglable, lissage des données de prix.
Ensuite, comparez la relation entre la taille de l’EMA rapide et celle de l’EMA lente pour déterminer le croisement. Si l’EMA rapide traverse l’EMA lente du côté inférieur, cela génère une fourche dorée qui satisfait la condition d’achat. Si l’EMA rapide tombe du côté supérieur et brise l’EMA lente, cela génère une fourche morte qui satisfait la condition de vente.
Finalement, lorsque les conditions d’achat et de vente sont remplies, exécutez les instructions correspondantes d’ouverture et de clôture de la position pour terminer la transaction. En même temps, vérifiez si l’heure actuelle se situe dans la plage de temps de retracement pour éviter d’avoir une transaction erronée au-delà de la plage de dates.
Les mesures d’optimisation suivantes peuvent être envisagées en fonction des risques:
Filtrez les signaux croisés EMA en combinaison avec d’autres indicateurs pour éviter les signaux erronés
Adaptation des paramètres EMA en fonction de la volatilité du marché pour réduire la fréquence des transactions
Augmentation des considérations de stop loss et de stop loss, et maîtrise des risques
Optimiser le cycle des EMA rapides en utilisant des paramètres plus adaptés à des conditions de marché spécifiques
Augmenter le jugement sur les tendances et éviter de trop négocier dans des marchés en crise
Cette stratégie peut être optimisée dans les directions suivantes:
Il est possible de trouver la combinaison de paramètres la plus performante dans le repérage des données historiques en parcourant les différents paramètres emaFast et emaSlow, en utilisant une méthode d’optimisation progressive ou aléatoire.
Par exemple, il est possible de combiner des indicateurs tels que MACD, KDJ et Brin pour éviter que les signaux de croisement EMA produisent un faux signal.
Il est important de calculer les indicateurs tels que l’amplitude réelle moyenne pour juger de la force ou de la faiblesse de la tendance et éviter de tomber dans un marché de choc.
Il s’agit d’étudier les meilleurs points d’arrêt pour contrôler le risque de pertes et d’identifier les points d’arrêt raisonnables pour maximiser les bénéfices.
Il est possible de tester non seulement les combinaisons d’EMA rapides et lents, mais aussi les combinaisons d’EMA doubles, d’EMA triples et même d’EMA multiples pour trouver des paramètres plus avantageux.
Pour les marchés plus tendanciels, on peut accélérer le cycle EMA de manière appropriée, tandis que les marchés chocs peuvent ralentir le cycle EMA.
L’idée générale de l’EMA Cross Strategy est claire et compréhensible, et utilise des indicateurs techniques éprouvés pour déterminer le moment de l’achat et de la vente. La stratégie est personnalisable et peut être optimisée en ajustant les paramètres de l’EMA, ce qui permet de créer une stratégie de négociation pour différents environnements de marché.
/*backtest
start: 2023-10-10 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(
"EMA Cross Strategy with Custom Buy/Sell Conditions",
overlay=true
)
// INPUT:
// Options to enter fast Exponential Moving Average (EMA) value
emaFast = 1
// Options to enter slow EMAs for buy and sell signals
slowEMABuy = input(title="Slow EMA for Buy Signals", defval=20, minval=1, maxval=9999)
slowEMASell = input(title="Slow EMA for Sell Signals", defval=30, minval=1, maxval=9999)
// Option to select trade directions
tradeDirection = input(title="Trade Direction", options=["Long", "Short", "Both"], defval="Both")
// Options that configure the backtest date range
startDate = input(title="Start Date", type=input.time, defval=timestamp("01 Jan 2018 00:00"))
endDate = input(title="End Date", type=input.time, defval=timestamp("31 Dec 2025 23:59"))
// CALCULATIONS:
// Use a fixed fast EMA of 1 and calculate slow EMAs for buy and sell signals
fastEMA = ema(close, emaFast)
slowEMABuyValue = ema(close, slowEMABuy)
slowEMASellValue = ema(close, slowEMASell)
// PLOT:
// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.orange, linewidth=2)
plot(series=slowEMABuyValue, color=color.blue, linewidth=2, title="Slow EMA for Buy Signals")
plot(series=slowEMASellValue, color=color.red, linewidth=2, title="Slow EMA for Sell Signals")
// CONDITIONS:
// Check if the close time of the current bar falls inside the date range
inDateRange = true
// Translate input into trading conditions for buy and sell signals
buyCondition = crossunder(slowEMABuyValue, fastEMA)
sellCondition = crossover(slowEMASellValue, fastEMA)
// Translate input into overall trading conditions
longOK = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")
// ORDERS:
// Submit entry (or reverse) orders based on buy and sell conditions
if (buyCondition and inDateRange)
strategy.entry("Buy", strategy.long)
if (sellCondition and inDateRange)
strategy.close("Buy")
// Submit exit orders based on opposite trade conditions
if (strategy.position_size > 0 and sellCondition)
strategy.close("Sell")
if (strategy.position_size < 0 and buyCondition)
strategy.close("Sell")