
Die Multi-Time-Framework-Anpassung an die Marktmechanismen Quantitative Trading-Strategie ist ein hochentwickeltes Quantitative Trading-System, das auf der Basis von mehreren Kennzahlen einer umfassenden Analyse basiert und seine Trading-Strategie automatisch an unterschiedliche Marktbedingungen anpasst. Die Strategie nutzt künstliche Intelligenz, um sich an vier Marktmechanismen anzupassen: Trend-, Bandbreit-, Schwankungen- und Stillstands-Technologien und die Trading-Parameter an die Dynamik des aktuellen Marktzustands anzupassen. Die Kerntechnologien umfassen Multi-Time-Framework-Analyse, Graphik-Erkennung, Dynamische Risiken und die Verwaltung von selbstoptimierenden Algorithmen.
Das Herzstück der Strategie liegt in ihrem vielschichtigen Marktanalyse-Framework, das durch die Integration mehrerer technischer Indikatoren eine präzise Marktsituationserkennung und Signalgenerierung ermöglicht:
Moving-Average-SystemDie Verwendung von schnellen und langsamen Moving Averages (EMA) bestimmt die Richtung der Trends und erhöht die Genauigkeit der Beurteilung in Kombination mit ATR-Thresholds.
Mehrfache ZeitrahmenbestätigungDie Strategie legt besonderen Wert auf die Trendbestätigung in hohen Zeitrahmen und verwendet die Kreuzungspunkte von HTF_RSI und HTF_MACD als Kraftfilter.
Algorithmen zur Identifizierung von Marktmechanismen:
Die Formerkennung und die MengenbestätigungDie Strategie erkennt verschiedene hochwahrscheinliche Graphikformate, darunter bullish-swallowing-Formen, Rabbit-Linien, Morgenstern-Formen, Durchschnittslinien, Doppelböden und deren bullish-konvergente Formen. Jede Form erfordert eine Verstärkung der Transaktionsmenge und erhöht die Signalsicherheit.
Mehrfacher Bewertungssystem: Komplexe Bewertung der technischen Indikatoren, der Formerkennung und der Transaktionsmenge, um einen Komplex-Score zu erzeugen. Kaufsignale erfordern einen Stiermarkt-Score ≥1.0, Verkaufssignale erfordern einen Bärenmarkt-Score ≥1.0。
Dynamische Stop-Loss und Tracking Stop-LossDie Stop-Loss-Distanz wird automatisch an die ATR-Werte angepasst, wird bei steigender Volatilität erweitert und bei sinkender Volatilität verkürzt.
Autoptimierte Performance-TrackingDas System zeichnet die Performance von Transaktionen unter verschiedenen Marktmechanismen auf, um die Handelsparameter und die Bewertungsschwellen anzupassen und die Strategie für die Optimierung der Anpassung zu optimieren.
Marktweite AnpassungsfähigkeitDer größte Vorteil dieser Strategie ist die Fähigkeit, vier verschiedene Marktzustände automatisch zu identifizieren und anzupassen, wodurch die Einschränkungen einer einzigen Strategie in einem wechselnden Marktumfeld vermieden werden. Das System kann die Parameter und die Signalmargin entsprechend anpassen, unabhängig davon, ob sich der Markt in einem starken Trend, einer horizontalen Korrektur, einer hohen oder niedrigen Volatilität befindet.
Mehrfache ZeitrahmenbestätigungDie Strategie verbessert die Signalqualität erheblich durch die Integration von Messwerten mit höheren Zeitzyklen. Diese “Top-down”-Analysemethode filtert die niedrigen Qualitätssignale effektiv aus und reduziert die Anzahl der Falschbrüche und der Noise-Trading.
Erweiterte FormerkennungDiese Formen sind besonders effektiv, wenn sie in der Nähe von Unterstützungs- und Widerstandspunkten auftreten und mit einer Erhöhung des Umsatzes einhergehen.
Dynamische RisikomanagementDie ATR-basierte Stop-Loss- und Tracking-Stop-Mechanismen sorgen dafür, dass das Risikomanagement automatisch an die Marktvolatilität angepasst wird. Diese Methode ermöglicht es, dass profitable Positionen fortgeführt werden, während die Kapital zu schützen und die Risikobereitschaft zu optimieren.
SelbstoptimierungsmechanismenDie Strategie kann die Performance unter verschiedenen Marktmechanismen dokumentieren, um Feedback und Anpassungsgrundlagen für zukünftige Geschäfte zu liefern und sich ständig zu verbessern.
Visuelle ÜberwachungDie Farbcodierten Hintergrund- und Performance-Dashboards ermöglichen den Händlern eine intuitive Kenntnis der aktuellen Marktsituation, der Strategie-Performance und der wichtigsten Kennzahlen, wodurch die Transparenz erhöht wird.
ParameterempfindlichkeitDie Strategie verwendet mehrere Parameter und Thresholds für die Identifizierung von Marktmechanismen und die Signalerzeugung. Die Einstellungen dieser Parameter müssen sorgfältig angepasst werden, da dies zu einer Fehleinschätzung der Marktlage oder zur Erstellung falscher Signale führen kann. Besonders wichtige Thresholds wie ADX, ATR-Ratio und Brin-Bandbreite müssen entsprechend den Eigenschaften der verschiedenen Handelsarten optimiert werden.
RechenkomplexitätDie Komplexität der Strategie wird durch die vielschichtige Berechnung von Kennzahlen und logischen Urteilen erhöht, was zu einer Verlangsamung der Rückmessung und der Echtzeitdurchführung führen kann, insbesondere bei niedrigen Zeitzyklen oder hochfrequenten Handelsumgebungen.
Verzögerung bei der MarktumstellungObwohl Strategien entwickelt wurden, um verschiedene Marktzustände zu identifizieren, kann der Marktwechselprozess nicht augenblicklich sein, sondern allmählich. Während des Wandels kann die Strategie Gefahr von Fehleinschätzungen und falschen Signalen haben.
Übermäßige Abhängigkeit von technischen IndikatorenDie Strategie basiert hauptsächlich auf technischen Indikatoren und Preisverhältnissen ohne Berücksichtigung von Fundamentaldaten und Marktstimmung. Rein technische Analyse kann bei wichtigen Nachrichten oder schwarzen Schwimmereignissen außer Kraft gesetzt werden.
AbweichungenAufgrund der Komplexität und Anpassungsfähigkeit der Strategie besteht die Gefahr, dass die historischen Daten zu stark angepasst werden, was zu einer schlechteren tatsächlichen Performance führen kann als die Rückmeldung.
KapitalbedarfDynamische Risikomanagement-Mechanismen können unter bestimmten Marktbedingungen eine größere Stop-Loss-Distanz erfordern, die ausreichend Handelskapital erfordert, um ein angemessenes Risiko zu halten.
Maschinelles Lernen verstärktDie Implementierung kann die Verwendung von Zufallswäldern oder die Unterstützung von Vektormaschinen für die Klassifizierung von Marktzuständen, die Verwendung von Neuralnetzwerken zur Optimierung der Kennwertgewichte umfassen.
Integration der Emotionsindikatoren: Einführung von Market Sentiment Indicators (wie VIX, Bear/Bewert Options Ratio, Social Media Sentiment Analysis, etc.) als zusätzliche Bestätigungsebene. Market Sentiment-Daten können als führende Indikatoren verwendet werden, um Marktwendepunkte vorherzusagen.
Integration der BasisdatenDie Entwicklung eines Rahmens zur Integration von wichtigen Fundamentaldaten wie Kalenderereignissen, Ergebnisberichten oder wichtigen Pressemitteilungen. Dies hilft, die Risikoabschnitte vor wichtigen Ankündigungen zu korrigieren und Verluste durch unerwartete Schwankungen zu vermeiden.
ZeitfilterEs ist besonders wichtig für den Handel zwischen den Märkten, um zu verhindern, dass sich die Märkte in Asien, Europa und den USA überschneiden.
Modul zur Relevanzanalyse: Hinzufügung von Analysemöglichkeiten für die Korrelation zwischen den verschiedenen Assets, die Identifizierung von Mehrmarktmustern und die Verbreitung von Signalen. Zum Beispiel kann die Korrelation zwischen Währungspaaren, die Beziehung zwischen den Aktienindizes und VIX zusätzliche Transaktionsbestätigungen liefern.
Optimierung der dynamischen PositionsgrößePositionsgrößen werden automatisch an die aktuellen Marktmechanismen und die historische Performance angepasst. Die Risikobereitschaft kann bei gut funktionierenden Marktmechanismen erhöht und bei Unsicherheit oder schlechter historischer Performance verringert werden.
Hardware-OptimierungEs kann in Betracht gezogen werden, die Logik teilweise umzuschreiben, um effizientere Algorithmen und Datenstrukturen zu verwenden.
Die Multi-Time-Framework-Anpassung an die Marktmechanismen Quantitative Trading-Strategie stellt eine wichtige Innovation des Quantitative Trading-Systems dar, das die Identifizierung von Marktmechanismen, die Analyse von Multi-Time-Frameworks, die Gestaltungserkennung und das dynamische Risikomanagement miteinander verbindet. Ihre Anpassungsfähigkeit und die umfassende Integration von technischen Indikatoren ermöglichen es, in verschiedenen Marktumgebungen wettbewerbsfähig zu bleiben und sich nicht nur auf eine einzelne Marktlage zu beschränken.
Der wahre Wert der Strategie liegt in ihrer Gesamtheit und nicht in ihren einzelnen Komponenten. Durch die Synergie von Markteinweisung, Multi-Time-Frame-Bestätigung, Gestaltungs-Erkennung und dynamischem Risikomanagement kann die Strategie hochwertige Signale erzeugen und Risiken effektiv verwalten. Diese mehrschichtige Methode reduziert Fehlsignale und erhöht die allgemeine Stabilität.
Die Strategie ist jedoch auch mit Herausforderungen konfrontiert, wie Parameter-Sensitivität, Rechenkomplexität und potenzielle Überfusion. Händler sollten diese Risiken bei der Anwendung der Strategie beachten und umfangreiche Parameteroptimierungen und Tests vornehmen.
Die zukünftigen Optimierungsrichtungen umfassen die Erweiterung des maschinellen Lernens, die Integration der Emotion-Indikatoren und die dynamische Anpassung der Positionsgröße. Diese Verbesserungen werden die Anpassungsfähigkeit und Stabilität der Strategie weiter verbessern und sie zu einem umfassenderen Handelssystem machen. Insgesamt bietet die Strategie einen starken Rahmen, der an die Risikopräferenzen und die Marktansichten der Händler angepasst und erweitert werden kann.
/*backtest
start: 2025-04-13 00:00:00
end: 2025-04-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"TRX_USD"}]
*/
//@version=6
strategy("Dskyz (DAFE) AI Adaptive Regime - Pro", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1, calc_on_order_fills=true, calc_on_every_tick=true)
// This script uses higher timeframe values for RSI/MACD, integrated into regime detection and scoring.
// Logic uses closed HTF bars to avoid repainting.
// D=====================================================Z
// 1. ATR SETTINGS==Z
// D=====================================================Z
group_atr = "⚡ ATR Settings"
atr_period = input.int(14, "ATR Period", minval=1, group=group_atr)
atr_multiplier = input.float(1.5, "ATR Multiplier", minval=0.1, step=0.1, group=group_atr)
atr_val = ta.atr(atr_period)
atr_avg = ta.sma(atr_val, 50)
// D=====================================================Z
// 2. MOVING AVERAGE (MA) SETTINGS==Z
// D=====================================================Z
group_ma = "📊 Moving Averages"
fast_ma_length = input.int(9, "Fast MA Length", minval=1, group=group_ma)
slow_ma_length = input.int(34, "Slow MA Length", minval=1, group=group_ma)
ma_fast = ta.ema(close, fast_ma_length)
ma_slow = ta.ema(close, slow_ma_length)
ma_strength_threshold = input.float(0.5, "MA Strength Threshold", minval=0.0, step=0.1, group=group_ma)
trend_dir = ma_fast > ma_slow + (atr_val * ma_strength_threshold) ? 1 : ma_fast < ma_slow - (atr_val * ma_strength_threshold) ? -1 : 0
// D=====================================================Z
// 3. MULTI-TIMEFRAME (HTF) SETTINGS==Z
// D=====================================================Z
group_MTA = "⏱️ Multi-Timeframe Inputs"
htf = input.timeframe("D", "HTF for RSI & MACD", group=group_MTA)
htf_rsi_raw = request.security(syminfo.tickerid, htf, ta.rsi(close, 14))
htf_rsi = htf_rsi_raw[1]
[htf_macd_line_raw, htf_macd_signal_raw, htf_macd_hist_raw] = request.security(syminfo.tickerid, htf, ta.macd(close, 12, 26, 9))
htf_macd_line = htf_macd_line_raw[1]
htf_macd_signal = htf_macd_signal_raw[1]
htf_macd_hist = htf_macd_hist_raw[1]
// new: HTF trend direction for regime detection
htf_trend_bull = htf_macd_line > htf_macd_signal and htf_rsi > 50
htf_trend_bear = htf_macd_line < htf_macd_signal and htf_rsi < 50
// D=====================================================Z
// 4. TRADE SETTINGS==Z
// D=====================================================Z
group_trade = "⚙️ Trade Settings"
risk_per_trade = input.int(500, "Risk per Trade ($)", minval=50, group=group_trade)
max_contracts = input.int(5, "Max Contracts", minval=1, group=group_trade)
max_daily_drawdown = input.float(0.05, "Max Daily Drawdown (%)", minval=0.01, group=group_trade)
tick_value = input.float(12.5, "Tick Value ($)", minval=0.01, group=group_trade)
ticks_per_point = input.int(4, "Ticks per Point", minval=1, group=group_trade)
default_stop_points = input.float(8.0, "Default Stop (Points)", minval=0.25, group=group_trade)
// D=====================================================Z
// 5. ADVANCED INDICATOR CALCULATIONS==Z
// D=====================================================Z
// --- ADX Calculation ---Z
adx_len = 14
up = ta.change(high)
down = -ta.change(low)
plus_dm = na(up) ? na : (up > down and up > 0 ? up : 0)
minus_dm = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = ta.rma(ta.tr, adx_len)
plus_di = 100 * ta.rma(plus_dm, adx_len) / trur
minus_di = 100 * ta.rma(minus_dm, adx_len) / trur
adx_val = 100 * ta.rma(math.abs(plus_di - minus_di) / (plus_di + minus_di), adx_len)
// --- Bollinger Bands Calculation ---Z
bb_basis = ta.sma(close, 20)
bb_dev = 2 * ta.stdev(close, 20)
bb_upper = bb_basis + bb_dev
bb_lower = bb_basis - bb_dev
bb_width = (bb_upper - bb_lower) / bb_basis
bb_width_avg = ta.sma(bb_width, 50)
// --- Price Action Range ---Z
price_range = ta.highest(high, 20) - ta.lowest(low, 20)
range_ratio = price_range / close
// D=====================================================Z
// 6. REGIME ASSIGNMENT & PATTERN RECOGNITION==Z
// D=====================================================Z
// Regime assignment with HTF influence and looser thresholds
is_trending = adx_val > 20 and math.abs(ma_fast - ma_slow) > atr_val * 0.3 and htf_trend_bull or htf_trend_bear // loosened ADX and MA thresholds, added HTF
is_range = adx_val < 25 and range_ratio < 0.03 and not htf_trend_bull and not htf_trend_bear // loosened ADX and range, HTF neutral
is_volatile = bb_width > bb_width_avg * 1.5 and atr_val > atr_avg * 1.2 and (htf_rsi > 70 or htf_rsi < 30) // loosened BB/ATR, added HTF overbought/oversold
is_quiet = bb_width < bb_width_avg * 0.8 and atr_val < atr_avg * 0.9 // loosened BB/ATR
regime = is_trending ? 1 : is_range ? 2 : is_volatile ? 3 : is_quiet ? 4 : 5
regime_name = regime == 1 ? "Trending" : regime == 2 ? "Range" : regime == 3 ? "Volatile" : regime == 4 ? "Quiet" : "Other"
// Pattern Recognition & Volume Confirmation-Z
vol_avg = ta.sma(volume, 20)
vol_spike = volume > vol_avg * 1.5
recent_low = ta.lowest(low, 20)
recent_high = ta.highest(high, 20)
is_near_support = low <= recent_low * 1.01
is_near_resistance = high >= recent_high * 0.99
bullish_engulfing = close[1] < open[1] and close > open and close > open[1] and open < close[1] and is_near_support and vol_spike
hammer = high - low > 3 * math.abs(open - close) and (close - low) / (0.001 + high - low) > 0.6 and is_near_support and vol_spike
morning_star = close[2] < open[2] and math.abs(close[1] - open[1]) < 0.2 * (high[1] - low[1]) and close > open and close > (open[2] + close[2]) / 2 and is_near_support and vol_spike
piercing = close[1] < open[1] and close > open and close > (open[1] + close[1]) / 2 and open < close[1] and is_near_support and vol_spike
double_bottom = low < low[1] and low[1] > low[2] and low[2] < low[3] and close > open and is_near_support and vol_spike
bearish_engulfing = close[1] > open[1] and close < open and close < open[1] and open > close[1] and is_near_resistance and vol_spike
shooting_star = high - low > 3 * math.abs(open - close) and (high - close) / (0.001 + high - low) > 0.6 and is_near_resistance and vol_spike
evening_star = close[2] > open[2] and math.abs(close[1] - open[1]) < 0.2 * (high[1] - low[1]) and close < open and close < (open[2] + close[2]) / 2 and is_near_resistance and vol_spike
dark_cloud = close[1] > open[1] and close < open and close < (open[1] + close[1]) / 2 and open > close[1] and is_near_resistance and vol_spike
double_top = high > high[1] and high[1] < high[2] and high[2] > high[3] and close < open and is_near_resistance and vol_spike
bull_signal = (bullish_engulfing ? 0.5 : 0.0) +
(hammer ? (regime == 2 ? 0.4 : 0.2) : 0.0) +
(morning_star ? 0.2 : 0.0) +
(piercing ? 0.2 : 0.0) +
(double_bottom ? (regime == 3 ? 0.3 : 0.15) : 0.0)
bear_signal = (bearish_engulfing ? 0.5 : 0.0) +
(shooting_star ? (regime == 2 ? 0.4 : 0.2) : 0.0) +
(evening_star ? 0.2 : 0.0) +
(dark_cloud ? 0.2 : 0.0) +
(double_top ? (regime == 3 ? 0.3 : 0.15) : 0.0)
// Multi-Factor Confirmation with HTF-Z
rsi_val = ta.rsi(close, 14)
[macd_line, macd_signal, macd_hist] = ta.macd(close, 12, 26, 9)
trend_bull = ma_fast > ma_slow
trend_bear = ma_fast < ma_slow
rsi_bull = rsi_val < 30
rsi_bear = rsi_val > 70
macd_bull = macd_line > macd_signal
macd_bear = macd_line < macd_signal
vol_expansion = atr_val > atr_avg * 1.2
// new: HTF confirmation for scoring
htf_bull_confirm = htf_trend_bull and htf_rsi < 70
htf_bear_confirm = htf_trend_bear and htf_rsi > 30
bull_score = bull_signal + (trend_bull ? 0.2 : 0) + (rsi_bull ? 0.15 : 0) + (macd_bull ? 0.15 : 0) + (vol_expansion ? 0.1 : 0) + (htf_bull_confirm ? 0.2 : 0)
bear_score = bear_signal + (trend_bear ? 0.2 : 0) + (rsi_bear ? 0.15 : 0) + (macd_bear ? 0.15 : 0) + (vol_expansion ? 0.1 : 0) + (htf_bear_confirm ? 0.2 : 0)
// D=====================================================Z
// 7. PERFORMANCE TRACKING & ADAPTIVE THRESHOLDS==Z
// D=====================================================Z
var float[] regime_pnl_long = array.new_float(5, 0)
var float[] regime_pnl_short = array.new_float(5, 0)
var int[] regime_win_long = array.new_int(5, 0)
var int[] regime_loss_long = array.new_int(5, 0)
var int[] regime_win_short = array.new_int(5, 0)
var int[] regime_loss_short = array.new_int(5, 0)
var int entry_regime = na
if barstate.isconfirmed and strategy.closedtrades > 0 and not na(entry_regime)
last_trade_profit = strategy.closedtrades.profit(strategy.closedtrades - 1)
last_trade_entry_id = strategy.closedtrades.entry_id(strategy.closedtrades - 1)
idx = entry_regime - 1
if last_trade_entry_id == "Long"
array.set(regime_pnl_long, idx, array.get(regime_pnl_long, idx) + last_trade_profit)
if last_trade_profit > 0
array.set(regime_win_long, idx, array.get(regime_win_long, idx) + 1)
else
array.set(regime_loss_long, idx, array.get(regime_loss_long, idx) + 1)
else if last_trade_entry_id == "Short"
array.set(regime_pnl_short, idx, array.get(regime_pnl_short, idx) + last_trade_profit)
if last_trade_profit > 0
array.set(regime_win_short, idx, array.get(regime_win_short, idx) + 1)
else
array.set(regime_loss_short, idx, array.get(regime_loss_short, idx) + 1)
entry_regime := na
// D=====================================================Z
// 8. DRAWDOWN & CIRCUIT BREAKER==Z
// D=====================================================Z
var float max_equity = strategy.equity
if strategy.equity > max_equity
max_equity := strategy.equity
daily_drawdown = (max_equity - strategy.equity) / max_equity
pause_trading = daily_drawdown > max_daily_drawdown
// D=====================================================Z
// 9. ENTRY & EXIT LOGIC WITH DYNAMIC STOPS & TRAILING STOPS=Z
// D=====================================================Z
swing_low = ta.lowest(low, 5)
swing_high = ta.highest(high, 5)
long_condition = bull_score >= 1.0 and not pause_trading
short_condition = bear_score >= 1.0 and not pause_trading
var float trail_stop_long = na
var float trail_stop_short = na
var float long_stop_price = na
var float long_limit_price = na
var float short_stop_price = na
var float short_limit_price = na
if long_condition and strategy.position_size <= 0
intended_stop = swing_low - atr_multiplier * atr_val
stop_distance_points = close - intended_stop
risk_per_contract = stop_distance_points * syminfo.pointvalue
contracts = math.floor(risk_per_trade / risk_per_contract)
contracts := contracts > 0 ? contracts : 1
contracts := math.min(contracts, max_contracts)
long_limit = close + stop_distance_points * 2
strategy.entry("Long", strategy.long, qty = contracts)
strategy.exit("Exit", from_entry = "Long", stop = intended_stop, limit = long_limit)
long_stop_price := intended_stop
long_limit_price := long_limit
trail_stop_long := intended_stop
entry_regime := regime
if short_condition and strategy.position_size >= 0
intended_stop = swing_high + atr_multiplier * atr_val
stop_distance_points = intended_stop - close
risk_per_contract = stop_distance_points * syminfo.pointvalue
contracts = math.floor(risk_per_trade / risk_per_contract)
contracts := contracts > 0 ? contracts : 1
contracts := math.min(contracts, max_contracts)
short_limit = close - stop_distance_points * 2
strategy.entry("Short", strategy.short, qty = contracts)
strategy.exit("Exit", from_entry = "Short", stop = intended_stop, limit = short_limit)
short_stop_price := intended_stop
short_limit_price := short_limit
trail_stop_short := intended_stop
entry_regime := regime
if strategy.position_size > 0
if close > long_limit_price * 0.5
trail_stop_long := math.max(trail_stop_long, close - atr_val * atr_multiplier)
strategy.exit("Long Trailing Stop", from_entry = "Long", stop = trail_stop_long)
if strategy.position_size < 0
if close < short_limit_price * 0.5
trail_stop_short := math.min(trail_stop_short, close + atr_val * atr_multiplier)
strategy.exit("Short Trailing Stop", from_entry = "Short", stop = trail_stop_short)
if strategy.position_size == 0
long_stop_price := na
long_limit_price := na
short_stop_price := na
short_limit_price := na
// D=====================================================Z
// 10. VISUALIZATION==Z
// D=====================================================Z
bgcolor(regime == 1 ? color.new(color.green, 85) :
regime == 2 ? color.new(color.orange, 85) :
regime == 3 ? color.new(color.red, 85) :
regime == 4 ? color.new(color.gray, 85) :
color.new(color.navy, 85))
plotshape(long_condition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Long Signal")
plotshape(short_condition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, title="Short Signal")
plot(ma_fast, "Fast MA", color=color.new(color.blue, 0), linewidth=2)
plot(ma_slow, "Slow MA", color=color.new(color.red, 0), linewidth=2)
plot(strategy.position_size > 0 ? long_stop_price : na, "Long Stop", color=color.new(color.red, 0), style=plot.style_linebr)
plot(strategy.position_size > 0 ? long_limit_price : na, "Long Target", color=color.new(color.green, 0), style=plot.style_linebr)
plot(strategy.position_size < 0 ? short_stop_price : na, "Short Stop", color=color.new(color.red, 0), style=plot.style_linebr)
plot(strategy.position_size < 0 ? short_limit_price : na, "Short Target", color=color.new(color.green, 0), style=plot.style_linebr)
// D=====================================================Z
// 11. DASHBOARD: METRICS TABLE (Bottom-Left)=Z
// D=====================================================Z
var table dashboard = table.new(position.bottom_left, 2, 13, bgcolor=color.new(#000000, 29), border_color=color.rgb(80,80,80), border_width=1)
if barstate.islast
table.cell(dashboard, 0, 0, "⚡(DAFE) AI Adaptive Regime™", text_color=color.rgb(96,8,118), text_size=size.small)
modeStr = pause_trading ? "Paused" : "Active"
table.cell(dashboard, 0, 1, "Mode:", text_color=color.white, text_size=size.small)
table.cell(dashboard, 1, 1, modeStr, text_color=color.white, text_size=size.small)
trendText = trend_dir == 1 ? "Bullish" : trend_dir == -1 ? "Bearish" : "Neutral"
table.cell(dashboard, 0, 2, "Trend:", text_color=color.white, text_size=size.small)
table.cell(dashboard, 1, 2, trendText, text_color=trend_dir == 1 ? color.green : trend_dir == -1 ? color.red : color.gray, text_size=size.small)
table.cell(dashboard, 0, 3, "ATR:", text_color=color.white, text_size=size.small)
table.cell(dashboard, 1, 3, str.tostring(atr_val, "#.##"), text_color=color.white, text_size=size.small)
table.cell(dashboard, 0, 4, "ATR Avg:", text_color=color.white, text_size=size.small)
table.cell(dashboard, 1, 4, str.tostring(atr_avg, "#.##"), text_color=color.white, text_size=size.small)
table.cell(dashboard, 0, 5, "Volume Spike:", text_color=color.white, text_size=size.small)
table.cell(dashboard, 1, 5, vol_spike ? "YES" : "NO", text_color=vol_spike ? color.green : color.red, text_size=size.small)
table.cell(dashboard, 0, 6, "RSI:", text_color=color.white, text_size=size.small)
table.cell(dashboard, 1, 6, str.tostring(rsi_val, "#.##"), text_color=color.white, text_size=size.small)
rsiCondText = rsi_val < 30 ? "Oversold" : rsi_val > 70 ? "Overbought" : "Neutral"
table.cell(dashboard, 0, 7, "RSI Cond:", text_color=color.white, text_size=size.small)
table.cell(dashboard, 1, 7, rsiCondText, text_color=color.white, text_size=size.small)
table.cell(dashboard, 0, 8, "HTF RSI:", text_color=color.white, text_size=size.small)
table.cell(dashboard, 1, 8, str.tostring(htf_rsi, "#.##"), text_color=color.white, text_size=size.small)
htfTrendText = htf_trend_bull ? "Bullish" : htf_trend_bear ? "Bearish" : "Neutral"
table.cell(dashboard, 0, 9, "HTF Trend:", text_color=color.white, text_size=size.small)
table.cell(dashboard, 1, 9, htfTrendText, text_color=htf_trend_bull ? color.green : htf_trend_bear ? color.red : color.gray, text_size=size.small)
lastSignal = long_condition ? "Buy" : short_condition ? "Sell" : "None"
table.cell(dashboard, 0, 10, "Last Signal:", text_color=color.white, text_size=size.small)
table.cell(dashboard, 1, 10, lastSignal, text_color=long_condition ? color.green : short_condition ? color.red : color.white, text_size=size.small)
table.cell(dashboard, 0, 11, "Regime:", text_color=color.white, text_size=size.small)
table.cell(dashboard, 1, 11, regime_name, text_color=color.white, text_size=size.small)
table.cell(dashboard, 0, 12, "Bull Score:", text_color=color.white, text_size=size.small)
table.cell(dashboard, 1, 12, str.tostring(bull_score, "#.##"), text_color=color.white, text_size=size.small)
// D=====================================================Z
// REGIME CONDITIONS
// D=====================================================Z
var table debug_table = table.new(position.top_right, 2, 5, bgcolor=color.new(#000000, 50), border_color=color.rgb(80,80,80), border_width=1)
if barstate.islast
table.cell(debug_table, 0, 0, "Regime Conditions", text_color=color.rgb(96,8,118), text_size=size.small)
table.cell(debug_table, 0, 1, "ADX:", text_color=color.white, text_size=size.small)
table.cell(debug_table, 1, 1, str.tostring(adx_val, "#.##"), text_color=color.white, text_size=size.small)
table.cell(debug_table, 0, 2, "BB Width Ratio:", text_color=color.white, text_size=size.small)
table.cell(debug_table, 1, 2, str.tostring(bb_width / bb_width_avg, "#.##"), text_color=color.white, text_size=size.small)
table.cell(debug_table, 0, 3, "ATR Ratio:", text_color=color.white, text_size=size.small)
table.cell(debug_table, 1, 3, str.tostring(atr_val / atr_avg, "#.##"), text_color=color.white, text_size=size.small)
table.cell(debug_table, 0, 4, "Range Ratio:", text_color=color.white, text_size=size.small)
table.cell(debug_table, 1, 4, str.tostring(range_ratio, "#.##"), text_color=color.white, text_size=size.small)
// --- Bollinger Bands Visuals ---Z
p_bb_basis = plot(bb_basis, title="BB Basis", color=color.new(#ffffff, 50), linewidth=1)
p_bb_upper = plot(bb_upper, title="BB Upper", color=color.new(#4caf4f, 45), linewidth=2)
p_bb_lower = plot(bb_lower, title="BB Lower", color=color.new(#ff5252, 45), linewidth=2)
fill(p_bb_upper, p_bb_lower, color=color.new(#423645, 65))
//D=================================================================Z
// DASHBOARD: WATERMARK LOGO (Bottom-Right)
//D=================================================================Z
var table watermarkTable = table.new(position.bottom_right, 1, 1, bgcolor=color.rgb(0,0,0,80), border_color=color.rgb(0,50,137), border_width=1)
if barstate.islast
table.cell(watermarkTable, 0, 0, "⚡ Dskyz (DAFE) AI Adaptive Regime - Pro", text_color=color.rgb(96,8,118), text_size=size.normal)
// --- ALERTS ---Z
alertcondition(long_condition, title="Long Signal Alert", message="Enhanced Strategy Long Signal")
alertcondition(short_condition, title="Short Signal Alert", message="Enhanced Strategy Short Signal")