Расширенное распознавание торговых моделей и стратегии динамического управления рисками

EMA ATR FIBONACCI ENGULFING volatility VOLUME RISK-REWARD
Дата создания: 2025-06-19 13:57:50 Последнее изменение: 2025-06-19 13:57:50
Копировать: 4 Количество просмотров: 287
2
Подписаться
319
Подписчики

Расширенное распознавание торговых моделей и стратегии динамического управления рисками Расширенное распознавание торговых моделей и стратегии динамического управления рисками

Обзор стратегии

Высокоуровневая стратегия идентификации торговых моделей и управления динамическими рисками - это количественная торговая стратегия, объединяющая точную технологию идентификации поглощающих форм и динамическую систему управления рисками. В основе этой стратегии лежит точная идентификация поглощающих форм на рынке с помощью передовых методов математической верификации и в сочетании с 50-циклическим движущимся средним ((EMA) в качестве фильтра тренда, обеспечивающего согласованность направления торговли с тенденциями на ведущих рынках.

Стратегический принцип

Стратегия основана на совместной работе нескольких ключевых компонентов:

  1. Система распознавания тенденцийИспользование 50-циклической EMA в качестве основного индикатора тренда. Цены, находящиеся выше EMA, идентифицируются как тенденция к росту, подходящая для торговли; цены, находящиеся ниже EMA, идентифицируются как тенденция к снижению, подходящая для торговли. Это гарантирует, что торговля всегда подчиняется доминирующему направлению рынка.

  2. Высокоуровневые формы поглощения: стратегия обнаружения поглощения формы усовершенствованной версии, требующая, чтобы текущая колонка полностью “поглотила” предыдущую колонку и гарантировала качество формы с помощью математической проверки. Система анализирует:

    • Соотношение нынешнего тела к предыдущему ((минимальная пропорция поглощения))
    • Отношение верхней и нижней теневой линии к объекту (максимальное соотношение теневой линии)
    • Отношение общего размера текущего ядра к среднему реальному диапазону (ATR)
  3. Множественная фильтрация

    • Фильтрация объемов сделок: обеспечение того, чтобы количество сделок превышало определенное множество среднего значения
    • Волатильность фильтра: подтверждение через ATR, что рыночная волатильность достигла подходящих условий торговли
    • Контроль качества теневой линии: ограничение размера верхней и нижней теневой линии, улучшение качества сигнала
  4. Динамическое управление рисками

    • Расчет убытков: поддержка множества убытков, основанных на уровне Фибоначчи, фиксированной сумме или ATR
    • Цели прибыли: можно использовать фиксированный коэффициент возврата риска или фибоначевский уровень целевой настройки
    • Автоматический расчет торговых сборов, обеспечивающий жизнеспособность стратегии в реальной торговой среде

Стратегические преимущества

В результате глубокого анализа кода выявлены следующие существенные преимущества:

  1. Точное время входаС помощью сочетания тенденций, форм и многократных подтверждений, стратегия позволяет идентифицировать высококачественные точки входа в рынок, имеющие статистическое преимущество, избегая ложных сигналов, которые могут быть вызваны одним показателем.

  2. Приспособность к управлению рискамиВ отличие от традиционной стратегии с фиксированными параметрами, система управления рисками этой стратегии динамично адаптируется к текущим рыночным условиям, используя уровни Фибоначчи или значения ATR для расчета стоп-лостов и прибылей, чтобы лучше адаптироваться к различным рыночным условиям.

  3. Полная визуализацияСтратегия предоставляет полную диаграмму и информационную панель, включающую входные сигналы, уровни стоп/прибыль, текущее состояние тренда и отслеживание P&L в режиме реального времени, чтобы помочь трейдерам получить визуальное представление о состоянии рынка и эффективности стратегии.

  4. Высокая настройкаСтратегия предлагает широкий спектр параметров, включая длину EMA, поглощающую коэффициент, коэффициент возврата риска и т. д., что позволяет трейдерам корректировать стратегию в зависимости от личных предпочтений в отношении риска и различных рыночных условий.

  5. Рассмотрение стоимости сделкиВстроенный в стратегии расчет комиссионных, который часто игнорируется многими торговыми системами, обеспечивает более близкие результаты отслеживания к реальному состоянию торгов.

Стратегический риск

Несмотря на многочисленные преимущества данной стратегии, существуют следующие потенциальные риски и ограничения:

  1. Зависимость от рыночной средыСтратегия лучше всего работает на рынках с ясным трендом, а может создавать больше ложных сигналов на рынках с горизонтальной корректировкой или высокой волатильностью. Решение заключается в оценке состояния рынка на более высоких временных рамках перед использованием стратегии или добавлении дополнительных фильтров структуры рынка.

  2. Параметр оптимизации ловушки: чрезмерная оптимизация параметров может привести к неправильному соответствию кривой в будущих рыночных условиях. Для проверки эффективности параметров рекомендуется использовать прогрессивные тесты или тесты устойчивости в различных рыночных условиях.

  3. Сдерживание риска прорываВ условиях экстремальной рыночной волатильности или недостаточной ликвидности реальный стоп может столкнуться со скольжением, превышающим ожидаемые потери. Этот риск можно снизить, увеличив буферные зоны стоп или используя более консервативный размер позиции.

  4. Отсталость технических показателейEMA и другие технические показатели по своей природе являются отсталыми и могут не реагировать на быстрые изменения рынка. Рекомендуется восполнить этот недостаток в сочетании с более высоким анализом временных рамок или увеличением показателей раннего предупреждения.

  5. Качество транзакций: Стратегия учитывает только размер объема торгов, а не структуру и качество объема торгов, что может вводить в заблуждение при определенных рыночных условиях. Можно рассмотреть возможность добавления анализа распределения объема торгов или показателя денежного потока для усиления анализа объема торгов.

Направление оптимизации стратегии

На основе анализа кода эта стратегия может быть оптимизирована в следующих направлениях:

  1. Рынок адаптируется

    • Осуществление функции идентификации структуры рынка с использованием различных наборов параметров на трендовых и промежуточных рынках
    • Внедрение индекса волатильности рынка (VIX) или других индикаторов рыночной сентиментальности для автоматической корректировки параметров риска во время высокой волатильности
    • Причина: это позволит стратегии разумно адаптироваться к различным рыночным условиям и повысить общую стабильность
  2. Анализ многовременных рамок

    • Механизм подтверждения тенденций для более высоких временных рамок
    • Оптимизация входной точности с использованием более низких временных рамок
    • Причины: многократный анализ временных рамок значительно повышает точность определения трендов и уменьшает встречный трейдинг
  3. Анализ высокого уровня транзакций

    • Введение ВВМА в качестве дополнительного подтверждения тренда
    • Проанализируйте давление на продажу, а не только общий объем торгов
    • Причина: более детальный анализ объема сделок может дать более глубокие представления о поведении участников рынка
  4. Машинное обучение

    • Автоматическая оптимизация параметров с помощью простого алгоритма машинного обучения
    • Лучшие признаки поглощения на основе исторических данных
    • Причина: машинное обучение может распознавать тонкие паттерны и связи, которые трудно обнаружить человеку
  5. Усиление управления рисками

    • Реализация динамических размеров позиций, основанных на чистой стоимости счета
    • Добавить ограничение риска на день, неделю или месяц
    • Введение функции “breakeven”
    • Причина: более продвинутое управление рисками является основой долгосрочного успеха

Подвести итог

Высокоуровневая идентификация торговых моделей и динамическая стратегия управления рисками - это тщательно разработанная торговая система, которая создает всеобъемлющую торговую структуру, объединяя традиционный поглощающий формат технического анализа с современными количественными методами. Центральным преимуществом этой стратегии является ее многомерный механизм подтверждения сигналов и адаптивная система управления рисками, позволяющая ей сохранять относительно стабильную производительность в разных рыночных условиях.

Стратегия значительно повышает качество входных сигналов с помощью множества механизмов, таких как фильтрация трендов 50 EMA, расширенное распознавание форм поглощения, подтверждение объема сделки и волатильности. В то же время, динамические цели по остановке убытков и получения прибыли, рассчитанные на уровне Фибоначчи или ATR, обеспечивают четкую структуру риска и прибыли для каждой сделки.

Несмотря на существующие ограничения, такие как зависимость от рыночной среды и отставание от технических показателей, эта стратегия имеет потенциал для дальнейшего повышения своей устойчивости и адаптивности с помощью предлагаемых направлений оптимизации, таких как самостоятельная адаптация к состоянию рынка, многовременный анализ и усиление машинного обучения. Для опытных трейдеров это профессиональная торговая система, предоставляющая всесторонние функции, а для новичков - образовательный инструмент для изучения передовых торговых концепций и принципов управления рисками.

Исходный код стратегии
/*backtest
start: 2025-05-19 00:00:00
end: 2025-06-18 00:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("🎯 IKODO Engulfing Strategy with Dynamic RR & Commission", shorttitle="IKODO Engulfing Pro", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, pyramiding=0, calc_on_every_tick=false, calc_on_order_fills=false, commission_type=strategy.commission.percent, commission_value=0.04)

// ═══════════════════════════════════════════════════════════════════════════════
// 📊 ADVANCED INPUT PARAMETERS
// ═══════════════════════════════════════════════════════════════════════════════

// Commission Settings
enable_commission = input.bool(true, "Enable Commission", group="💰 Commission Settings")
commission_rate = input.float(0.04, "Commission Rate (%)", minval=0.0, maxval=1.0, step=0.01, group="💰 Commission Settings", tooltip="Binance Futures: 0.02% Maker, 0.04% Taker")
commission_type_input = input.string("Percentage", "Commission Type", options=["Percentage", "Fixed USD"], group="💰 Commission Settings")

// Risk Management Inputs
rr_ratio = input.float(2.0, "Risk Reward Ratio", minval=0.5, maxval=10.0, step=0.1, group="🎯 Risk Management")
use_fibonacci_tp = input.bool(true, "Use Fibonacci Levels for TP", group="🎯 Risk Management")
fib_level_tp = input.float(0.618, "Fibonacci Level for TP", minval=0.236, maxval=1.0, step=0.001, group="🎯 Risk Management")

// Stop Loss Settings
sl_type = input.string("Fibonacci", "Stop Loss Type", options=["Fibonacci", "Fixed USD", "ATR Multiple"], group="🛡️ Stop Loss Settings")
sl_fib_level = input.float(0.236, "Fibonacci Level for SL", minval=0.1, maxval=0.5, step=0.001, group="🛡️ Stop Loss Settings")
sl_fixed_usd = input.float(50.0, "Fixed Stop Loss (USD)", minval=1.0, maxval=1000.0, step=1.0, group="🛡️ Stop Loss Settings")
sl_atr_multiple = input.float(1.5, "ATR Multiple for SL", minval=0.5, maxval=5.0, step=0.1, group="🛡️ Stop Loss Settings")

// EMA Settings
ema_length = input.int(50, "EMA Length", minval=1, maxval=200, group="📈 Trend Filter")
ema_source = input.source(close, "EMA Source", group="📈 Trend Filter")

// Pattern Recognition Settings
min_engulf_ratio = input.float(0.1, "Minimum Engulfing Ratio", minval=0.01, maxval=1.0, step=0.01, group="🔍 Pattern Recognition")
max_wick_ratio = input.float(0.3, "Maximum Wick Ratio", minval=0.1, maxval=0.8, step=0.01, group="🔍 Pattern Recognition")

// Advanced Filters
volume_filter = input.bool(true, "Use Volume Filter", group="🔧 Advanced Filters")
volume_multiplier = input.float(1.2, "Volume Multiplier", minval=1.0, maxval=3.0, step=0.1, group="🔧 Advanced Filters")
atr_filter = input.bool(true, "Use ATR Volatility Filter", group="🔧 Advanced Filters")
atr_length = input.int(14, "ATR Length", minval=1, maxval=50, group="🔧 Advanced Filters")
min_atr_ratio = input.float(0.5, "Minimum ATR Ratio", minval=0.1, maxval=2.0, step=0.1, group="🔧 Advanced Filters")

// Visualization Settings
show_fibonacci_levels = input.bool(true, "Show Fibonacci Levels", group="🎨 Visualization")

// ═══════════════════════════════════════════════════════════════════════════════
// 🧮 QUANTITATIVE CALCULATIONS
// ═══════════════════════════════════════════════════════════════════════════════

// EMA Calculation
ema_50 = ta.ema(ema_source, ema_length)

// ATR for Volatility Assessment
atr = ta.atr(atr_length)

// Volume Analysis
avg_volume = ta.sma(volume, 20)
volume_condition = not volume_filter or volume > avg_volume * volume_multiplier

// Fibonacci calculation for swing levels
swing_high = ta.highest(high, 20)
swing_low = ta.lowest(low, 20)

// ═══════════════════════════════════════════════════════════════════════════════
// 🔍 ADVANCED PATTERN RECOGNITION
// ═══════════════════════════════════════════════════════════════════════════════

// Current and Previous Candle Properties
curr_body = math.abs(close - open)
prev_body = math.abs(close[1] - open[1])
curr_range = high - low
prev_range = high[1] - low[1]

// Candle Color Identification
curr_bullish = close > open
curr_bearish = close < open
prev_bullish = close[1] > open[1]
prev_bearish = close[1] < open[1]

// Enhanced Engulfing Pattern Detection
bullish_engulfing = curr_bullish and prev_bearish and close > high[1] and low < low[1] and curr_body > prev_body * min_engulf_ratio

bearish_engulfing = curr_bearish and prev_bullish and close < low[1] and high > high[1] and curr_body > prev_body * min_engulf_ratio

// Wick Analysis for Quality Filter
curr_upper_wick = curr_bullish ? high - close : high - open
curr_lower_wick = curr_bullish ? open - low : close - low
wick_filter_long = curr_upper_wick <= curr_range * max_wick_ratio
wick_filter_short = curr_lower_wick <= curr_range * max_wick_ratio

// ATR Volatility Filter
atr_filter_condition = not atr_filter or curr_range >= atr * min_atr_ratio

// ═══════════════════════════════════════════════════════════════════════════════
// 📈 TREND ANALYSIS & ENTRY CONDITIONS
// ═══════════════════════════════════════════════════════════════════════════════

// Trend Conditions
uptrend = close > ema_50
downtrend = close < ema_50

// Complete Entry Conditions
long_condition = uptrend and bullish_engulfing and wick_filter_long and volume_condition and atr_filter_condition

short_condition = downtrend and bearish_engulfing and wick_filter_short and volume_condition and atr_filter_condition

// ═══════════════════════════════════════════════════════════════════════════════
// 🎯 ADVANCED STOP LOSS CALCULATION
// ═══════════════════════════════════════════════════════════════════════════════

// Function to calculate stop loss based on type
calculate_stop_loss(entry_price, is_long, sl_type, swing_high, swing_low, atr, sl_fib_level, sl_fixed_usd, sl_atr_multiple) =>
    var float stop_loss = na
    
    if sl_type == "Fibonacci"
        if is_long
            fib_range = swing_high - swing_low
            stop_loss := swing_low + (fib_range * sl_fib_level)
        else
            fib_range = swing_high - swing_low
            stop_loss := swing_high - (fib_range * sl_fib_level)
    
    else if sl_type == "Fixed USD"
        if is_long
            stop_loss := entry_price - sl_fixed_usd
        else
            stop_loss := entry_price + sl_fixed_usd
    
    else if sl_type == "ATR Multiple"
        if is_long
            stop_loss := entry_price - (atr * sl_atr_multiple)
        else
            stop_loss := entry_price + (atr * sl_atr_multiple)
    
    stop_loss

// Function to calculate take profit
calculate_take_profit(entry_price, stop_loss, is_long, use_fibonacci_tp, swing_high, swing_low, fib_level_tp, rr_ratio) =>
    var float take_profit = na
    
    if use_fibonacci_tp
        if is_long
            fib_range = swing_high - swing_low
            take_profit := swing_low + (fib_range * fib_level_tp)
        else
            fib_range = swing_high - swing_low
            take_profit := swing_high - (fib_range * fib_level_tp)
    else
        // Traditional RR-based TP
        if is_long
            risk = entry_price - stop_loss
            take_profit := entry_price + (risk * rr_ratio)
        else
            risk = stop_loss - entry_price
            take_profit := entry_price - (risk * rr_ratio)
    
    take_profit

// ═══════════════════════════════════════════════════════════════════════════════
// 🎯 DYNAMIC RISK MANAGEMENT SYSTEM
// ═══════════════════════════════════════════════════════════════════════════════

// Dynamic Stop Loss and Take Profit Calculation
var float entry_price = na
var float stop_loss = na
var float take_profit = na
var float commission_cost = na

if long_condition and strategy.position_size == 0
    entry_price := close
    stop_loss := calculate_stop_loss(entry_price, true, sl_type, swing_high, swing_low, atr, sl_fib_level, sl_fixed_usd, sl_atr_multiple)
    take_profit := calculate_take_profit(entry_price, stop_loss, true, use_fibonacci_tp, swing_high, swing_low, fib_level_tp, rr_ratio)
    
    // Calculate commission cost
    commission_cost := enable_commission and commission_type_input == "Fixed USD" ? sl_fixed_usd * 2 : 0

if short_condition and strategy.position_size == 0
    entry_price := close
    stop_loss := calculate_stop_loss(entry_price, false, sl_type, swing_high, swing_low, atr, sl_fib_level, sl_fixed_usd, sl_atr_multiple)
    take_profit := calculate_take_profit(entry_price, stop_loss, false, use_fibonacci_tp, swing_high, swing_low, fib_level_tp, rr_ratio)
    
    // Calculate commission cost
    commission_cost := enable_commission and commission_type_input == "Fixed USD" ? sl_fixed_usd * 2 : 0

// ═══════════════════════════════════════════════════════════════════════════════
// 🚀 STRATEGY EXECUTION WITH COMMISSION
// ═══════════════════════════════════════════════════════════════════════════════

// Entry Orders
if long_condition
    strategy.entry("Long", strategy.long, comment="🟢 Elite Long Entry")

if short_condition
    strategy.entry("Short", strategy.short, comment="🔴 Elite Short Entry")

// Exit Orders
if strategy.position_size > 0
    strategy.exit("Long Exit", "Long", stop=stop_loss, limit=take_profit, comment="🎯 Long Exit")

if strategy.position_size < 0
    strategy.exit("Short Exit", "Short", stop=stop_loss, limit=take_profit, comment="🎯 Short Exit")

// ═══════════════════════════════════════════════════════════════════════════════
// 📊 ADVANCED VISUALIZATION - GLOBAL SCOPE
// ═══════════════════════════════════════════════════════════════════════════════

// EMA Plot
plot(ema_50, "EMA 50", color=color.new(color.blue, 0), linewidth=2)

// Entry Signals
plotshape(long_condition, "Long Signal", shape.triangleup, location.belowbar, color.new(color.green, 0), size=size.normal)
plotshape(short_condition, "Short Signal", shape.triangledown, location.abovebar, color.new(color.red, 0), size=size.normal)

// Support/Resistance Levels
plot(strategy.position_size != 0 ? stop_loss : na, "Stop Loss", color.new(color.red, 0), linewidth=2, style=plot.style_linebr)
plot(strategy.position_size != 0 ? take_profit : na, "Take Profit", color.new(color.green, 0), linewidth=2, style=plot.style_linebr)

// Entry Price Line
plot(strategy.position_size != 0 ? entry_price : na, "Entry Price", color.new(color.yellow, 0), linewidth=1, style=plot.style_linebr)

// Fibonacci Levels Visualization - MOVED TO GLOBAL SCOPE
show_fib_condition = show_fibonacci_levels and (sl_type == "Fibonacci" or use_fibonacci_tp)
plot(show_fib_condition ? swing_high : na, "Swing High", color.new(color.gray, 50), linewidth=1, style=plot.style_circles)
plot(show_fib_condition ? swing_low : na, "Swing Low", color.new(color.gray, 50), linewidth=1, style=plot.style_circles)

// Additional Fibonacci Levels
fib_range = swing_high - swing_low
fib_236 = swing_low + (fib_range * 0.236)
fib_382 = swing_low + (fib_range * 0.382)
fib_618 = swing_low + (fib_range * 0.618)
fib_786 = swing_low + (fib_range * 0.786)

plot(show_fib_condition ? fib_236 : na, "Fib 23.6%", color.new(color.orange, 70), linewidth=1, style=plot.style_linebr)
plot(show_fib_condition ? fib_382 : na, "Fib 38.2%", color.new(color.orange, 70), linewidth=1, style=plot.style_linebr)
plot(show_fib_condition ? fib_618 : na, "Fib 61.8%", color.new(color.orange, 70), linewidth=1, style=plot.style_linebr)
plot(show_fib_condition ? fib_786 : na, "Fib 78.6%", color.new(color.orange, 70), linewidth=1, style=plot.style_linebr)

// ═══════════════════════════════════════════════════════════════════════════════
// 📈 ENHANCED PERFORMANCE METRICS DISPLAY
// ═══════════════════════════════════════════════════════════════════════════════

// Enhanced Information Table
var table info_table = table.new(position.top_right, 3, 12, bgcolor=color.new(color.white, 85), border_width=1)

if barstate.islast
    table.cell(info_table, 0, 0, "📊 ELITE STRATEGY PRO", text_color=color.black, text_size=size.small)
    
    // Risk Management Info
    table.cell(info_table, 0, 1, "Risk-Reward Ratio:", text_color=color.black, text_size=size.tiny)
    table.cell(info_table, 1, 1, str.tostring(rr_ratio, "#.##"), text_color=color.blue, text_size=size.tiny)
    
    // Commission Info
    table.cell(info_table, 0, 2, "Commission:", text_color=color.black, text_size=size.tiny)
    commission_text = enable_commission ? (commission_type_input == "Percentage" ? str.tostring(commission_rate, "#.##") + "%" : "$" + str.tostring(sl_fixed_usd, "#.##")) : "Disabled"
    table.cell(info_table, 1, 2, commission_text, text_color=enable_commission ? color.red : color.gray, text_size=size.tiny)
    
    // Stop Loss Type
    table.cell(info_table, 0, 3, "Stop Loss Type:", text_color=color.black, text_size=size.tiny)
    table.cell(info_table, 1, 3, sl_type, text_color=color.purple, text_size=size.tiny)
    
    // EMA Period
    table.cell(info_table, 0, 4, "EMA Period:", text_color=color.black, text_size=size.tiny)
    table.cell(info_table, 1, 4, str.tostring(ema_length), text_color=color.blue, text_size=size.tiny)
    
    // Current Trend
    table.cell(info_table, 0, 5, "Current Trend:", text_color=color.black, text_size=size.tiny)
    trend_text = uptrend ? "🟢 BULLISH" : downtrend ? "🔴 BEARISH" : "⚪ NEUTRAL"
    trend_color = uptrend ? color.green : downtrend ? color.red : color.gray
    table.cell(info_table, 1, 5, trend_text, text_color=trend_color, text_size=size.tiny)
    
    // ATR
    table.cell(info_table, 0, 6, "ATR:", text_color=color.black, text_size=size.tiny)
    table.cell(info_table, 1, 6, str.tostring(atr, "#.####"), text_color=color.blue, text_size=size.tiny)
    
    // Fibonacci Range
    table.cell(info_table, 0, 7, "Fib Range:", text_color=color.black, text_size=size.tiny)
    table.cell(info_table, 1, 7, str.tostring(fib_range, "#.####"), text_color=color.orange, text_size=size.tiny)
    
    // Current Position Info
    if strategy.position_size != 0
        current_pnl = strategy.position_size > 0 ? (close - entry_price) / entry_price * 100 : (entry_price - close) / entry_price * 100
        table.cell(info_table, 0, 8, "Current P&L:", text_color=color.black, text_size=size.tiny)
        pnl_color = current_pnl > 0 ? color.green : color.red
        table.cell(info_table, 1, 8, str.tostring(current_pnl, "#.##") + "%", text_color=pnl_color, text_size=size.tiny)
        
        // Risk Amount
        risk_amount = strategy.position_size > 0 ? entry_price - stop_loss : stop_loss - entry_price
        table.cell(info_table, 0, 9, "Risk per Share:", text_color=color.black, text_size=size.tiny)
        table.cell(info_table, 1, 9, str.tostring(risk_amount, "#.####"), text_color=color.orange, text_size=size.tiny)
        
        // Reward Amount
        reward_amount = strategy.position_size > 0 ? take_profit - entry_price : entry_price - take_profit
        table.cell(info_table, 0, 10, "Reward per Share:", text_color=color.black, text_size=size.tiny)
        table.cell(info_table, 1, 10, str.tostring(reward_amount, "#.####"), text_color=color.green, text_size=size.tiny)

// ═══════════════════════════════════════════════════════════════════════════════
// 🔔 ENHANCED ALERT CONDITIONS
// ═══════════════════════════════════════════════════════════════════════════════

// Alert conditions
alertcondition(long_condition, title="🟢 Elite Long Entry Pro", message="Elite Engulfing Strategy PRO: LONG signal detected with commission calculation.")

alertcondition(short_condition, title="🔴 Elite Short Entry Pro", message="Elite Engulfing Strategy PRO: SHORT signal detected with commission calculation.")

// Dynamic alerts with detailed information
if long_condition
    alert_msg = "🟢 LONG SIGNAL: Elite Engulfing Pro | Price: " + str.tostring(close, "#.####") + " | RR: " + str.tostring(rr_ratio, "#.##") + " | SL Type: " + sl_type + " | Commission: " + (enable_commission ? str.tostring(commission_rate, "#.##") + "%" : "Disabled")
    alert(alert_msg, alert.freq_once_per_bar)

if short_condition
    alert_msg = "🔴 SHORT SIGNAL: Elite Engulfing Pro | Price: " + str.tostring(close, "#.####") + " | RR: " + str.tostring(rr_ratio, "#.##") + " | SL Type: " + sl_type + " | Commission: " + (enable_commission ? str.tostring(commission_rate, "#.##") + "%" : "Disabled")
    alert(alert_msg, alert.freq_once_per_bar)