Reconocimiento avanzado de patrones comerciales y estrategias dinámicas de gestión de riesgos

EMA ATR FIBONACCI ENGULFING volatility VOLUME RISK-REWARD
Fecha de creación: 2025-06-19 13:57:50 Última modificación: 2025-06-19 13:57:50
Copiar: 4 Número de Visitas: 287
2
Seguir
319
Seguidores

Reconocimiento avanzado de patrones comerciales y estrategias dinámicas de gestión de riesgos Reconocimiento avanzado de patrones comerciales y estrategias dinámicas de gestión de riesgos

Descripción general de la estrategia

La estrategia de identificación de patrones de negociación avanzados y gestión de riesgos dinámicos es una estrategia de negociación cuantitativa que combina la tecnología de identificación de patrones de absorción precisos con un sistema de gestión de riesgos dinámicos. El núcleo de la estrategia consiste en identificar con precisión los patrones de absorción en el mercado a través de métodos de verificación matemática avanzados y combinar el índice de movimiento de 50 ciclos (EMA) como un filtro de tendencia para garantizar que la dirección de la negociación esté en consonancia con las tendencias dominantes del mercado.

Principio de estrategia

El funcionamiento de la estrategia se basa en el trabajo conjunto de varios componentes clave:

  1. Sistema de reconocimiento de tendenciasUtiliza el EMA de 50 ciclos como indicador de tendencia principal. Los precios por encima del EMA se identifican como tendencias al alza, adecuados para hacer más; los precios por debajo del EMA se identifican como tendencias a la baja, adecuados para hacer menos. Esto asegura que las operaciones siempre obedezcan la dirección dominante del mercado.

  2. Reconocimiento de formas de engullición avanzada: Estrategia para detectar la forma de absorción de la versión mejorada, que requiere que el parche actual “sume” completamente el parche anterior y asegure la calidad de la forma mediante la verificación matemática. El sistema analiza:

    • Proporción del cuerpo actual con respecto al cuerpo anterior (mínima tasa de absorción)
    • Ratio de la línea de sombra hacia arriba y hacia abajo con respecto a la entidad (máxima relación de la línea de sombra)
    • Relación entre el tamaño total de la barra actual y el rango real medio (ATR)
  3. Mecanismo de filtración múltiple

    • Filtrado de volumen de transacciones: asegúrese de que el volumen de transacciones exceda un determinado múltiplo del promedio
    • Filtrado de volatilidad: confirmación de la volatilidad del mercado a través de ATR para alcanzar las condiciones de negociación adecuadas
    • Control de calidad de la sombra: limita el tamaño de la sombra de arriba abajo para mejorar la calidad de la señal
  4. Gestión de riesgos dinámicos

    • Calculación de pérdidas: soporta varias estrategias de pérdidas basadas en niveles de Fibonacci, cantidades fijas o múltiplos de ATR
    • Objetivos de ganancias: Se pueden establecer objetivos a nivel de riesgo-retorno fijo o Fibonacci
    • Cálculo automático de las comisiones de transacción para garantizar la viabilidad de la estrategia en un entorno de transacción real

Ventajas estratégicas

A través de un análisis profundo del código, la estrategia muestra las siguientes ventajas:

  1. La hora exacta de ingresoA través de la combinación de tendencias, formas y indicadores de confirmación múltiple, la estrategia puede identificar puntos de entrada de alta calidad con ventajas estadísticas en el mercado, evitando las falsas señales que un solo indicador puede generar.

  2. La adaptación a la gestión de riesgosA diferencia de las estrategias tradicionales de parámetros fijos, el sistema de gestión de riesgos de esta estrategia se ajusta dinámicamente a las condiciones actuales del mercado y se adapta mejor a los diferentes entornos del mercado, calculando los objetivos de pérdidas y ganancias con niveles de Fibonacci o valores ATR.

  3. Apoyo visual completoLa estrategia ofrece una amplia gama de indicadores gráficos y paneles de información que incluyen señales de entrada, niveles de stop loss/profit, estado de la tendencia actual y seguimiento de P&L en tiempo real, para ayudar a los operadores a comprender de forma intuitiva el estado del mercado y el rendimiento de la estrategia.

  4. Alta personalizaciónLas estrategias ofrecen una amplia variedad de parámetros, incluyendo la duración de los EMA, el índice de absorción y el índice de retorno del riesgo, que permiten a los operadores ajustar el rendimiento de las estrategias en función de las preferencias de riesgo personales y las diferentes condiciones del mercado.

  5. Consideraciones sobre el costo de la transacción integralEl cálculo de comisiones de negociación incorporado en la estrategia, un factor importante que muchos sistemas de negociación a menudo ignoran, asegura que los resultados de la retroalimentación estén más cerca del entorno de negociación real.

Riesgo estratégico

