
Die Strategie ist ein fortgeschrittenes Trend-Tracking-System, das eine Kombination aus einem Doppelindex-Moving Average (EMA) -Filter mit einer intelligenten Spannungs- und Geräuscherkundungsmechanik zur Verfügung stellt, um ein klares, handhabbares Handelssignal zu liefern. Die Kernkonzeption besteht darin, einen schwankenden Markt zu vermeiden, die Handlungsgenauigkeit zu verbessern und sich an unterschiedliche Marktbedingungen anzupassen. Die Strategie beurteilt die Richtung des Trends durch die Kreuzung der EMA-Hochlinie mit der EMA-Niedriglinie und nutzt gleichzeitig einen Spannungs-Filter und einen Fluktuationsfilter, um den Handel in einer Querlauf- oder niedrigen Fluktuationsumgebung zu vermeiden, wodurch die Erfolgsrate des Handels deutlich erhöht wird.
Die Kernmechanismen der Strategie basieren auf folgenden Schlüsselkomponenten:
Doppelte EMA-FilterungDie Strategie nutzt zwei Index-Moving Averages (Hoch-EMA und Niedrig-EMA) zur Ermittlung von Markttrends. Mehr Signal wird erzeugt, wenn der Preis gleichzeitig über den beiden EMA-Linien liegt.
AbstandsmessungDie Strategie verwendet einen Algorithmus zur Kennzeichnung von Segmenten, der auf einem Prozentsatz des Preisspektrums basiert. Der Handel wird automatisch unterbrochen, wenn der Markt in die horizontale Ausgleichsphase eintritt (d. h. wenn die Preisschwankungen unter dem eingestellten Schwellenwert liegen). Das System überwacht die Anzahl der Segment-Streifen in Folge und aktiviert den Segmentfilter nur, wenn der Markt bestätigt wird, dass er sich in einem echten Segment befindet, um zu vermeiden, dass eine anfängliche Durchbruchsmöglichkeit verpasst wird.
SchwankungsratefilterDurch die Berechnung des ATR (Average True Rate of Volatility) als Prozentsatz des aktuellen Preises kann die Strategie eine Umgebung mit geringer Volatilität erkennen und den Handel unter diesen Bedingungen vermeiden. Dieser Mechanismus sorgt dafür, dass der Handel nur dann durchgeführt wird, wenn der Markt ausreichend dynamisch ist.
Das Prinzip des Einmal-für-einen-Trend-HandelsDie Strategie implementiert einen Trend-Status-Mechanismus, der sicherstellt, dass nur ein Handel in derselben Trendrichtung ausgeführt wird, bis sich die Trendrichtung ändert. Dies verhindert übermäßige Handel und Signalwiederholung in derselben Trendrichtung.
Ungebrochener AbstandDie Strategie ist in der Lage, Integrationsbereiche zu erkennen und aufzuzeigen, die zu Durchbrüchen führen können, und hilft Händlern, potenzielle Handelsmöglichkeiten mit hoher Wahrscheinlichkeit zu erkennen.
Dynamische RisikomanagementStrategie: Die Strategie bietet Stop-Off- oder Fix-Percentage-Stop-Off-Basis auf der Basis von ATR und optional Parallax-Line-SAR-Tracking-Stop-Off, um das Risikomanagement flexibler und anpassungsfähiger für Marktveränderungen zu machen.
Hohe AnpassungsfähigkeitDie Strategie ist in der Lage, sich automatisch an unterschiedliche Marktbedingungen anzupassen, um Trends in trendigen Märkten zu erfassen und gleichzeitig in turbulenten Märkten zu beobachten. Diese Anpassungsfähigkeit ermöglicht es, in verschiedenen Marktumgebungen stabil zu bleiben.
Mehrere FiltermechanismenDie Strategie verbessert die Qualität der Handelssignale erheblich und reduziert Fehlsignale und falsche Durchbrüche durch eine Dreifachfilterung von Trends, Spannungen und Schwankungen.
Intelligente SchwankungsrateStrategie: Positionsgröße entsprechend der Dynamik der Marktfluktuation anpassen, um die Risikoplätze bei hoher Volatilität zu verringern und das Ertragspotenzial bei moderater Volatilität zu maximieren.
Ein umfassendes VisualisierungswerkzeugStrategie bietet eine Vielzahl von visuellen Hilfsmitteln, darunter Abstandsmarkierungen, ungebrochene Abstandsmarkierungen, EMA-Linien und SAR-Punkte, die es dem Händler ermöglichen, die Marktsituation und die Strategielogik intuitiv zu verstehen.
Flexible RisikokontrollenEs werden mehrere Stop-Loss-Strategien unterstützt (feste Prozentsätze, ATR-Multiplikatoren, SAR-Tracking), die es Händlern ermöglichen, die am besten geeignete Risikomanagementmethode zu wählen, die auf ihre persönlichen Risikopräferenzen und die Merkmale des Marktes basiert.
Einmalige AbwicklungDer Trend-Status-Mechanismus sorgt dafür, dass nur ein Handel pro Trendrichtung ausgeführt wird, um Überhändlungen zu vermeiden und das Risiko zu vermeiden, dass das Kapital übermäßig in eine einzige Richtung ausgesetzt ist.
Trendwende verzögertDie Strategie kann bei schnellen Trendwechseln langsamer reagieren, was zu einem gewissen Rückschlag am Anfang der Umkehr führt. Die Lösung besteht darin, die EMA-Längenparameter anzupassen, um eine kürzere EMA-Längenlänge in einem stark volatilen Markt zu verwenden.
Unwirksamkeit des HorizontalmarktesDie Lösung ist die Kombination von mehreren Zeitrahmenanalyse oder die Verwendung der Strategie in verschiedenen Märkten wechselweise.
Optimierung der ParameterabhängigkeitStrategie-Performance hängt stark von Parameter-Einstellungen wie EMA-Längen, Spannungs-Thresholds und ATR-Multiplikatoren ab. Unterschiedliche Märkte und Zeitrahmen können unterschiedliche Parameterkombinationen benötigen. Es wird empfohlen, die Parameter zu optimieren, indem sie in bestimmten Märkten und Zeitrahmen zurückgetestet werden.
Gefahr von plötzlichen großen SchwankungenIn Fällen, in denen die Preise aufgrund von unvorhergesehenen Marktereignissen (z. B. wichtigen Pressemitteilungen) hochgehen, kann der Stop-Loss möglicherweise nicht zum erwarteten Preis ausgeführt werden, was zu einem höheren tatsächlichen Verlust führt als erwartet. Die Verwendung zusätzlicher Kapitalverwaltungsregeln zur Begrenzung der Risikolockage für einzelne Geschäfte wird empfohlen.
Übermäßige Abhängigkeit von technischen IndikatorenDie Strategie basiert ausschließlich auf technischen Indikatoren und ignoriert die Fundamentaldaten. Rein technische Analysen können bei wesentlichen Fundamentaldaten fehlschlagen. Es wird empfohlen, Positionen zu reduzieren oder den Handel vor der Veröffentlichung wichtiger wirtschaftlicher Daten zu unterbrechen.
Mehrfache ZeitrahmenbestätigungEs wird empfohlen, Trendbestätigungsbedingungen für höhere Zeitrahmen hinzuzufügen und nur dann zu handeln, wenn die Richtung der höheren Zeitrahmen-Trendrichtung mit der aktuellen Handelsrichtung übereinstimmt, was den Rückschlag reduziert und die Gewinnrate erhöht.
Dynamische Parameter werden angepasstDie Strategie kann ein Anpassungsmechanismus integrieren, der die EMA-Länge, die Spanne und den ATR-Multiplier automatisch an die Marktfluktuation und die Trendstärke anpasst. Dies ermöglicht es der Strategie, sich besser an die verschiedenen Marktphasen anzupassen.
Integration von Modellen für maschinelles LernenDie Einführung von maschinellen Lernmodellen zur Optimierung der Einstiegszeit und zur Vorhersage der Richtung eines Zwischenbruchs kann die Strategie-Performance erheblich verbessern. Zum Beispiel die Wahrheit oder Unwahrheit eines Zwischenbruchs mit einem Klassifikationsalgorithmus oder die Vorhersage eines Preisziels nach dem Durchbruch mit einem Regressionsmodell.
Verbesserte SchwankungsratefilterDer aktuelle Schwankungsratefilter basiert auf einfachen ATR-Prozentsatz-Thresholds und kann zu einem Relativschwankungsrate-Indikator aufgerüstet werden, der die aktuelle Schwankungsrate mit der historischen Schwankungsrateverteilung vergleicht und die wirklich niedrigen Schwankungsbedingungen genauer identifiziert.
Erhöhung der BestätigungDie Erhöhung der Bestätigungsvoraussetzungen für die Bestätigung von Transaktionen bei der Erzeugung von Handelssignalen und die Ausführung von Transaktionen nur dann, wenn ein Preisbruch mit einer Erhöhung des Handelsvolumens einhergeht, verringert das Risiko von Falschbrüchen. Diese Verbesserung gilt insbesondere für die Aktien- und Warenmärkte.
Optimierung der Algorithmen für die GeldverwaltungDie Integration von Kelly-Prinzipien oder anderen fortgeschrittenen Geldmanagement-Algorithmen in die Strategie, die die Positionsgröße dynamisch anhand historischer Gewinn- und Verlustquoten anpassen, ermöglicht die Maximierung von langfristigen Erträgen und die Minimierung von Risiken.
Die Binary Equilibrium Trend Tracking and Volatility Intelligent Filtering Strategy ist ein umfassendes, robustes Handelssystem, das die Qualität der Handelssignale und die Erfolgsrate der Geschäfte durch die Kombination von Trend Tracking, Spannungsdetektion und Volatilitätsfiltertechnologie effektiv verbessert. Die einzigartige pro-Trend-Handelsprinzip und dynamische Risikomanagement-Mechanismen ermöglichen es, eine gute Profitabilität zu halten, während das Risiko kontrolliert wird.
Obwohl Risiken wie Trendwendeverzögerungen und Parameterabhängigkeit für Strategien bestehen, können diese Risiken durch vorgeschlagene Optimierungsrichtungen wie Multi-Time-Frame Confirmation, dynamische Parameter-Anpassung und Integration von Machine-Learning-Modellen wirksam verwaltet werden. Mit der richtigen Parameteroptimierung und Risikomanagement kann die Strategie unter verschiedenen Marktbedingungen eine stabile Leistung aufweisen und ist ein Handelssystem, das es sich lohnt, langfristig verwendet und kontinuierlich verbessert zu werden.
/*backtest
start: 2024-08-01 00:00:00
end: 2025-07-30 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Dubic EMA Strategy", overlay=true,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
initial_capital=10000,
currency=currency.USD,
commission_value=0.1,
pyramiding=0,
calc_on_every_tick=true)
// Inputs
ema_length = input.int(40, "EMA Length")
tp_percent = input.float(2.0, "Take Profit %", step=0.1, minval=0.1) / 100
sl_offset = input.float(0.5, "Stop Loss Offset %", step=0.1, minval=0.1) / 100
// Toggles for SL/TP
use_take_profit = input.bool(true, "Use Take Profit")
use_stop_loss = input.bool(true, "Use Stop Loss")
// Range Detection
range_length = input.int(20, "Range Detection Length", minval=5)
range_threshold = input.float(2.0, "Range Threshold %", step=0.1) / 100
min_range_bars = input.int(3, "Min Range Bars", minval=1)
// Parabolic SAR
use_parabolic_sar = input.bool(true, "Use Parabolic SAR Trailing Stop")
sar_start = input.float(0.02, "SAR Start", step=0.01)
sar_increment = input.float(0.02, "SAR Increment", step=0.01)
sar_max = input.float(0.2, "SAR Maximum", step=0.01)
// ATR Stop Configuration
use_atr_stop = input.bool(true, "Use ATR Stop Instead of Fixed %")
atr_length = input.int(14, "ATR Length")
atr_mult = input.float(1.5, "ATR Multiplier", minval=0.5)
// Volatility Filter
min_atr = input.float(0.5, "Min ATR % for Trading", step=0.1) / 100
use_volatility_filter = input.bool(true, "Enable Volatility Filter")
// Unbroken Range Visualization
show_unbroken_range = input.bool(true, "Show Unbroken Range Visualization", group="Unbroken Range")
unbroken_length = input.int(20, 'Minimum Range Length', minval=2, group="Unbroken Range")
unbroken_mult = input.float(1., 'Range Width', minval=0, step=0.1, group="Unbroken Range")
unbroken_atrLen = input.int(500, 'ATR Length', minval=1, group="Unbroken Range")
upCss = input.color(#089981, 'Broken Upward', group="Unbroken Range")
dnCss = input.color(#f23645, 'Broken Downward', group="Unbroken Range")
unbrokenCss = input.color(#2157f3, 'Unbroken', group="Unbroken Range")
// Calculate Indicators
ema_high = ta.ema(high, ema_length)
ema_low = ta.ema(low, ema_length)
ema_200 = ta.ema(close, 200)
sar = ta.sar(sar_start, sar_increment, sar_max)
atr = ta.atr(atr_length)
// Volatility Filter
atr_percentage = (atr / close) * 100
sufficient_volatility = not use_volatility_filter or (atr_percentage >= min_atr * 100)
// Range Detection Logic
range_high = ta.highest(high, range_length)
range_low = ta.lowest(low, range_length)
range_size = range_high - range_low
range_percentage = (range_size / close) * 100
range_condition = range_percentage <= (range_threshold * 100)
// Consecutive range bars counter
var int range_bars_count = 0
range_bars_count := range_condition ? range_bars_count + 1 : 0
in_range = range_bars_count >= min_range_bars
// Visualize Range
bgcolor(in_range ? color.new(color.purple, 85) : na, title="Range Zone")
plot(in_range ? range_high : na, "Range High", color=color.purple, linewidth=2, style=plot.style_linebr)
plot(in_range ? range_low : na, "Range Low", color=color.purple, linewidth=2, style=plot.style_linebr)
// Trading Conditions
buy_condition = (close > ema_high) and (close > ema_low)
sell_condition = (close < ema_high) and (close < ema_low)
// Apply Filters
buy_signal = buy_condition and not in_range and sufficient_volatility
sell_signal = sell_condition and not in_range and sufficient_volatility
// Trend State Machine
var int currentTrend = 0 // 0=neutral, 1=long, -1=short
var bool showBuy = false
var bool showSell = false
trendChanged = false
if buy_signal and currentTrend != 1
currentTrend := 1
trendChanged := true
showBuy := true
showSell := false
else if sell_signal and currentTrend != -1
currentTrend := -1
trendChanged := true
showBuy := false
showSell := true
// Reset signals
showBuy := nz(showBuy[1]) and not trendChanged ? false : showBuy
showSell := nz(showSell[1]) and not trendChanged ? false : showSell
// Plot Indicators
plot(ema_high, "EMA High", color=color.blue, linewidth=2)
plot(ema_low, "EMA Low", color=color.orange, linewidth=2)
plot(ema_200, "200 EMA", color=color.white, linewidth=3)
// Plot SAR with color coding
color sarColor = strategy.position_size > 0 ? color.red :
strategy.position_size < 0 ? color.green :
color.gray
plot(use_parabolic_sar ? sar : na, "SAR", style=plot.style_circles, color=sarColor, linewidth=2)
// Plot signals
plotshape(showBuy, title="Buy Signal", text="BUY", style=shape.labelup,
location=location.belowbar, color=color.green, textcolor=color.white, size=size.tiny)
plotshape(showSell, title="Sell Signal", text="SELL", style=shape.labeldown,
location=location.abovebar, color=color.red, textcolor=color.white, size=size.tiny)
// Strategy Logic
var float long_sl = na
var float long_tp = na
var float short_sl = na
var float short_tp = na
var float long_trail_stop = na
var float short_trail_stop = na
// Position Sizing with Volatility Scaling
position_size = use_volatility_filter ? math.min(100, 100 * (min_atr * 100) / atr_percentage) : 100
// Execute trades
if (showBuy)
// Calculate stop loss and take profit
long_sl := use_atr_stop ? close - atr * atr_mult : ema_low * (1 - sl_offset)
long_tp := close * (1 + tp_percent)
long_trail_stop := use_parabolic_sar ? sar : na
strategy.close("Short", comment="Exit Short")
strategy.entry("Long", strategy.long, qty=position_size)
// Set exit orders with toggle support
if use_stop_loss or use_take_profit
strategy.exit("Long SL/TP", "Long",
stop=use_stop_loss ? long_sl : na,
limit=use_take_profit ? long_tp : na)
if use_parabolic_sar
strategy.exit("Long SAR", "Long", stop=long_trail_stop)
alert("BUY: " + syminfo.ticker, alert.freq_once_per_bar)
if (showSell)
// Calculate stop loss and take profit
short_sl := use_atr_stop ? close + atr * atr_mult : ema_high * (1 + sl_offset)
short_tp := close * (1 - tp_percent)
short_trail_stop := use_parabolic_sar ? sar : na
strategy.close("Long", comment="Exit Long")
strategy.entry("Short", strategy.short, qty=position_size)
// Set exit orders with toggle support
if use_stop_loss or use_take_profit
strategy.exit("Short SL/TP", "Short",
stop=use_stop_loss ? short_sl : na,
limit=use_take_profit ? short_tp : na)
if use_parabolic_sar
strategy.exit("Short SAR", "Short", stop=short_trail_stop)
alert("SELL: " + syminfo.ticker, alert.freq_once_per_bar)
// Update SAR trailing stops
if barstate.isrealtime and use_parabolic_sar
if strategy.position_size > 0
strategy.exit("Long SAR", "Long", stop=long_trail_stop)
else if strategy.position_size < 0
strategy.exit("Short SAR", "Short", stop=short_trail_stop)
// Plot SL/TP levels with toggle support
plot(strategy.position_size > 0 and use_stop_loss ? long_sl : na, "Long Stop", color=color.red, style=plot.style_linebr, linewidth=2)
plot(strategy.position_size > 0 and use_take_profit ? long_tp : na, "Long Take Profit", color=color.green, style=plot.style_linebr, linewidth=2)
plot(strategy.position_size < 0 and use_stop_loss ? short_sl : na, "Short Stop", color=color.red, style=plot.style_linebr, linewidth=2)
plot(strategy.position_size < 0 and use_take_profit ? short_tp : na, "Short Take Profit", color=color.green, style=plot.style_linebr, linewidth=2)
// Plot SAR trailing stops
plot(strategy.position_size > 0 and use_parabolic_sar ? long_trail_stop : na,
"Long Trail Stop", color=color.orange, style=plot.style_circles, linewidth=2)
plot(strategy.position_size < 0 and use_parabolic_sar ? short_trail_stop : na,
"Short Trail Stop", color=color.orange, style=plot.style_circles, linewidth=2)
// Alerts
alertcondition(showBuy, title="Buy Alert", message="BUY: {{ticker}}")
alertcondition(showSell, title="Sell Alert", message="SELL: {{ticker}}")