
Die Strategie nutzt die klassischen Trends, bei denen die doppelte EMA-Gleichlinie Gold-Over- und Dead-Off-Forks bildet, um der Strategie zu folgen, und verwendet die ATR- und ADX-Indikatoren für zusätzliche Filterung, um bei starken Trends zu verfolgen und Risiken bei Erschütterungen zu kontrollieren.
Die Strategie basiert hauptsächlich auf folgenden Punkten:
Die EMA-Mittellinie mit einem kürzeren 8-Zyklus und die EMA-Mittellinie mit einem längeren 20-Zyklus bilden ein Gold- und ein Todesfork Signal. Die EMA-Mittellinie selbst ist tendenziell.
Der ATR-Indikator spiegelt die jüngsten Schwankungen wider. Durch die Normalisierung des ATR-Indikators können die Filterbedingungen für die EMA-Gleichgewichtskreuzung dynamisch angepasst werden, um die Filteranforderungen bei der Verfolgung eines starken Trends zu reduzieren und die Filteranforderungen bei einem erregenden Trend zu erhöhen und das Risiko zu kontrollieren.
Der ADX-Indikator beurteilt die Stärke des Trends. Wenn der ADX-Wert größer als 30 ist, wird ein starker Trend vermutet.
In Kombination mit einem Abwärtstrend wird die Zeit für eine größere Leerstellung bestimmt. In einem Bullenmarkt wird die Goldfalke mehr gemacht, in einem Bärenmarkt wird die Todfalke leergestellt.
Die Anzahl der Transaktionen wird gefiltert und die Eintrittskarte wird bei einer größeren Anzahl von Transaktionen eingestellt.
Der USD-Index beurteilt einfach, ob der US-Dollar stark oder schwach ist, und erweitert die Stop-Loss- und Stopp-Margin-Werte, wenn der US-Dollar stark ist.
In Kombination mit dem Supertrend-Indikator beurteilt man die allgemeine Entwicklung der Märkte und entscheidet darüber, wann es Zeit ist, mehr Leerlauf zu machen.
Die Strategie kombiniert Trend- und Schokkinstrumenten, um die Parameter dynamisch anzupassen und gleichzeitig das Risiko zu kontrollieren, während Trends verfolgt werden.
Trends werden mit einer doppelten EMA-Gleichlinie beurteilt. Die EMA ist glatt und filtert effektiv falsche Durchbrüche.
ATR-Indikatoren passen EMA-Linien-Kreuz-Filterbedingungen dynamisch an, so dass Strategien flexibel an unterschiedliche Marktbedingungen angepasst werden können.
Der ADX und der Handelsvolumen dienen als Hilfsindikatoren, um sich in einem wackligen Zustand zu schützen.
Der US-Dollar-Index und der Supertrend-Indikator sind wichtige Indikatoren, um Trends zu ermitteln und Entscheidungen zu treffen.
Die Risikomanagementparameter werden automatisch angepasst, wenn der US-Dollar stärker ist, und die Stop-Loss- und Stop-Shock-Werte werden erhöht, wenn der US-Dollar stärker ist.
Die Einführung und Rückverfolgung der Stop-Loss-Stop-Strategie mit einfachen und intuitiven Gold-Dead-Fork-Handelssignalen ist einfach.
Die doppelte EMA-Gleichlinien-System entfernt den Trend-Kritikpunkt, der die Verzögerung beurteilt.
Eine falsche Auswahl der ATR-Parameter kann zu einer zu radikalen oder konservativen Auswahl führen.
Die Parameter des ADX-Indikators müssen optimiert werden, und die falsche Auswahl der ADX-Hochpunkte kann den Trend verpassen.
Der US-Dollar-Index und der Supertrend-Indikator können falsch beurteilt werden.
Eine zu geringe Stop-Loss-Marge kann zu einem höheren Verlust führen; eine zu breite Stop-Loss-Marge kann zu einem höheren Verlust führen.
Es kann in Kombination mit anderen Indikatoren, wie z. B. MACD, eine Tendenz-Kritikpunkt in Betracht gezogen werden.
Trainieren Sie den ATR-Parameterraum mit mehr historischen Daten, um den optimalen Parameterbereich zu finden.
Testen Sie verschiedene ADX-Parameter und optimieren Sie die ADX-Hochpunkte.
Es ist wichtig, mehr Variablen für den US-Dollar-Index und die allgemeine Marktentwicklung hinzuzufügen.
Die optimale Stop-Loss-Marge wird anhand von Rückmessdaten berechnet.
Es kann in Betracht gezogen werden, den Stop-Loss in Bewegungs- oder Schwingungs-Stopp zu ändern.
Weiterhin soll die Größe der Lageröffnungen und die Haltezeit optimiert werden.
Die Strategie integriert das klassische Doppel-EMA-Gleichlinien-System mit mehreren Hilfsindikatoren und optimiert die Parameter automatisch, um eine vollständige Trendverfolgungsstrategie zu erreichen. Sie kann sich flexibel an veränderte Marktumgebungen anpassen und Risiken kontrollieren, während sie Trends verfolgt. Es ist jedoch notwendig, weitere Tests und Optimierungen für Stop-Loss- und Kennparameter durchzuführen, um bessere stabile Erträge zu erzielen.
/*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")