
Diese Strategie wird als “DEMA- und EMA-Kurzzeit-Kreuzung kombiniert mit ATR-Volatilitätsstrategie” bezeichnet. Die Strategie ermöglicht eine effiziente Short-Line-Trading-Strategie durch die Berechnung von DEMA- und EMA-Kreuzungssignalen in Kombination mit ATR-Volatilitätsindikatoren.
Berechnung des DEMA-Indikators. DEMA ist ein beidseitiges EMA, das durch Berechnung eines beidseitigen EMAs innerhalb eines bestimmten Zeitraums die kurzfristige Marktlärmwirkung effektiv filtert und die Signalgenauigkeit verbessert.
Berechnung der EMA. Die EMA ist ein Index-Moving Average, der schneller auf Preisänderungen reagiert.
Berechnung der ATR-Volatilität. Die ATR ist ein Indikator für die tatsächliche Schwankungsbreite und kann die Marktvolatilität und das Risiko widerspiegeln. Wenn die ATR steigt, bedeutet dies, dass die Marktvolatilität erhöht wird und eine Kurzlinie erzeugt werden kann.
Wenn die DEMA die EMA durchbricht und die ATR-Volatilität größer ist als die eingestellten Parameter, zeigt dies an, dass der Aktienpreis zu sinken beginnt und der Markt risk off ist.
Wenn die DEMA wieder in die EMA eintritt, zeigt dies, dass der Preis eine Unterstützung gebildet hat und beginnt zu springen.
Die doppelte EMA in Kombination mit der EMA kann die Genauigkeit des Signals effektiv verbessern.
Die ATR-Schwankungsrate kann Whipsaw-Signale mit geringem Risiko ausschließen.
Kurzfristige Operationen, geeignet für die Kurzstreckenverfolgung, um eine langfristige Absicherung zu vermeiden.
Die Transaktionslogik ist einfach, klar und leicht zu verstehen und umzusetzen.
Eine falsche Einstellung der ATR-Parameter kann zu verpassten Handelschancen führen.
Es ist sehr schwierig, das Signal auf beiden Seiten gleichzeitig zu beobachten.
ffected by short-term market volatility.
Lösung: Parameteroptimierungstests, Parameteranpassung; Vereinfachung der Handelslogik, Konzentration auf einseitige Signale; angemessene Lockerung der Stop-Loss-Range.
Optimierung der Parameter von DEMA und EMA, um die optimale Parameterkombination zu finden.
Optimierung der ATR-Periodenparameter zur Bestimmung der besten Messgrößen für die Marktvolatilität.
Zusätzliche Hilfsindikatoren wie BOLL-Kanäle werden hinzugefügt, um die Signalgenauigkeit zu verbessern.
Erhöhung der Stop-Loss- und Stop-Stop-Regeln, um stabilere Gewinne zu erzielen.
Die Strategie baut eine einfache und effiziente kurzfristige Handelsstrategie auf, die sich an den Volatilitätsindikatoren DEMA, EMA Cross und ATR orientiert. Die Handelslogik der Strategie ist klar, einfach zu bedienen und lässt sich an Hochfrequenz-Kurzstreckenhandel anpassen. Der nächste Schritt ist die Optimierung von Parametern und Regeln, die zu einem stabileren Gewinn führen.
/*backtest
start: 2023-12-08 00:00:00
end: 2024-01-07 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
// 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("Qorban: DEMA/EMA & VOL Short ONLY", shorttitle="DEMA/EMA & VOL SHORT", 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)
// get ATR VALUE
atr = atr(14)
//ATRP (Average True Price in precentage)
// 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)
slType = input(title="Stop Loss ATR / %", type=input.float, defval=5.0, step=0.1)
slMulti = input(title="SL Multiplier", type=input.float, defval=1.0, step=0.1)
minimumProfitPercent = input(title="Minimum profit %", type=input.float, defval=20.00)
// 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))
// Determine percentage of open profit
var entry = 0.0
distanceProfit = low - entry
distanceProfitPercent = distanceProfit / entry
//Determin if we have a long entry signal OR a sell position signal
profitSignal = minimumProfitPercent == 0.0 or distanceProfitPercent >= minimumProfitPercent
shortSignal = crossunder(dema1, ema1) and atrp > maFilter and strategy.position_size == 0 and not na(atr)
exitSignal = profitSignal and strategy.position_size !=0 and crossover(dema1, ema1)
// === 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)
//Invert trade direction & flipping
//tradInvert = input(defval = false, title = "invert trade direction")
//MOM_MR = input(defval=1, title = "MOM = 1 / MR = -1", minval=-1, maxval=1)
//plots=input(false, title="Show plots?")
// Get stop loss (in pips AND percentage distance)
shortStop = highest(high, 4) - (atr * slMulti)
shortStopPercent = close - (close * slMulti)
// Save long stop & target prices (used for drawing data to the chart & deetermining profit)
var shortStopSaved = 0.0
var shortTargetSaved = 0.0
enterShort = false
if shortSignal
shortStopSaved := slType ? shortStop : shortStopPercent
enterShort:= true
entry := close
// long conditions
//enterLong = crossover(dema1, ema1) and atrp < maFilter
//exitSignal => crossunder(dema1, ema1)
//Enter trades when conditions are met
strategy.entry("short", strategy.short, when=enterShort, comment="SHORT")
//place exit orders (only executed after trades are active)
strategy.exit(id="Short exit",
from_entry="short",
limit=exitSignal ? close : na,
stop=shortStopSaved,
when=strategy.position_size > 0,
comment="end short")
//short strategy
//goShort() => crossunder(dema1, ema1) and atrp > maFilter
//KillShort() => crossover(dema1, ema1)
//strategy.entry("SHORT", strategy.short, when = goShort())
//strategy.close("COVER", when = KillShort())