
La stratégie est basée sur la technologie de cartographie Heikin Ashi pour filtrer le bruit du marché, combinée à un système de suivi des arrêts de perte ajusté dynamiquement par l’amplitude réelle moyenne (ATR) pour générer un signal de transaction par la croisée des moyennes mobiles des indices (EMA). La stratégie exécute uniquement des transactions à plusieurs têtes et améliore la stabilité du signal et la gestion des transactions grâce à des composants ajustés par la volatilité.
Le principe de base de cette stratégie repose sur la synergie de plusieurs composants techniques clés:
Haiken et Achim ont une carte de filtrageLes stratégies offrent trois modes de calcul différents: calcul manuel, fonction intégrée TradingView et graphisme ordinaire, afin d’atténuer le bruit à court terme du marché et de mettre en évidence la direction de la tendance potentielle. Le mode de calcul manuel fournit les résultats les plus transparents et les plus fiables, tandis que la fonction intégrée utilise des piliers historiques confirmés pour empêcher le redessage.
ATR pour le suivi des arrêts de perte: la moyenne réelle de l’amplitude de la vague (ATR) est une mesure dynamique de la volatilité du marché, combinée à des paramètres définis par l’utilisateur (le critère et la période ATR) pour calibrer la sensibilité du suivi des arrêts, ce qui lui permet de s’adapter à différents environnements de volatilité du marché. Ce mécanisme est conçu pour fournir des points de sortie dynamiques, protéger les fonds et bloquer les gains pendant le développement de la tendance.
Signal croisé EMA généré: Les signaux d’entrée et de sortie sont dérivés de l’interaction entre les prix de Heiken et les moyennes mobiles indicielles (EMA). Les événements de croisement entre ces deux composants sont utilisés pour identifier objectivement les changements de dynamique et émettre des signaux potentiels d’entrée ou de sortie à plusieurs têtes.
Mise en œuvre stricte de l’arrêt des pertes: la stratégie contient des fonctions de stop-loss optionnelles, configurables en pourcentage du prix d’entrée ou en écart de points fixes. Il est important de noter que le stop-loss est exécuté en fonction des prix réels du marché, et non des valeurs synthétiques de Heiken, afin de garantir une gestion des risques basée sur la liquidité et le niveau des prix réels du marché.
Protocole de rétroaction: la stratégie est configurée pour un retournement réaliste, avec fill_orders_on_standard_ohlc=true pour simuler l’exécution des commandes au prix standard de l’OHLC, et contient un filtre de date configurable pour définir une période historique spécifique pour une évaluation de la performance
Visualisation des donnéesLes scripts fournissent des signaux d’achat/vente, des superpositions de graphiques ATR pour suivre les niveaux d’arrêt et de perte, et des tableaux d’informations affichant les paramètres de la stratégie en temps réel, l’état de la position actuelle, la direction de la tendance et les niveaux de prix critiques.
Filtrage du bruitLa technologie de Heiken Achievement Chart filtre efficacement le bruit du marché à court terme, aidant les traders à se concentrer sur les tendances les plus importantes du marché et à réduire les fausses interférences.
Gestion dynamique des risquesLe mécanisme de stop-loss de suivi basé sur l’ATR est capable de s’adapter automatiquement à la volatilité du marché, de fournir un stop-loss plus souple lorsque la volatilité augmente, de renforcer la protection lorsque la volatilité diminue et d’optimiser le ratio de retour sur risque.
Signaux d’entrée et de sortie objectifs: Les signaux générés par la croisée des EMA éliminent le jugement subjectif, rendent les décisions de négociation plus systématiques et répétitives, et aident à maintenir la discipline émotionnelle.
La mise en œuvre des prix réels du marchéLa stratégie consiste à utiliser le prix réel du marché (et non le prix synthétique de Heiken et Ashi) pour effectuer des transactions et des arrêts, offrant des résultats de rétroaction plus précis et plus proches de l’environnement de négociation réel.
Retour visuel et surveillanceLes tableaux d’informations et les indicateurs visuels intégrés fournissent un état de la stratégie en temps réel et des points de données clés pour une évaluation et une surveillance rapides et une capacité de décision accrue.
Configuration flexible des paramètres: paramètres clés réglables (valeur de sensibilité, cycle d’ATR, méthode de Haiken-Ash et paramètres de stop loss) permettent d’adapter la stratégie à différents environnements de marché et aux préférences de risque des traders.
Une stratégie à plusieurs têtesL’objectif est de capturer les tendances à la hausse et d’éviter les risques potentiels d’écrasement à vide, particulièrement adaptés aux marchés pessimistes à long terme, tels que certaines crypto-monnaies.
Risque d’inversion de tendanceATR: comme stratégie de suivi des tendances, il est possible de faire face à des retraits plus importants lors d’un virage horizontal ou d’un retournement rapide du marché, et le suivi des arrêts ATR peut ne pas être en mesure de prévenir complètement de telles pertes.
piège d’optimisation des paramètres: les paramètres d’optimisation excessive peuvent entraîner un ajustement de la courbe, ce qui rend la stratégie excellente sur les données historiques mais moins performante sur les marchés futurs. Il est recommandé de tester sur plusieurs marchés et périodes de temps pour assurer la stabilité.
Risques liés à l’heure d’entrée: Les signaux de croisement EMA peuvent apparaître plus tard dans le développement de la tendance, entraînant une mauvaise position d’entrée. Dans les marchés dynamiques, cela peut entraîner des achats à des niveaux élevés.
Risque de déclenchement de la détérioration: Dans un marché très volatil, même si la tendance générale est positive, les prix peuvent toucher brièvement le niveau de stop loss, entraînant des sorties inutiles. Il est nécessaire de régler soigneusement les paramètres de stop loss en fonction des caractéristiques du marché.
Dépendance à un seul indicateur techniqueLa stratégie repose principalement sur les indicateurs ATR et EMA, sans prendre en compte les facteurs fondamentaux ou d’autres indicateurs techniques, ce qui peut manquer d’importants points de retournement du marché.
Performance du marché horizontal à long terme: Dans les marchés horizontaux à long terme, la stratégie peut générer plusieurs signaux erronés, entraînant une accumulation de petites pertes consécutives. Il est recommandé de l’utiliser pour confirmer que le marché est en tendance.
Points de glissement et risques d’exécution: Bien que la stratégie prenne en compte les points de glissement dans la rétroaction, les points de glissement et les délais d’exécution dans les transactions réelles peuvent être plus importants que la valeur définie, en particulier dans les marchés à faible liquidité.
Intégration de l’analyse de plusieurs périodesConsidérant l’intégration des signaux de confirmation de tendance dans les périodes plus élevées, l’exécution d’une transaction uniquement lorsque la direction de tendance des périodes plus élevées est cohérente peut augmenter considérablement le taux de réussite et le ratio de retour sur risque.
Filtre de fluctuationL’ajout de filtres basés sur la volatilité, la suspension des transactions ou l’ajustement de la taille des positions pendant une période de forte volatilité peuvent réduire le risque d’extrême volatilité du marché.
Gestion dynamique des positions: réalisation d’une taille de position dynamique basée sur la volatilité et l’état du marché, plutôt que sur une configuration de pourcentage fixe, permettant d’optimiser l’efficacité de l’utilisation des fonds dans différentes conditions de marché.
Confirmation de plusieurs indicateursL’intégration d’autres indicateurs techniques complémentaires (comme le RSI, l’indice de la faiblesse relative, l’indice aléatoire ou le MACD) comme confirmation secondaire permet de réduire le taux de faux signaux et d’améliorer la qualité des transactions.
Amélioration de la stratégie de réduction des pertesLa mise en place de stratégies de stop loss plus complexes, telles que le suivi des multiples de l’ATR ou des stop loss basés sur des niveaux de support/résistance, plutôt que sur de simples pourcentages ou des points fixes, peut mieux s’adapter à la structure du marché.
Stratégie de sortie affinée: Développer des mécanismes de profit partiel et de sortie par lots plus sophistiqués, permettant de bloquer une partie des bénéfices tout en conservant un creux de tendance et d’optimiser la courbe de rendement globale.
Identifier les systèmes de marché: ajout d’algorithmes de reconnaissance des institutions de marché, adaptation automatique des paramètres de la stratégie aux différents états du marché (trend, choc ou inversion), amélioration de la capacité d’adaptation de la stratégie.
Intégration de l’apprentissage automatiqueL’exploration de techniques d’apprentissage automatique pour optimiser la sélection de paramètres ou la prévision des meilleurs points d’entrée/sortie peut améliorer encore les performances stratégiques et réduire les interventions subjectives.
La stratégie ATR est un système de suivi de tendances conçu pour être raisonnable et contrôlé par les risques, particulièrement adapté aux marchés à forte volatilité. En combinant les capacités de filtrage du bruit du graphique de Haiken et la gestion dynamique des risques de l’ATR avec les fonctions d’identification des tendances de l’EMA, la stratégie fournit un cadre de négociation objectif et systématique.
Le principal avantage de cette stratégie réside dans sa capacité d’adaptation et de gestion dynamique des risques, qui permet d’ajuster automatiquement le niveau de stop loss en fonction des fluctuations du marché, de protéger les fonds et de bloquer les bénéfices. En outre, sa mise en œuvre stricte des stop losses et son mécanisme d’exécution basé sur les prix réels du marché assurent la fiabilité et la reproductibilité des résultats de la rétroanalyse.
Cependant, comme une stratégie de suivi de tendance, elle peut être confrontée à des défis lorsque le marché est horizontal ou se retourne rapidement. Des améliorations telles que l’intégration de l’analyse de plusieurs périodes, l’ajout d’un filtre de volatilité, l’optimisation de la gestion des positions et le raffinement des stratégies de sortie peuvent améliorer encore la robustesse et la performance de la stratégie.
Pour les traders qui souhaitent construire une méthode de trading systématisée, cette stratégie offre une base solide qui peut être personnalisée et étendue en fonction des préférences de risque personnelles et des caractéristiques du marché, avec le potentiel d’obtenir des rendements stables en ajustement du risque dans divers environnements de marché.
/*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
//=============================================================================