
Die Strategie basiert auf der Heikin Ashi Grafiktechnologie, um Marktlärm zu filtern, kombiniert mit einem Tracking Stop-Loss-System, das durch die dynamische Anpassung der mittleren realen Breite der ATR-Wellenlänge angepasst wird, um ein Handelssignal durch die Überschneidung des Index Moving Average EMA zu erzeugen. Die Strategie führt nur Mehrkopfgeschäfte aus und erhöht die Signalstabilität und -verwaltung durch Komponenten, die an die Volatilität angepasst sind. Die Strategie ist speziell für hochvolatile Märkte wie Kryptowährungen geeignet und eignet sich auch für Trader, die systematische Trends verfolgen.
Die Kernprinzipien der Strategie basieren auf der Synergie mehrerer wichtiger technischer Komponenten:
Haiken Achim filtert sichDie Strategie bietet drei verschiedene Heiken-Asch-Rechenmodelle: manuelle Berechnung, die eingebaute TradingView-Funktion und die regelmäßige Abbildung, um den kurzfristigen Marktrauschen zu mildern und die potenzielle Trendrichtung hervorzuheben. Die manuelle Berechnung bietet die transparentesten und zuverlässigsten Ergebnisse, während die eingebaute Funktion die bestätigten historischen Säulen verwendet, um eine Überzeichnung zu verhindern.
ATR verfolgt die Stop-Loss-MechanismenDer ATR dient als dynamischer Maßstab für die Marktvolatilität, der die Sensitivität von Stop-Loss-Tracking in Kombination mit benutzerdefinierten Parametern (Key Value und ATR-Periode) kalibriert, so dass er sich an unterschiedliche Umgebungen mit Marktvolatilität anpasst. Dieser Mechanismus dient dazu, dynamische Ausstiegspunkte bereitzustellen, um Kapital zu schützen und Gewinne während der Entwicklung von Trends zu sperren.
EMA-Kreuzsignale erzeugtEintritts- und Ausstiegssignale werden durch die Wechselwirkung zwischen dem Heiken-Ash-Preis und dem Index-Moving-Average (EMA) erzeugt. Die Kreuzung zwischen diesen beiden Komponenten wird verwendet, um die Bewegungsschwankungen objektiv zu identifizieren und ein potenzielles Mehrkopf-Eintritts- oder Ausstiegssignal zu erzeugen.
Strenge Einführung von Stop LossesDie Strategie beinhaltet eine optionale Stop-Funktion, die als Prozentsatz des Einstiegspreises oder als feste Punkte-Abweichung konfiguriert werden kann. Wichtig ist, dass die Stop-Funktion auf dem tatsächlichen Marktpreis basiert, nicht auf synthetischen Heiken-Aschlüssen, um sicherzustellen, dass die Risikomanagement auf der tatsächlichen Marktliquidität und dem Preisniveau basiert.
RückmeldungsprotokollDie Strategie ist als Realistic Retracement konfiguriert, verwendet Fill_orders_on_standard_ohlc=true, um die Ausführung von Aufträgen zu Standard-OHLC-Preisen zu simulieren, und enthält einen konfigurierbaren Datumsfilter, um eine bestimmte historische Periode für die Leistungsbewertung zu definieren.
DatenvisualisierungDas Skript bietet Kauf-/Verkaufsignale, ATR-Tracking- und Stop-Loss-Level-Grafiküberlagerungen sowie Informationstabellen, die Echtzeit-Strategieparameter, den aktuellen Stand der Positionen, die Trendrichtung und die kritischen Preisniveaus anzeigen.
LärmfilterfähigkeitDie Technik filtert kurzfristige Marktgeräusche und hilft Händlern, sich auf wichtige Markttrends zu konzentrieren und falsche Signalstörungen zu reduzieren.
Dynamische RisikomanagementDer ATR-basierte Tracking-Stop-Mechanismus ist in der Lage, sich automatisch an die Marktvolatilität anzupassen, einen lockeren Stop-Loss zu bieten, wenn die Volatilität zunimmt, die Absicherung zu verschärfen, wenn die Volatilität nachlässt, und die Rentabilität des Risikos zu optimieren.
Objektive Ein- und AusstiegssignaleDie Signalgebung durch EMA-Kreuzung beseitigt subjektive Urteile, macht Handelsentscheidungen systematischer und wiederholbarer und hilft, emotionale Disziplin zu bewahren.
RealmarktpreisdurchführungStrategie: Die Verwendung von realen Marktpreisen (and nicht Heiken-Asch synthetische Preise) bei der Rückmessung für die Ausführung von Geschäften und Verlusten bietet eine genauere Rückmessung, die dem realen Handelsumfeld näher kommt.
Visuelles Feedback und ÜberwachungDie integrierten Informationstabellen und visuellen Indikatoren liefern Echtzeit-Status der Strategie und wichtige Datenpunkte, um eine schnelle Bewertung und Überwachung zu ermöglichen und die Entscheidungsfähigkeit zu verbessern.
Flexible ParameterkonfigurationAnpassbare Schlüsselparameter (Sensitivitätswerte, ATR-Zyklen, Heiken-Ach-Methoden und Stop-Loss-Einstellungen) ermöglichen die Anpassung der Strategie an unterschiedliche Marktbedingungen und Risikopräferenzen der Händler.
Mehrköpfige StrategieDer Markt ist in der Lage, die Entwicklung von Kryptowährungen zu beeinflussen, indem er sich auf die Erhöhung konzentriert und die potenziellen Risiken einer Fremdwährung vermeidet, insbesondere für Märkte mit einer langfristigen Pessimismus, wie zum Beispiel bestimmte Kryptowährungen.
TrendumkehrrisikoAls Trend-Tracking-Strategie kann ein größerer Rückschlag bei einer Marktrückführung oder einer schnellen Umkehrung erfolgen. Der Stop-Loss-Tracking von ATR kann solche Verluste nicht vollständig verhindern.
ParameteroptimierungsfallenÜberoptimierungsparameter können zu einer Kurvenanpassung führen, die eine Strategie dazu bringt, in historischen Daten gut zu funktionieren, aber in zukünftigen Märkten schlecht zu funktionieren. Es wird empfohlen, sie in mehreren Märkten und Zeitrahmen zu testen, um Stabilität zu gewährleisten.
EintrittsrisikenEMA-Kreuzsignale können in einer späteren Phase des Trends auftreten, was zu einer unerwünschten Einstiegsposition führt. In starken Märkten kann dies zu einem Kauf in hohen Positionen führen.
AuslösungsrisikoIn einem hochvolatilen Markt kann es vorübergehend sein, dass die Preise die Stop-Loss-Level erreichen, auch wenn die Gesamttrend positiv ist, was zu unnötigen Ausstiegs führt. Die Stop-Loss-Parameter müssen sorgfältig nach den Merkmalen des Marktes festgelegt werden.
Abhängigkeit von einem einzigen TechnikindikatorDie Strategie basiert auf den ATR- und EMA-Indikatoren und berücksichtigt nicht die Fundamentaldaten oder andere technische Indikatoren, wodurch wichtige Marktwendepunkte verpasst werden können.
Langfristige Horizontale MarktentwicklungDie Strategie kann in einem langen horizontalen Markt mehrere falsche Signale erzeugen, was zu einer Anhäufung von kleinen Verlusten führt. Es wird empfohlen, sie zu verwenden, wenn der Markt bestätigt wird, dass er sich in einem Trend befindet.
Ausrutschpunkte und AusführungsrisikenDie Strategie berücksichtigt zwar Schlupfpunkte in der Rückmessung, aber Schlupfpunkte und Ausführungsverzögerungen in den tatsächlichen Transaktionen können größer sein als der eingestellte Wert, insbesondere in Märkten mit geringer Liquidität.
Integration von mehreren ZeitrahmenBerücksichtigung der Integration von Trendbestätigungssignalen für höhere Zeiträume, die nur dann ausgeführt werden, wenn die Richtung der höheren Zeiträume übereinstimmt, was die Gewinnrate und die Risikobeträge erheblich erhöhen kann.
SchwankungsratefilterDie Erhöhung der Filter auf Basis von Volatilität, die Aussetzung des Handels oder die Anpassung der Positionsgröße während außergewöhnlich hoher Volatilität reduzieren das Risiko extremer Marktschwankungen.
Dynamische PositionsverwaltungDie dynamische Positionsgröße basierend auf Volatilität und Marktsituationen, statt einer festen Prozentsatzkonfiguration, optimiert die Effizienz der Kapitalnutzung unter verschiedenen Marktbedingungen.
Mehrfache AnerkennungDie Integration anderer komplementärer technischer Indikatoren (z. B. der relativ schwachen RSI, der Zufallsindikator oder der MACD) als Sekundärbestätigung kann die Falschsignalrate reduzieren und die Handelsqualität verbessern.
Verbesserte Stop-Loss-StrategieDie Implementierung von komplexeren Stop-Loss-Strategien, wie das Verfolgen von Multiplikatoren des ATR oder Stop-Losses auf Basis von Support/Resistance-Levels, anstatt einfacher Prozentsätze oder fester Punkte, kann besser an die Marktstruktur angepasst werden.
Ausgangsstrategie verfeinertDie Entwicklung von feineren Teilergebnissen und Teilausstiegsmechanismen, die Teilergebnisse sperren und die Gesamtrenditenkurve optimieren können, während die Trendlücke erhalten wird.
Identifizierung der Marktordnung: Hinzufügen von Algorithmen zur Identifizierung von Marktsystemen, automatische Anpassung der Strategieparameter an verschiedene Marktbedingungen (Trend, Erschütterung oder Umkehr) und Verbesserung der Anpassungsfähigkeit der Strategie.
Maschinelle LernintegrationDie Erforschung von maschinellen Lerntechnologien zur Optimierung der Parameterwahl oder zur Vorhersage der besten Einstiegs-/Ausgangspunkte kann die Strategieperformance weiter verbessern und subjektive Interventionen reduzieren.
Die Strategie bietet einen objektiven, systematischen Handelsrahmen durch die Kombination der Noise-Filter-Fähigkeiten der Heiken-Aschie-Chart, der dynamischen Risikomanagement-Funktionen der ATR und der Trenderkennung der EMA.
Die Hauptvorteile dieser Strategie liegen in ihrer Anpassungsfähigkeit und dynamischen Risikomanagement-Fähigkeit, die Stop-Loss-Levels automatisch an Marktschwankungen anzupassen, Kapital zu schützen und Gewinne zu sperren. Die strenge Stop-Loss-Implementierung und die Ausführungsmechanismen, die auf realen Marktpreisen basieren, gewährleisten gleichzeitig die Zuverlässigkeit und Replikationsfähigkeit der Rückmessergebnisse.
Als Trend-Tracking-Strategie kann es jedoch eine Herausforderung sein, wenn der Markt horizontal oder schnell rückläufig ist. Die Stabilität und Leistung der Strategie können durch Verbesserungen wie die Integration von Multi-Time-Frame-Analysen, die Erhöhung der Fluktuationsrate-Filter, die Optimierung der Positionsverwaltung und die Verfeinerung der Ausstiegsstrategie weiter verbessert werden.
Diese Strategie bietet eine solide Grundlage für Händler, die eine systematisierte Handelsmethode aufbauen möchten, die nach individuellen Risikopräferenzen und Marktcharakteristiken angepasst und erweitert werden kann, mit dem Potenzial, in einer Vielzahl von Marktumgebungen stabile risikobereinigte Renditen zu erzielen.
/*backtest
start: 2024-08-18 00:00:00
end: 2025-08-17 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_OKX","currency":"DOGE_USDT","balance":5000}]
*/
//@version=6
strategy(title="Mutanabby_AI | ATR+ | ") // Ensures realistic execution
// 📊 INPUT PARAMETERS
//=============================================================================
a = input.int(1, title="🔧 Key Value (Sensitivity)", minval=1, maxval=10,
tooltip="Lower = More signals, Higher = Fewer signals")
c = input.int(10, title="📈 ATR Period", minval=1, maxval=500,
tooltip="Period for ATR calculation")
// 🕯️ HEIKIN ASHI METHOD SELECTION
//=============================================================================
ha_method = input.string("Manual Calculation", title="🕯️ Heikin Ashi Method",
options=["Manual Calculation", "ticker.heikinashi()", "Regular Candles"],
tooltip="Manual = Most reliable, ticker.heikinashi = Good, Regular = Standard OHLC")
// 🛡️ STOP LOSS SETTINGS
//=============================================================================
use_stop_loss = input.bool(false, title="🛡️ Enable Stop Loss",
tooltip="Enable stop loss at entry price level")
stop_loss_type = input.string("Percentage", title="📊 Stop Loss Type",
options=["Percentage", "Fixed Points"],
tooltip="Choose stop loss calculation method")
stop_loss_percent = input.float(2.0, title="📉 Stop Loss %", minval=0.1, maxval=50.0, step=0.1,
tooltip="Stop loss percentage below entry price")
stop_loss_points = input.float(10.0, title="📉 Stop Loss Points", minval=0.1, step=0.1, tooltip="Stop loss in price points below entry price")
// Date condition
date_condition = true
// 🎨 VISUAL SETTINGS
//=============================================================================
show_signals = input.bool(true, title="🎯 Show Buy/Sell Signals")
show_trailing_stop = input.bool(true, title="📈 Show ATR Trailing Stop")
show_stop_loss = input.bool(true, title="🛡️ Show Stop Loss Line")
show_bar_colors = input.bool(true, title="🎨 Color Bars")
show_position_info = input.bool(true, title="📊 Show Position Info")
// 🧮 HEIKIN ASHI CALCULATIONS
//=============================================================================
// METHOD 1: MANUAL HEIKIN ASHI CALCULATION (MOST RELIABLE)
//=============================================================================
// Manual HA calculation - most transparent and reliable
var float ha_open_manual = na
ha_close_manual = (open + high + low + close) / 4
ha_open_manual := na(ha_open_manual[1]) ? (open + close) / 2 : (ha_open_manual[1] + ha_close_manual[1]) / 2
ha_high_manual = math.max(high, math.max(ha_open_manual, ha_close_manual))
ha_low_manual = math.min(low, math.min(ha_open_manual, ha_close_manual))
// METHOD 2: TICKER.HEIKINASHI() (GOOD ALTERNATIVE)
//=============================================================================
// Get Heikin Ashi data via ticker.heikinashi() - non-repainting
ha_ticker = ticker.heikinashi(syminfo.tickerid)
[ha_open_ticker, ha_high_ticker, ha_low_ticker, ha_close_ticker] = request.security(ha_ticker, timeframe.period, [open[1], high[1], low[1], close[1]], lookahead=barmerge.lookahead_on) // Use confirmed bars to prevent repainting
// METHOD 3: REGULAR CANDLES
//=============================================================================
// Regular OHLC data
ha_open_regular = open
ha_high_regular = high
ha_low_regular = low
ha_close_regular = close
// SELECT METHOD BASED ON USER INPUT
//=============================================================================
src = ha_method == "Manual Calculation" ? ha_close_manual :
ha_method == "ticker.heikinashi()" ? ha_close_ticker : ha_close_regular
source_open = ha_method == "Manual Calculation" ? ha_open_manual :
ha_method == "ticker.heikinashi()" ? ha_open_ticker : ha_open_regular
source_high = ha_method == "Manual Calculation" ? ha_high_manual :
ha_method == "ticker.heikinashi()" ? ha_high_ticker : ha_high_regular
source_low = ha_method == "Manual Calculation" ? ha_low_manual :
ha_method == "ticker.heikinashi()" ? ha_low_ticker : ha_low_regular
// 📊 ATR TRAILING STOP CALCULATION
//=============================================================================
// Calculate True Range using selected method
tr1 = source_high - source_low
tr2 = math.abs(source_high - src[1])
tr3 = math.abs(source_low - src[1])
tr = math.max(tr1, math.max(tr2, tr3))
// ATR calculation
xATR = ta.sma(tr, c)
nLoss = a * xATR
// ATR Trailing Stop logic
var float xATRTrailingStop = na
xATRTrailingStop := if src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0)
math.max(nz(xATRTrailingStop[1]), src - nLoss)
else if src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0)
math.min(nz(xATRTrailingStop[1]), src + nLoss)
else if src > nz(xATRTrailingStop[1], 0)
src - nLoss
else
src + nLoss
// Position state tracking
var int pos = na
pos := if src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0)
1
else if src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0)
-1
else
nz(pos[1], 0)
// 🎯 SIGNAL GENERATION
//=============================================================================
// EMA for crossover detection
ema_val = ta.ema(src, 1)
// Crossover conditions
above = ta.crossover(ema_val, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema_val)
// Buy and sell signals
buy_signal = src > xATRTrailingStop and above
sell_signal = src < xATRTrailingStop and below
// Trend direction
is_uptrend = src > xATRTrailingStop
is_downtrend = src < xATRTrailingStop
// 🛡️ STOP LOSS CALCULATION
//=============================================================================
var float entry_price = na
var float stop_loss_level = na
// Calculate stop loss level
calculate_stop_loss(entry_price_val) =>
if stop_loss_type == "Percentage"
entry_price_val * (1 - stop_loss_percent / 100)
else
entry_price_val - stop_loss_points
// 📈 LONG ONLY STRATEGY LOGIC
//=============================================================================
var bool in_long_position = false
// Entry condition: Buy signal when not in position
long_entry = buy_signal and date_condition and not in_long_position
// Exit conditions - CRITICAL: Use real prices for stop loss, not HA prices
atr_exit = sell_signal and date_condition and in_long_position
stop_loss_hit = use_stop_loss and in_long_position and low <= stop_loss_level // Uses real low price
// Combined exit condition
long_exit = atr_exit or stop_loss_hit
// Execute trades - Orders execute at REAL market prices
if long_entry
strategy.entry("LONG", strategy.long, comment="🚀 LONG")
in_long_position := true
entry_price := close // REAL entry price, not HA price
stop_loss_level := use_stop_loss ? calculate_stop_loss(entry_price) : na
if long_exit
exit_reason = stop_loss_hit ? "🛡️ STOP LOSS" : "💰 ATR EXIT"
strategy.close("LONG", comment=exit_reason)
in_long_position := false
entry_price := na
stop_loss_level := na
// 🎨 VISUAL ELEMENTS
//=============================================================================
// Trailing stop line color
stop_color = pos == 1 ? color.green : pos == -1 ? color.red : color.blue
// Plot ATR Trailing Stop
plot(show_trailing_stop ? xATRTrailingStop : na,
color=stop_color,
linewidth=2,
title="ATR Trailing Stop")
// Plot Stop Loss Level
plot(show_stop_loss and use_stop_loss and in_long_position ? stop_loss_level : na,
color=color.new(color.red, 0),
linewidth=2,
style=plot.style_linebr,
title="Stop Loss Level")
// Plot buy/sell signals
plotshape(show_signals and buy_signal,
title="Buy Signal",
text="BUY",
style=shape.labelup,
location=location.belowbar,
color=color.new(color.green, 0),
textcolor=color.white,
size=size.small)
plotshape(show_signals and sell_signal,
title="Sell Signal",
text="SELL",
style=shape.labeldown,
location=location.abovebar,
color=color.new(color.red, 0),
textcolor=color.white,
size=size.small)
// Plot stop loss hit signal
plotshape(show_signals and stop_loss_hit,
title="Stop Loss Hit",
text="SL",
style=shape.labeldown,
location=location.abovebar,
color=color.new(color.orange, 0),
textcolor=color.white,
size=size.small)
// Bar coloring
barcolor(show_bar_colors ? (is_uptrend ? color.new(color.green, 70) :
is_downtrend ? color.new(color.red, 70) : na) : na)
// Position status background
bgcolor(show_position_info and strategy.position_size > 0 ? color.new(color.green, 95) : show_position_info and strategy.position_size == 0 ? color.new(color.gray, 98) : na, title="Position Status")
// Entry price line - shows REAL entry price
plot(show_position_info and strategy.position_size > 0 ? strategy.position_avg_price : na,
color=color.new(color.blue, 0),
linewidth=1,
style=plot.style_linebr,
title="Entry Price")
// 📊 INFORMATION TABLE
//=============================================================================
if show_position_info and barstate.islast
var table info_table = table.new(position.top_right, 3, 11,
bgcolor=color.white,
border_width=1,
border_color=color.gray,
frame_width=1,
frame_color=color.black)
// Table headers
table.cell(info_table, 0, 0, "Mutanabby_AI | Manual HA | ATR | SL", text_color=color.white, bgcolor=color.blue, text_size=size.small)
table.cell(info_table, 1, 0, "", text_color=color.white, bgcolor=color.blue)
table.cell(info_table, 2, 0, "", text_color=color.white, bgcolor=color.blue)
// Strategy info
table.cell(info_table, 0, 1, "HA Method:", text_color=color.rgb(10, 10, 10), text_size=size.small)
method_color = ha_method == "Manual Calculation" ? color.green :
ha_method == "ticker.heikinashi()" ? color.blue : color.gray
table.cell(info_table, 1, 1, ha_method, text_color=method_color, text_size=size.small)
table.cell(info_table, 0, 2, "Key Value:", text_color=color.rgb(10, 10, 10), text_size=size.small)
table.cell(info_table, 1, 2, str.tostring(a), text_color=color.blue, text_size=size.small)
table.cell(info_table, 0, 3, "ATR Period:", text_color=color.rgb(2, 2, 2), text_size=size.small)
table.cell(info_table, 1, 3, str.tostring(c), text_color=color.blue, text_size=size.small)
table.cell(info_table, 0, 4, "Stop Loss:", text_color=color.rgb(3, 3, 3), text_size=size.small)
table.cell(info_table, 1, 4, use_stop_loss ? "ON" : "OFF",
text_color=use_stop_loss ? color.green : color.gray, text_size=size.small)
table.cell(info_table, 0, 5, "Position:", text_color=color.rgb(3, 3, 3), text_size=size.small)
table.cell(info_table, 1, 5, strategy.position_size > 0 ? "LONG" : "NONE",
text_color=strategy.position_size > 0 ? color.green : color.gray, text_size=size.small)
table.cell(info_table, 0, 6, "Trend:", text_color=color.rgb(0, 0, 0), text_size=size.small)
table.cell(info_table, 1, 6, is_uptrend ? "UP" : "DOWN",
text_color=is_uptrend ? color.green : color.red, text_size=size.small)
table.cell(info_table, 0, 7, "Current Price:", text_color=color.black, text_size=size.small)
table.cell(info_table, 1, 7, str.tostring(close, "#.##"), text_color=color.black, text_size=size.small)
table.cell(info_table, 0, 8, "Trailing Stop:", text_color=color.black, text_size=size.small)
table.cell(info_table, 1, 8, str.tostring(xATRTrailingStop, "#.##"), text_color=color.blue, text_size=size.small)
// Show stop loss level if enabled and in position
if use_stop_loss and in_long_position
table.cell(info_table, 0, 9, "Stop Loss:", text_color=color.black, text_size=size.small)
table.cell(info_table, 1, 9, str.tostring(stop_loss_level, "#.##"), text_color=color.red, text_size=size.small)
else
table.cell(info_table, 0, 9, "Stop Loss:", text_color=color.black, text_size=size.small)
table.cell(info_table, 1, 9, "N/A", text_color=color.gray, text_size=size.small)
table.cell(info_table, 0, 10, "Last Signal:", text_color=color.black, text_size=size.small)
signal_text = buy_signal ? "BUY" : sell_signal ? "SELL" : stop_loss_hit ? "STOP LOSS" : "NONE"
signal_color = buy_signal ? color.green : sell_signal ? color.red : stop_loss_hit ? color.orange : color.gray
table.cell(info_table, 1, 10, signal_text, text_color=signal_color, text_size=size.small)
// 🚨 ALERTS
//=============================================================================
// Alert conditions
alertcondition(buy_signal, title="🚀 Mutanabby_AI | ATR+ LONG Entry",
message="Mutanabby_AI | ATR+ : BUY signal at {{close}}")
alertcondition(sell_signal, title="💰 Mutanabby_AI | ATR+ LONG Exit",
message="Mutanabby_AI | ATR+ : SELL signal at {{close}}")
alertcondition(stop_loss_hit, title="🛡️ Mutanabby_AI | ATR+ Stop Loss Hit",
message="Mutanabby_AI | ATR+ : STOP LOSS hit at {{close}}")
alertcondition(buy_signal or sell_signal or stop_loss_hit, title="🔔 Mutanabby_AI | ATR+ Any Signal",
message="Mutanabby_AI| ATR+ : {{ticker}} - {{close}} - Signal: {{strategy.position_size > 0 ? 'EXIT' : 'ENTRY'}}")
//=============================================================================
// 📝 STRATEGY NOTES:
//
// 🎯 OPTIMAL IMPLEMENTATION for realistic backtesting:
// 📈 Uses manual HA calculation for transparency and reliability
// 💰 Orders execute at REAL market prices (not synthetic HA prices)
// 🛡️ Stop loss uses real market prices for accurate risk management
// 🔧 Multiple HA methods available for comparison and validation
// ⚡ Added fill_orders_on_standard_ohlc=true for extra protection
//
// 🎯 METHOD COMPARISON:
// 🥇 Manual Calculation: Most reliable, transparent, no external dependencies
// 🥈 ticker.heikinashi(): Good alternative, uses confirmed bars to prevent repainting
// 🥉 Regular Candles: Standard OHLC for comparison purposes
//
// 💡 BEST PRACTICES IMPLEMENTED:
// ✅ Always run on regular candlestick charts (not native HA charts)
// ✅ Use confirmed/historical HA values to prevent repainting
// ✅ Execute all orders at real market prices
// ✅ Stop loss based on real prices, not synthetic HA prices
// ✅ Entry price tracking uses actual fill prices
// ✅ Transparent calculation methods for verification
//
// 🚨 AVOID:
// ❌ Running strategies directly on TradingView's native HA charts
// ❌ Using current bar HA values (causes repainting)
// ❌ Stop loss based on HA prices instead of real prices
//=============================================================================