
Die Doppel-Gleichgewichts-Breakout-Strategie ist eine Trend-Tracking-Strategie, die auf der Kreuzung von Bewegungs-Mitteln in zwei verschiedenen Perioden als Kauf- und Verkaufssignale basiert. Die Strategie verwendet die Kreuzung von schnellen und langsamen Durchschnittswerten als Einstiegspunkte für den Handel, um nach der Kreuzung die Richtung des Trends zu bestimmen und eine entsprechende Über- oder Leerposition aufzubauen. Sie kann sowohl einen Trend auf mittlerer Ebene erfassen als auch die Probleme mit zu hoher Handelsfrequenz durch unnötige Schwankungen reduzieren.
Die Strategie verwendet zwei Moving Averages: einen schnellen MA und einen langsamen MA. Die schnellen MA-Zyklen sind in der Regel auf eine kürzere Periode (z. B. 15 Perioden) eingestellt, um kurzfristige Preisbewegungen zu erfassen. Die langsamen MA-Zyklen sind in der Regel auf eine längere Periode (z. B. 21 Perioden) eingestellt, um die Richtung der wichtigsten Trends zu bestimmen. Die Handelssignale der Strategie stammen aus der Kreuzung zweier MA: ein Kaufsignal, wenn ein schneller MA über einen schnellen MA geht, und ein Verkaufsignal, wenn ein schneller MA unter einem schnellen MA geht.
Durch die Einrichtung verschiedener MA-Periodenpaare kann die Dauer der Trend-Erfassung der Strategie angepasst werden. Die kürzeren MA-Paare können die Gelegenheit zu kurzfristigen Preiswechseln in kleinen Perioden erfassen. Die längeren MA-Paare können die Schwingungen filtern und nur Trends auf der längeren Linie erfassen.
Die Strategie beinhaltet auch Risikomanagement-Module: Stop Loss, Stop Loss, Move Stop. Dies kann die maximale Verlustquote für einen einzelnen Handel begrenzen und dazu beitragen, die Gesamterträge zu schützen.
Die Strategie der Gleichgewichtsausrichtung hat folgende Vorteile:
Die Doppel-Gleichgewichts-Strategie birgt auch Risiken, die sich auf folgende Bereiche konzentrieren:
Diese Risiken können durch Anpassung der MA-Parameter, Hinzufügen von Filterbedingungen und Optimierung der Stop-Loss-Logik verbessert und optimiert werden.
Die Strategie der Gleichgewichtslinie kann in folgenden Bereichen optimiert werden:
Durch diese Optimierungen und Verbesserungen können die Erfolgsquote, die Rendite und die Risikobereitschaft der Strategie erheblich gesteigert werden.
Die Binary Breakthrough Strategie ist insgesamt eine leicht zu implementierende und zu optimierende Trend-Tracking-Strategie. Sie verfügt über einfache Bedienung, Flexibilität und Risikokontrolle und eignet sich hervorragend als Einstiegsstrategie für quantitative Transaktionen. Durch ständige Prüfung und Optimierung kann diese Strategie kontinuierlich verbessert werden und hat das Potenzial, eine qualitative Strategie zu werden.
/*backtest
start: 2022-12-10 00:00:00
end: 2023-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title = "Silent Trader Strategy", shorttitle = "Silent Trader", overlay = true, pyramiding = 0, default_qty_type = strategy.cash, default_qty_value = 1000, commission_value = 0.0675, initial_capital = 1000, currency = currency.USD, calc_on_order_fills = true, calc_on_every_tick = true)
maFastSource = input(defval = ohlc4, title = "Fast MA Source")
maFastLength = input(defval = 15, title = "Fast MA Period", minval = 1)
maSlowSource = input(defval = ohlc4, title = "Slow MA Source")
maSlowLength = input(defval = 21, title = "Slow MA Period", minval = 1)
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
inpTakeProfit = input(defval = 100, title = "Take Profit percentage(0.1%)", minval = 0)
inpStopLoss = input(defval = 100, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
useTimeLimit = input(defval = true, title = "Use Start Time Limiter?")
startYear = input(defval = 2018, title = "Start From Year", minval = 0, step = 1)
startMonth = input(defval = 05, title = "Start From Month", minval = 0,step = 1)
startDay = input(defval = 01, title = "Start From Day", minval = 0,step = 1)
startHour = input(defval = 00, title = "Start From Hour", minval = 0,step = 1)
startMinute = input(defval = 00, title = "Start From Minute", minval = 0,step = 1)
startTimeOk() =>
inputTime = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
timeOk = time > inputTime ? true : false
r = (useTimeLimit and timeOk) or not useTimeLimit
maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)
fast = plot(maFast, title = "Fast MA", color = #26A69A, linewidth = 1, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #EF5350, linewidth = 1, style = line, transp = 50)
aboveBelow = maFast >= maSlow ? true : false
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false
if( startTimeOk() )
enterLong = not tradeDirection[1] and tradeDirection
exitLong = tradeDirection[1] and not tradeDirection
strategy.entry( id = "Long", long = true, when = enterLong )
//strategy.close( id = "Long", when = exitLong )
enterShort = tradeDirection[1] and not tradeDirection
exitShort = not tradeDirection[1] and tradeDirection
strategy.entry( id = "Short", long = false, when = enterShort )
//strategy.close( id = "Short", when = exitShort )
strategy.exit("Exit Long", from_entry = "Long", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)
strategy.exit("Exit Short", from_entry = "Short", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)