Tendance de croisement à double EMA suivant une stratégie avec des filtres ATR et ADX

Auteur:ChaoZhang est là., Date: 2023-11-15 15h53:57 Pour les personnes âgées
Les étiquettes:

img

Résumé

Cette stratégie utilise le système classique de double croisement EMA pour le suivi des tendances, avec des filtres supplémentaires des indicateurs ATR et ADX, afin de suivre les fortes tendances et de contrôler le risque lors des consolidations.

La logique de la stratégie

La stratégie repose principalement sur les éléments suivants:

  1. Utilisez une EMA de 8 périodes plus rapide et une EMA de 20 périodes plus lente pour générer des signaux croisés.

  2. L'indicateur ATR reflète la volatilité récente. La normalisation de l'ATR permet un ajustement dynamique des conditions de filtrage croisé de l'EMA, en abaissant les exigences lors de fortes tendances et en augmentant lors de consolidations pour contrôler le risque.

  3. L'indicateur ADX détermine la force de la tendance.

  4. Combinez avec les tendances taureau/ours pour déterminer le timing d'entrée long/courte.

  5. Filtre de volume pour entrer lorsque le volume augmente.

  6. Utilisez un indice USD simple pour déterminer la force de l'USD, l'élargissement de la fourchette stop et take profit lors d'une forte USD.

  7. Utiliser l'indicateur SuperTrend pour déterminer l'orientation globale du marché en ce qui concerne les aides supplémentaires à court/long terme.

La stratégie combine des indicateurs de tendance et d'oscillation pour ajuster dynamiquement les paramètres, suivre les tendances tout en contrôlant le risque.

Les avantages de la stratégie

  1. Le double système EMA assure la détermination de la tendance, la douceur de l'EMA filtrant les fausses ruptures.

  2. Les filtres normalisés ATR permettent une flexibilité pour différents environnements de marché.

  3. L'ADX et le volume fournissent des vérifications supplémentaires pour éviter les problèmes lors des consolidations.

  4. La prise en compte de l'USD et de la SuperTrend améliore la précision des décisions sur la macro-tendance.

  5. La gestion des risques s'adapte automatiquement en fonction de la force du dollar.

  6. Des signaux croisés dorés / morts simples et une logique stop / take profit facilitent la mise en œuvre et le backtest.

Risques liés à la stratégie

  1. Les doubles EMA sont en retard dans la détection des points tournants de tendance.

  2. Une mauvaise sélection des paramètres ATR peut être trop agressive ou conservatrice.

  3. Les paramètres ADX ont besoin d'optimisation, des points élevés mal définis pourraient manquer les tendances.

  4. La détermination de la tendance USD et SuperTrend pourrait être inexacte.

  5. Un stop-loss trop serré augmente les pertes, un risque trop large est un coup de fouet.

Idées d'amélioration

  1. Considérez l'ajout d'indicateurs tels que le MACD pour une meilleure détection des points de roulement.

  2. Optimisez les paramètres ATR par rapport à des données plus historiques.

  3. Tester différents paramètres ADX et optimiser les seuils de points élevés.

  4. Ajouter plus de variables pour l'analyse des tendances en USD et sur le marché.

  5. Calculer le pourcentage optimal de stop loss à partir des statistiques des tests antérieurs.

  6. Experimenter avec des arrêts de trail ou de lustre.

  7. Continuer à optimiser la taille de l'entrée et la période de conservation.

Conclusion

Cette stratégie intègre le système classique de double EMA avec plusieurs indicateurs auxiliaires, en utilisant l'optimisation paramétrifiée pour une approche de suivi de tendance assez robuste. Il s'adapte de manière flexible aux environnements changeants du marché, en suivant les tendances tout en contrôlant le risque. Des tests et une optimisation supplémentaires des arrêts et des paramètres d'indicateur amélioreraient les résultats. Les concepts valent la peine d'être apprises et améliorées.


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


Plus de