A pesar de las múltiples ventajas de esta estrategia, existen los siguientes riesgos y limitaciones potenciales:

  1. Dependencia del entorno del mercadoLa estrategia funciona mejor en mercados con una tendencia clara, mientras que puede generar más falsas señales en mercados de orden horizontal o de alta volatilidad sin dirección. La solución es evaluar el estado del mercado en un marco de tiempo más alto antes de usar la estrategia, o agregar un filtro de estructura de mercado adicional.

  2. Trampas de optimización de parámetros: Los parámetros de optimización excesiva pueden conducir a la adaptación de la curva y a un mal desempeño en un entorno de mercado futuro. Se recomienda el uso de pruebas de prospección o pruebas de robustez en diferentes condiciones de mercado para verificar la validez de los parámetros.

  3. Detener el riesgo de rupturaEn condiciones extremas de volatilidad o falta de liquidez en el mercado, el stop actual puede sufrir un deslizamiento por encima de la pérdida esperada. Este riesgo puede reducirse aumentando el área de amortiguamiento del stop o utilizando una escala de posición más conservadora.

  4. Retraso en los indicadores técnicos: La EMA y otros indicadores técnicos son inherentemente retrasados y pueden no reaccionar cuando el mercado cambia rápidamente. Se recomienda que se combine con un análisis de un marco de tiempo más alto o que se agregue un indicador de alerta temprana para compensar esta deficiencia.

  5. La calidad de las transaccionesLas estrategias solo consideran el tamaño del volumen de transacciones y no la estructura y la calidad del volumen de transacciones, lo que puede ser engañoso en ciertas condiciones de mercado. Se puede considerar agregar un análisis de distribución de volumen de transacciones o un indicador de flujo de fondos para aumentar la profundidad del análisis de volumen de transacciones.

Dirección de optimización de la estrategia

Basado en el análisis de código, la estrategia puede ser optimizada en las siguientes direcciones:

  1. El estado del mercado se adapta

    • Realizar la función de identificación de la estructura del mercado, utilizando diferentes conjuntos de parámetros en los mercados de tendencia y de intervalo
    • Introducción de índices de volatilidad de mercado (VIX) u otros indicadores de sentimiento de mercado para ajustar automáticamente los parámetros de riesgo durante períodos de alta volatilidad
    • La razón: esto permitirá a las estrategias adaptarse inteligentemente a diferentes entornos de mercado, mejorando la estabilidad general.
  2. Análisis de marcos de tiempo múltiples

    • Mecanismo de confirmación de tendencias para un marco de tiempo más alto
    • Precisión de entrada optimizada con marcos de tiempo más bajos
    • La razón: el análisis de múltiples marcos de tiempo puede mejorar significativamente la precisión de la identificación de tendencias y reducir el comercio en contra
  3. Análisis de volumen de transacciones de alto nivel

    • Introducción de la media móvil ponderada por volumen de transacciones (VWMA) como confirmación de tendencia adicional
    • Analice la presión de compra y venta en lugar de solo el volumen total de transacciones
    • La razón: un análisis más detallado de los volúmenes de transacciones puede proporcionar una visión más profunda del comportamiento de los participantes en el mercado.
  4. Aprendizaje automático

    • Optimización automática de parámetros con un algoritmo de aprendizaje automático simple
    • Características de las formas de absorción mejor identificadas a partir de datos históricos
    • La razón: el aprendizaje automático puede identificar patrones y correlaciones sutiles que son difíciles de detectar para los humanos
  5. Mejora de la gestión de riesgos

    • Realizar ajustes dinámicos en el tamaño de las posiciones basados en el valor neto de la cuenta
    • Añadir límites de riesgo de día/semana/mes
    • Introducción de la función de equilibrio de ganancias y pérdidas
    • La razón: una gestión de riesgos más avanzada es la base para el éxito de las operaciones a largo plazo

Resumir

La estrategia de identificación de patrones de negociación avanzados y gestión de riesgos dinámicos es un sistema de negociación cuidadosamente diseñado que crea un marco de negociación integral mediante la fusión de la técnica de análisis de formas de absorción tradicional con métodos de cuantificación modernos. La ventaja central de la estrategia reside en su mecanismo de confirmación de señales multidimensional y su sistema de gestión de riesgos adaptable, que le permite mantener un rendimiento relativamente estable en diferentes condiciones de mercado.

La estrategia mejora significativamente la calidad de las señales de entrada a través de múltiples mecanismos como el filtro de tendencias de 50 EMA, la identificación de formas de absorción avanzadas, el volumen de operaciones y la confirmación de la volatilidad. Al mismo tiempo, los objetivos dinámicos de stop loss y ganancias calculados a través de los niveles de Fibonacci o los múltiplos de ATR proporcionan una clara estructura de riesgo y ganancias para cada operación.

A pesar de las limitaciones inherentes, como la dependencia del entorno del mercado y el atraso de los indicadores técnicos, la estrategia tiene el potencial de mejorar aún más su estabilidad y adaptabilidad a través de direcciones de optimización sugeridas, como la adaptación automática de los estados del mercado, el análisis de múltiples marcos de tiempo y la mejora del aprendizaje automático. Para los operadores experimentados, es un sistema de negociación de nivel profesional que ofrece funciones completas, mientras que para los novatos, puede servir como una herramienta educativa para aprender conceptos de negociación avanzados y principios de gestión de riesgos.

Código Fuente de la Estrategia
/*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)