Die Strategie wird hauptsächlich durch die Berechnung der doppelten EMA- und DEMA-Dynamik der Preise zur Identifizierung von Trends und in Verbindung mit der ATR-Volatilitätsrate zur Filterung von False-Breakouts durchgeführt, um eine quantitative Handelsstrategie zu realisieren, bei der die doppelte EMA-Dynamik und die Volatilitätsrate gefiltert werden.
Die Strategie besteht aus folgenden Teilen:
Die EMA und DEMA werden als doppelte Dynamik-Indikatoren für die Berechnung der Preise verwendet. Die EMA mit längerer Periode spiegelt die langfristige Tendenz wider, während die DEMA als ein sensiblerer kurzfristiger Dynamik-Indikator verwendet wird.
Berechnen Sie die ATR-Volatilitätsrate. Die Größe der ATR beurteilt die Volatilität und die Liquidität des Marktes. Wenn die Volatilität zu hoch ist, werden die Signale des Momentumindikators gefiltert, um falsche Durchbrüche zu vermeiden.
Die ATR-Schwankungen werden durch die parametrische Bewegung des Durchschnitts beurteilt. Wenn die ATR-Schwankungen unterhalb des Bewegungsgehalts liegen, ist das Triggern des Messsignals erlaubt.
Die ATR-Zeitspanne, ATR-Längen, ATR-Bewegungsmittel-Typen und -Längen werden durch Parameter gesteuert.
Einrichtung von Stop-Loss-Regeln, Stop-Stops und Tracking-Stops für mehrere Positionen.
Diese doppelte EMA-Filterstrategie reduziert die Anzahl der Falschsignale und häufigen Transaktionen in der normalen EMA-Goldfork-Deadfork-Strategie erheblich. Mit dem ATR-Schwankungsrate-Indikator kann ein falsches Signal durch geringfügige Schwankungen effektiv gefiltert und verhindert werden.
Im Vergleich zu einem einzigen Dynamometer ist die Strategie mit einem Doppelindikator-Design entwickelt worden, um die Urteilswirksamkeit zu verbessern. DEMA ist ein sensiblerer kurzfristiger Dynamometer, der mit einem stabilen langen EMA kombiniert wird, um ein zuverlässigeres Kombinationssignal zu bilden.
Durch die Anpassung der ATR-Parameter können für verschiedene Standardobjekte geeignete Schwankungsbedingungen festgelegt werden, um die Anwendbarkeit der Strategie zu verbessern.
Die größte Gefahr dieser Strategie besteht darin, dass eine unangemessene Einstellung der Parameter zu seltenen Handelssignalen führen kann. Eine zu lange Einstellung der DEMA- und EMA-Länge oder eine zu hohe Einstellung der ATR-Schwankungsgrenze kann die tatsächliche Wirksamkeit der Strategie beeinträchtigen. Dies muss durch wiederholte Tests an die optimale Kombination von Parametern angepasst werden.
Ein weiteres potenzielles Risiko besteht darin, dass in extremen Situationen Preisschwankungen die ATR-Parameter überschreiten können, was zu Verlusten führt. Dies erfordert die Überwachung von Marktausfällen durch Menschen und die Aussetzung der Strategie.
Verschiedene Kombinationen von Parametern für die Dynamometer werden getestet, um die optimale Parameter zu finden.
Versuchen Sie, die Dynamik-Indikatoren von der doppelten EMA auf MACD oder andere Indikatoren zu ändern.
Verschiedene Volatilitätsindikatoren werden getestet, wie z. B. die gesamte historische ATR, der Marktausfallindex usw.
Es wird eine Filterung des Handelsvolumens erweitert, um die Gefahr zu vermeiden, dass die Preise nicht wirklich springen.
Optimierte Stop-Loss-Stopp-Mechanismen, die den Gewinn-Nutzen-Vergleich verbessern.
Die Strategie integriert Dynamikindikatoren und Volatilitätsanalysen und basiert auf einer soliden theoretischen Grundlage. Durch die Anpassung der Parameter und die Optimierung der Regeln kann sie zu einer stabilen und zuverlässigen quantitativen Handelsstrategie werden. Die Handelssignale sind klar, das Risiko ist kontrollierbar und es lohnt sich, sie zu überprüfen und anzuwenden.
/*backtest
start: 2023-11-21 00:00:00
end: 2023-12-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Qorbanjf
//@version=4
strategy("ORIGIN DEMA/EMA & VOL LONG ONLY", shorttitle="ORIGIN DEMA/EMA & VOL LONG", overlay=true)
// DEMA
length = input(10, minval=1, title="DEMA LENGTH")
src = input(close, title="Source")
e1 = ema(src, length)
e2 = ema(e1, length)
dema1 = 2 * e1 - e2
plot(dema1, "DEMA", color=color.yellow)
//EMA
len = input(25, minval=1, title="EMA Length")
srb = input(close, title="Source")
offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
ema1 = ema(srb, len)
plot(ema1, title="EMA", color=color.blue, offset=offset)
// Inputs
atrTimeFrame = input("D", title="ATR Timeframe", type=input.resolution)
atrLookback = input(defval=14,title="ATR Lookback Period",type=input.integer)
useMA = input(title = "Show Moving Average?", type = input.bool, defval = true)
maType = input(defval="EMA", options=["EMA", "SMA"], title = "Moving Average Type")
maLength = input(defval = 20, title = "Moving Average Period", minval = 1)
//longLossPerc = input(title="Long Stop Loss (%)",
// type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
longTrailPerc = input(title="Trail stop loss (%)",
type=input.float, minval=0.0, step=0.1, defval=50) * 0.01
longProfitPerc = input(title="Long Take Profit (%)",
type=input.float, minval=0.0, step=0.1, defval=3000) / 100
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2017, title = "From Year", minval = 2000)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
// ATR Logic // atrValue = atr(atrLookback) // atrp = (atrValue/close)*100 // plot(atrp, color=color.white, linewidth=2, transp = 30)
atrValue = security(syminfo.tickerid, atrTimeFrame, atr(atrLookback))
atrp = (atrValue/close)*100
// Moving Average Logic
ma(maType, src, length) =>
maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc)
maFilter = security(syminfo.tickerid, atrTimeFrame, ma(maType, atrp, maLength))
// variables for enter position
enterLong = crossover(dema1, ema1) and atrp < maFilter
// variables for exit position
sale = crossunder(dema1, ema1)
// stop loss
//longStopPrice = strategy.position_avg_price * (1 - longLossPerc)
// trail stop
// Determine trail stop loss prices
longStopTrail = 0.0
longStopTrail := if (strategy.position_size > 0)
stopValue = close * (1 - longTrailPerc)
max(stopValue, longStopTrail[1])
else
0
//Take profit Percentage
longExitPrice = strategy.position_avg_price * (1 + longProfitPerc)
//Enter trades when conditions are met
strategy.entry(id="long",
long=strategy.long,
when=enterLong,
comment="long")
//
strategy.close("long", when = sale, comment = "Sell")
//place exit orders (only executed after trades are active)
strategy.exit(id="sell",
limit = longExitPrice,
stop = longStopTrail,
comment = "SL/TP")