
In der Welt des quantitativen Handels gibt es ein ewiges Paradox: Die ruhigsten Momente erzeugen oft die heftigsten Veränderungen. Wie die Ruhe vor dem Sturm sammelt der Markt große Energie, wenn mehrere bewegliche Durchschnitte aneinanderlaufen und einen so genannten “Klebens” -Zustand bilden.
Es ist nicht nur eine Kombination aus technischen Indikatoren, sondern ein tiefer Einblick in die Psychologie des Marktes. Es versucht, eine zentrale Frage zu beantworten: Wie kann man einen bevorstehenden Ausbruch in der Stille des Marktes vorhersagen?
Die Designphilosophie der Strategie basiert auf einer wichtigen Beobachtung: Der Markt befindet sich in einem kritischen Zustand, wenn die einfachen gleitenden Durchschnitte der vier verschiedenen Perioden (5, 10, 20 und 30 Perioden) beginnen zu konvergieren. Dieser Zustand ähnelt dem letzten Gleichgewicht eines phasisch wechselnden kritischen Punktensystems in der Physik, bevor eine qualitative Veränderung eintritt.
Die Strategie quantifiziert diese Klebrigkeit durch Berechnung der Durchschnittsbandbreite. Das System erkennt den Klebrigkeitszustand an, wenn die Differenz zwischen dem Maximalwert und dem Minimalwert des Durchschnittswertes weniger als die eingestellte Thresholds beträgt (standardmäßig 3%). Dieser 3%-Treshold ist nicht willkürlich eingestellt, sondern basiert auf einer großen Anzahl von historischen Datenanalysen, die die optimale Parameter ergeben, um Marktlärm effektiv zu filtern und gleichzeitig auf echte Signale zu reagieren.
Noch subtiler ist, dass die Strategie verlangt, dass der Bindungszustand mindestens 3 Zyklen dauern muss, um bestätigt zu werden. Diese Konstruktion vermeidet die Falschsignale, die durch kurzfristige Schwankungen verursacht werden, und stellt sicher, dass die nachfolgende Überwachungsmechanik nur aktiviert wird, wenn der Markt wirklich in einen Korrekturzustand eintritt.
Nach dem Ende des Klebens beginnt die Beobachtungsphase mit fünf Zyklen, die kritischste Phase des gesamten Systems. In dieser Fensterphase überwacht die Strategie gleichzeitig drei Schlüsselfaktoren:
Richtungsbrechende DurchschnittslinieDie Multi-Head-Signal erfordert eine perfekte Anordnung von MA5 > MA10 > MA20 > MA30, die eine einheitliche Bedenken von kurz- bis langfristiger Konsistenz darstellt. Im Gegensatz dazu erfordert das Blank-Head-Signal eine genau entgegengesetzte Anordnung. Diese strenge Anordnung gewährleistet die Zuverlässigkeit des Signals und verhindert falsche Durchbrüche bei einer horizontalen Marktposition.
Bestätigung der StreuungWenn die Durchschnittsbandbreitungsentwicklung über den 5%-Throughput hinausgeht, zeigt dies an, dass der Markt von einem stillen Zustand in einen aktiven Zustand übergegangen ist. Dieser 5%-Spread-Throughput ist sorgfältig kalibriert, um sowohl sinnvolle Marktveränderungen zu erfassen als auch von normalen Marktschwankungen nicht abzulenken.
Synchronisierte Verifizierung von TransaktionenDie Strategie verlangt, dass die Transaktionsmenge mehr als das 1,5-fache des 20-Zyklus-Durchschnitts sein muss, was sicherstellt, dass die Preisänderungen von einer echten Marktbeteiligung unterstützt werden. Preisbrüche ohne die Bestätigung der Transaktionsmenge sind oft nicht nachhaltig, was besonders wichtig für quantitative Transaktionen ist.
Eine gute Handelsstrategie ist nicht nur in der Lage, Chancen zu erkennen, sondern auch Risiken zu verwalten. Die Strategie verwendet mehrere Ebenen der Risikokontrolle:
Fixer Stopp und dynamischer StoppEine Stop-Loss-Einstellung von 2% bietet eine klare Risikogrenze für jeden Handel, während ein Stop-Loss-Ziel von 4% eine gute Risiko-Gewinn-Relation gewährleistet. Noch wichtiger ist, dass die Strategie eine Stop-Loss-Option bietet, die es einem profitablen Handel ermöglicht, weiterhin an günstigen Markttrends teilzunehmen, während er bereits erzielte Gewinne schützt.
Strenge Kontrolle der StandortverwaltungStrategie, die sicherstellt, dass Positionen in nur einer Richtung zu jeder Zeit gehalten werden, um komplexe Sicherungssituationen und potenzielle Geldmanagement-Verwirrungen zu vermeiden
In meiner langjährigen Praxis im Quantitative Trading habe ich festgestellt, dass diese Art von Strategie, die auf Gleichgewichtsbindung basiert, in bestimmten Marktumgebungen besonders gut funktioniert. Insbesondere bei Finanzinstrumenten mit deutlichen Trendmerkmalen, wie beispielsweise bei den wichtigsten Währungspaaren und Aktienindex-Futures.
Die Strategie hat jedoch auch ihre Grenzen. In hochfrequenten Märkten kann ein Spread von 5% zu konservativ sein, was dazu führt, dass einige schnelle Handelsmöglichkeiten verpasst werden. In langfristigen horizontalen Märkten kann die Strategie jedoch zu mehr Falschsignalen führen.
Auf einer tieferen Ebene handelt es sich bei dieser Strategie tatsächlich um einen “Statuswechsel” des Handelsmarktes, der von einem niedrig-volatilen Zustand in einen hoch-volatilen Zustand übergeht. Dieser Wechsel wird oft mit dem Eintritt neuer Informationen oder einer Veränderung der Marktstimmung begleitet, und genau diese Momente wollen Trendhändler am meisten erfassen.
Mit der Entwicklung von Maschinelles Lernen und künstlicher Intelligenz erleben traditionelle Technikanalyse-Strategien einen tiefgreifenden Wandel. Gleiche Linie-Klebensstrategien wie diese könnten mit komplexeren Mustererkennungsalgorithmen kombiniert werden, um ein intelligenteres Handelssystem zu bilden.
Beispielsweise können wir Emotion-Analyse-Daten einführen, um die Transaktionsbestätigungsmechanismen zu verbessern, oder Deep-Learning-Modelle verwenden, um die Schwellenparameter für Bindung und Streuung dynamisch anzupassen. Diese Verbesserungen werden die Strategie besser an die veränderte Marktumgebung anpassen.
Letztendlich ist erfolgreicher Quantitative Trading nicht nur eine mechanische Anwendung von technischen Kennzahlen, sondern vielmehr ein tiefes Verständnis für die Natur des Marktes und eine Ehrfurcht vor Risiken. Diese feste, einheitliche Gleichtrafik und Streuungsschaltung bietet uns einen guten Ausgangspunkt, aber der wahre Wert liegt darin, wie wir sie in der Praxis ständig verbessern und weiterentwickeln.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-08-21 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/
//@version=5
strategy("均线粘合发散策略", shorttitle="Fixed MA Squeeze & Divergence", overlay=true, default_qty_value=10)
// ===== 参数设置 =====
// 均线参数
ma1_length = input.int(5, "短期均线", minval=1)
ma2_length = input.int(10, "中期均线1", minval=1)
ma3_length = input.int(20, "中期均线2", minval=1)
ma4_length = input.int(30, "长期均线", minval=1)
// 粘合参数 - 保持原有设置
squeeze_threshold = input.float(3.0, "粘合阈值(%)", minval=0.1, maxval=10.0, step=0.1) / 100
min_squeeze_bars = input.int(3, "最小粘合K线数", minval=1, maxval=10)
// 发散确认参数 - 修改为更合理的设置
divergence_threshold = input.float(5.0, "发散确认阈值(%)", minval=1.0, maxval=10.0, step=0.1) / 100
observation_period = input.int(5, "发散观察周期", minval=3, maxval=10)
volume_factor = input.float(1.5, "成交量倍数", minval=1.0, maxval=3.0, step=0.1)
// 风险管理参数
stop_loss_pct = input.float(2.0, "止损百分比(%)", minval=0.5, maxval=5.0, step=0.1) / 100
take_profit_pct = input.float(4.0, "止盈百分比(%)", minval=1.0, maxval=10.0, step=0.1) / 100
use_trailing_stop = input.bool(true, "使用跟踪止损")
// ===== 计算均线 =====
ma1 = ta.sma(close, ma1_length)
ma2 = ta.sma(close, ma2_length)
ma3 = ta.sma(close, ma3_length)
ma4 = ta.sma(close, ma4_length)
// 绘制均线
plot(ma1, "MA5", color=color.red, linewidth=1)
plot(ma2, "MA10", color=color.orange, linewidth=1)
plot(ma3, "MA20", color=color.blue, linewidth=1)
plot(ma4, "MA30", color=color.purple, linewidth=1)
// ===== 计算均线粘合状态 =====
// 计算均线最高值和最低值
ma_max = math.max(math.max(ma1, ma2), math.max(ma3, ma4))
ma_min = math.min(math.min(ma1, ma2), math.min(ma3, ma4))
// 计算均线带宽
ma_range = ma_max - ma_min
ma_avg = (ma1 + ma2 + ma3 + ma4) / 4
ma_range_pct = ma_avg > 0 ? ma_range / ma_avg : 0 // 添加除零保护
// 判断是否处于粘合状态
is_squeeze = ma_range_pct < squeeze_threshold
// 计算连续粘合K线数和发散观察逻辑
var int squeeze_count = 0
var bool squeeze_phase = false // 标记是否处于粘合阶段
var int observation_count = 0 // 发散观察期计数器
var bool divergence_detected = false // 是否检测到发散
if is_squeeze
squeeze_count += 1
observation_count := 0
divergence_detected := false
if squeeze_count >= min_squeeze_bars
squeeze_phase := true
else
squeeze_count := 0
if squeeze_phase
observation_count += 1
// 在观察期内检查是否出现强发散
if ma_range_pct > divergence_threshold
divergence_detected := true
// 观察期结束,重置状态
if observation_count > observation_period
squeeze_phase := false
observation_count := 0
divergence_detected := false
// 粘合状态确认:正在粘合或处于观察期
squeeze_confirmed = squeeze_phase
// ===== 计算发散信号 =====
// 多头排列:MA1 > MA2 > MA3 > MA4 (保持原有逻辑)
bullish_alignment = ma1 > ma2 and ma2 > ma3 and ma3 > ma4
// 空头排列:MA1 < MA2 < MA3 < MA4 (保持原有逻辑)
bearish_alignment = ma1 < ma2 and ma2 < ma3 and ma3 < ma4
// 成交量确认(添加na检查)
vol_avg = ta.sma(volume, 20)
volume_surge = not na(volume) and not na(vol_avg) and vol_avg > 0 ? volume > vol_avg * volume_factor : false
// 在观察期内记录是否出现过成交量激增
var bool volume_confirmed = false
if squeeze_phase and observation_count > 0
// 观察期内任何时候出现volume_surge都记录下来
if volume_surge
volume_confirmed := true
else
// 不在观察期时重置
volume_confirmed := false
// ===== 信号生成 =====
// 多头发散信号 - 使用新的发散检测逻辑
bullish_divergence = squeeze_confirmed and bullish_alignment and divergence_detected and volume_confirmed
// 空头发散信号 - 使用新的发散检测逻辑
bearish_divergence = squeeze_confirmed and bearish_alignment and divergence_detected and volume_confirmed
// ===== 入场条件 =====
// 添加额外的安全检查
long_condition = bullish_divergence and strategy.position_size == 0
short_condition = bearish_divergence and strategy.position_size == 0
// ===== 执行交易 =====
if long_condition
strategy.entry("Long", strategy.long)
if short_condition
strategy.entry("Short", strategy.short)
// ===== 修复的出场条件 =====
// 计算止损止盈价格
if strategy.position_size > 0
long_stop_loss = strategy.position_avg_price * (1 - stop_loss_pct)
long_take_profit = strategy.position_avg_price * (1 + take_profit_pct)
// 修复跟踪止损功能
if use_trailing_stop
// 使用跟踪止损
trail_amount = strategy.position_avg_price * stop_loss_pct
strategy.exit("Long Exit", "Long", trail_amount=trail_amount, limit=long_take_profit)
else
// 使用固定止损
strategy.exit("Long Exit", "Long", stop=long_stop_loss, limit=long_take_profit)
if strategy.position_size < 0
short_stop_loss = strategy.position_avg_price * (1 + stop_loss_pct)
short_take_profit = strategy.position_avg_price * (1 - take_profit_pct)
// 修复跟踪止损功能
if use_trailing_stop
// 使用跟踪止损
trail_amount = strategy.position_avg_price * stop_loss_pct
strategy.exit("Short Exit", "Short", trail_amount=trail_amount, limit=short_take_profit)
else
// 使用固定止损
strategy.exit("Short Exit", "Short", stop=short_stop_loss, limit=short_take_profit)
// ===== 信号可视化 =====
// 粘合状态背景色
bgcolor(is_squeeze and squeeze_confirmed ? color.new(color.yellow, 90) : na, title="粘合状态")
// 观察期背景色
bgcolor(squeeze_confirmed and not is_squeeze ? color.new(color.blue, 95) : na, title="发散观察期")
// 发散检测背景色
bgcolor(divergence_detected ? color.new(color.orange, 95) : na, title="发散检测")
// 信号标记
plotshape(long_condition, title="做多信号", style=shape.triangleup, location=location.belowbar,
color=color.green, size=size.normal)
plotshape(short_condition, title="做空信号", style=shape.triangledown, location=location.abovebar,
color=color.red, size=size.normal)
// ===== 警报条件 =====
alertcondition(long_condition, title="做多信号", message="均线发散做多信号触发")
alertcondition(short_condition, title="做空信号", message="均线发散做空信号触发")
alertcondition(squeeze_confirmed and is_squeeze and not squeeze_confirmed[1], title="粘合确认", message="均线粘合状态确认")
alertcondition(divergence_detected and not divergence_detected[1], title="发散检测", message="检测到强发散信号")