Doppelte EMA Golden Cross Handelsstrategie


Erstellungsdatum: 2023-12-07 15:08:57 zuletzt geändert: 2023-12-07 15:08:57
Kopie: 0 Klicks: 701
1
konzentrieren Sie sich auf
1619
Anhänger

Doppelte EMA Golden Cross Handelsstrategie

Überblick

Die Strategie kombiniert eine doppelte EMA-Gold-Kreuzung, einen standardisierten ATR-Noisefilter und einen ADX-Trendindikator, um Händlern ein zuverlässigeres Kaufsignal zu geben. Die Strategie kombiniert mehrere Indikatoren, um falsche Signale zu filtern und zuverlässigere Handelsmöglichkeiten zu identifizieren.

Strategieprinzip

Die Strategie verwendet EMAs mit 8 und 20 Zyklen, um ein doppeltes EMA-Gold-Kreuzsystem zu erstellen. Es erzeugt ein Kaufsignal, wenn ein kurzes EMA ein langes EMA durchquert.

Außerdem wurden mehrere Hilfsindikatoren für die Filterung eingerichtet:

  1. 14 ATR-Zyklen, standardisiert, um zu geringe Preisschwankungen auf dem Markt zu filtern.

  2. 14 Perioden ADX, die Stärke des Trends. Nur bei starken Trends werden Handelssignale berücksichtigt.

  3. 14 Zyklusvolumen SMA, Filter für Zeitpunkte mit geringem Volumen.

  4. Der 414-Zyklus-Super-Trend-Indikator, der die Richtung des freien Marktes bestimmt.

Die EMA-Gold-Kreuzung löst letztendlich ein Kaufsignal aus, nachdem die Trendrichtung, die ATR-Standardisierung, die ADX-Werte und die Umsatzbedingungen erfüllt wurden.

Strategische Vorteile

  1. Mehrindikator-Kombination mit hoher Zuverlässigkeit

Die Strategie integriert mehrere Indikatoren wie EMA, ATR, ADX und Super Trend, um ein stärkeres Signalfiltersystem mit hoher Zuverlässigkeit zu bilden.

  1. Die Parameter sind räumlich einstellbar

ATR Standardisierte Wertminderung, ADX Wertminderung, Haltedauer und andere Parameter können entsprechend der tatsächlichen Situation optimiert angepasst werden, und die Strategie ist flexibler.

  1. Unterscheidung zwischen freien Märkten

Verwenden Sie verschiedene Parameterkriterien, um überflüssige Märkte anhand der Super Trend-Indikatoren zu beurteilen und Verluste zu vermeiden.

Strategisches Risiko

  1. Parameter sind schwierig zu optimieren

Die Kombination von Strategieparametern ist komplex, die Optimierung ist schwierig und erfordert eine große Anzahl von Rückprüfungen, um die optimalen Parameter zu finden.

  1. Fehler im Indikator lösen Risiken aus

Trotz der Mehrfachfilterung besteht die Gefahr eines Fehltrigers, da der Indikator von Natur aus rückläufig ist. Die Stop-Loss-Theorie muss berücksichtigt werden.

  1. Niedrige Handelsfrequenz

Die Strategie wird von mehreren Indikatoren und Schwankungen beeinflusst, was zu einer geringen Handelsfrequenz und möglicherweise zu einer langen Zeit ohne Handel führt.

Richtung der Strategieoptimierung

  1. Optimierungsparameterkombinationen

Die optimale Kombination der Indikatorparameter wird durch eine große Menge an Rückmessdaten gefunden.

  1. Mehr Maschinelles Lernen

Auf der Grundlage großer Mengen an historischen Daten werden Strategieparameter automatisch optimiert, um die Anpassungsfähigkeit der Strategie zu erreichen.

  1. Weitere Marktfaktoren berücksichtigen

Die Strategie ist vielfältig, da sie mehr Indikatoren zur Bestimmung der Struktur des Marktes, der Stimmung usw. enthält.

Zusammenfassen

Die Strategie berücksichtigt Trends, Volatilität und Quantifikationsfaktoren und bildet ein Handelssystem durch mehrere Indikatoren Filterung und Parameter-Anpassung. Die Strategie hat eine hohe Zuverlässigkeit und kann die Handels-Effizienz der Strategie durch weitere Optimierung ihrer Parameter-Kombination und Modellierung verbessern.

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