
La stratégie utilise les deux EMA pour former des forks plus ou moins, les forks morts et les courts suivent la stratégie de tendance classique, et utilise l’indicateur ATR et l’indicateur ADX pour un filtrage supplémentaire, pour suivre les tendances fortes et contrôler les risques en cas de tremblement.
La stratégie est basée sur les points suivants:
L’EMA à 8 cycles plus courts et l’EMA à 20 cycles plus longs sont utilisés pour former des signaux de forks dorés et de forks morts. L’EMA est elle-même tendance.
L’indicateur ATR reflète les fluctuations récentes. La normalisation de l’indicateur ATR permet d’ajuster dynamiquement les conditions de filtrage de l’intersection de l’EMA, de réduire les exigences lors du suivi d’une forte tendance et d’augmenter les exigences de filtrage lors d’une situation de choc.
L’indicateur ADX détermine la force de la tendance. Lorsque l’ADX est supérieur à 30, il est considéré comme une tendance forte.
Il est préférable de faire plus d’options en fonction de la tendance haussière. Dans le marché haussier, le fourchette d’or fait plus, dans le marché baissier, le fourchette morte fait moins.
Le filtrage du volume des transactions et l’ouverture des comptes lorsque le volume des transactions est élevé.
L’indice USD détermine simplement si le dollar est fort ou faible, et élargit les stop loss et stop loss lorsque le dollar est fort.
Les indices de tendance super sont utilisés pour évaluer la tendance générale des marchés, et pour aider à déterminer le moment où il est préférable de faire plus de blanchiment.
Cette stratégie, qui combine parfaitement l’indicateur de tendance et l’indicateur de choc, permet d’ajuster dynamiquement les paramètres et de contrôler les risques tout en suivant les tendances.
L’EMA est lisse et permet de filtrer efficacement les fausses ruptures.
L’indicateur ATR ajuste dynamiquement les conditions de filtrage linéaire croisée de l’EMA, permettant aux stratégies de s’adapter de manière flexible à différents environnements de marché.
L’indicateur ADX et le volume de transactions sont utilisés comme indicateurs de jugement auxiliaires, afin d’éviter d’être piégé dans une situation de choc.
L’indice du dollar et l’indice des super tendances sont utilisés pour évaluer les grandes tendances et améliorer l’exactitude des décisions.
Les paramètres de gestion des risques sont automatiquement ajustés en fonction de la force ou de la faiblesse du dollar américain, et les stop-loss et les stop-loss sont augmentés en cas de force du dollar américain.
Il est facile à mettre en œuvre et à suivre en utilisant des signaux de négociation simples et intuitifs, ainsi qu’une stratégie de stop-loss.
Le système de double équilibre de l’EMA élimine le décalage de la tendance.
Le mauvais choix des paramètres ATR peut conduire à l’exagération ou à la conservatisme.
Les paramètres de l’indicateur ADX nécessitent une optimisation, et le mauvais choix des hauts de l’ADX peut manquer la tendance.
Il y a peut-être des erreurs dans l’évaluation de l’indice du dollar et de l’indice des tendances.
Un stop loss trop petit peut augmenter les pertes; un stop loss trop large est plus susceptible d’être encaissé.
Le critère de tendance peut être considéré en combinaison avec d’autres indicateurs tels que le MACD.
Utilisez plus de données historiques pour former l’espace de paramètres ATR et trouver la gamme optimale de paramètres.
Test des différents paramètres ADX et optimisation du jugement des hauts points ADX.
Ajouter plus de variables pour juger de l’évolution de l’indice du dollar et du marché en général.
Calcul de la marge de rétention optimale sur la base des données de retrospective.
On peut envisager de modifier le stop loss en stop loss mobile ou en stop loss oscillant.
Continuer à optimiser la taille des placements et le cycle de détention.
Cette stratégie intègre un système classique de double EMA avec plusieurs indicateurs auxiliaires, optimisé automatiquement par les paramètres, pour obtenir une stratégie de suivi de tendance plus complète. Elle est capable de s’adapter de manière flexible aux changements de l’environnement du marché, tout en contrôlant les risques tout en suivant la tendance. Cependant, il reste encore besoin de tests et d’optimisations supplémentaires pour les paramètres de stop loss et d’indicateur, afin d’obtenir de meilleurs rendements stables.
/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Refactored Advanced EMA Cross with Normalized ATR Filter, Controlling ADX", shorttitle="ALP V5", overlay=true)
// Initialize variables to track if a buy order has been placed and number of periods since the last buy
var bool hasBought = false
var int barCountSinceBuy = 0
// Define EMA periods
emaShort = ta.ema(close, 8)
emaLong = ta.ema(close, 20)
// Define ATR period and normalization
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
var float trailingStop = na
// Calculate USD strength (simplified)
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
// Piyasa yönü için süper trend göstergesi
[supertrendValue, supertrendDirection] = ta.supertrend(4, 14) // Use a factor of 3 and ATR period of 10
bool isBullMarket = supertrendDirection < 0
bool isBearMarket = supertrendDirection > 0
// Yükselen piyasa için alım koşulu
buyConditionBull = isBullMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.2
// Düşen piyasa için alım koşulu
buyConditionBear = isBearMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.5
// Genel alım koşulu
buyCondition = buyConditionBull or buyConditionBear
// Yükselen ve düşen piyasalar için farklı satış koşulları
sellConditionBull = isBullMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
sellConditionBear = isBearMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
// Genel satış koşulu
sellCondition = sellConditionBull or sellConditionBear
// Buy condition
if (buyCondition)
strategy.entry("Buy", strategy.long)
positionPrice := close
hasBought := true // Set the flag to true when a buy order is placed
barCountSinceBuy := 0 // Reset the bar counter when a buy order is placed
// Increase the bar counter if a buy has been executed
if (hasBought)
barCountSinceBuy := barCountSinceBuy + 1
// Calculate stop-loss and take-profit levels
longStopLoss = positionPrice * (1 - stopLossPercent / 100)
longTakeProfit = positionPrice * (1 + takeProfitPercent / 100)
// Final Sell condition, now also checks if a buy has occurred before and if at least 5 periods have passed
finalSellCondition = sellCondition and hasBought and barCountSinceBuy >= 3 and isVolumeHigh
if (finalSellCondition)
strategy.close("Buy")
positionPrice := na
hasBought := false // Reset the flag when a sell order is placed
barCountSinceBuy := 0 // Reset the bar counter when a buy order is closed
// Implement stop-loss, take-profit, and trailing stop
strategy.exit("Stop Loss", "Buy", stop=longStopLoss)
strategy.exit("Take Profit", "Buy", limit=longTakeProfit)
//strategy.exit("Trailing Stop", "Buy", trail_price=close, trail_offset=trailingStop * close / 100)
var label l = na
if (buyCondition)
l := label.new(bar_index, high, text="buy triggered " + str.tostring(usd_strength))
label.delete(l[1])
if (finalSellCondition)
l := label.new(bar_index, high, text="sell triggered " + str.tostring(usd_strength))
label.delete(l[1])
// 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")