ڈبل ایکسپونیشنل موونگ ایوریج باؤنس مومینٹم ٹریڈنگ حکمت عملی

EMA SL TP R:R 趋势一致性 反弹交易 动量交易 风险管理 蜡烛图形态
تخلیق کی تاریخ: 2025-06-03 10:59:06 آخر میں ترمیم کریں: 2025-06-03 10:59:06
کاپی: 0 کلکس کی تعداد: 281
2
پر توجہ دیں
319
پیروکار

ڈبل ایکسپونیشنل موونگ ایوریج باؤنس مومینٹم ٹریڈنگ حکمت عملی ڈبل ایکسپونیشنل موونگ ایوریج باؤنس مومینٹم ٹریڈنگ حکمت عملی

جائزہ

یہ حکمت عملی ایک باہمی اشاریہ متحرک اوسط ((EMA) کی تشکیل کی قیمتوں کا استعمال کرتی ہے جس میں اعلی امکانات کے ساتھ واپسی کے مواقع کی نشاندہی کی جاتی ہے۔ یہ ایک سادہ اوسط سے تجاوز کرنے کی حکمت عملی نہیں ہے ، بلکہ قیمتوں کو ای ایم اے سے اچھالنے اور مضبوط حرکت پیدا کرنے کے لئے تلاش کرنے کا وقت ہے۔ یہ حکمت عملی تجارتی زونوں کی تعمیر کے لئے 12 اور 21 دوروں کے ای ایم اے کا استعمال کرتی ہے ، اور مارکیٹ کی نقل و حرکت کو پکڑنے کے لئے گراف کی شکل ، رجحان کی مستقل مزاجی اور ایک درست رسک مینجمنٹ سسٹم کے ساتھ ملتی ہے۔

حکمت عملی کا اصول

اس حکمت عملی کا بنیادی اصول یہ ہے کہ قیمتوں کو ای ایم اے سے اچھالنے کی شناخت کرکے انٹری سگنل کی تلاش کی جائے۔ یہ 12 اور 21 دوروں کے ای ایم اے کا استعمال کرتے ہوئے اوپر اور نیچے ٹریڈنگ بینڈ بناتا ہے ، اور ای ایم اے کے متعلقہ مقام کے مطابق مارکیٹ کی سمت کا تعین کرتا ہے۔

جب ای ایم اے 12 > ای ایم اے 21 ، مارکیٹ میں منفی ماحول ہوتا ہے (گرین بینڈ) ، تو ہم متعدد مواقع تلاش کرتے ہیں۔ متعدد شرائط میں شامل ہیں: قیمت کی نچلی سائے کی لائن ای ایم اے کی حد کو چھوتی ہے ، ایک مضبوط منفی اثر پیدا کرتی ہے (بنیادی طور پر نیچے کی سائے سے زیادہ ہے) ، اوپر کی سائے کو کم سے کم کرنا (بنیادی طور پر نیچے کی سائے سے زیادہ ہے) ، دو ای ایم اے سے اوپر کی قیمتوں کا اختتام ، پچھلی سائے نیچے کی حد سے نیچے نہیں ہے ، اور متعدد جڑیں مسلسل مثبت رجحان کی مستقل مزاجی کو برقرار رکھتی ہیں۔

جب ای ایم اے 12 < ای ایم اے 21 ہے ، تو مارکیٹ نیچے کی طرف جانے والے ماحول میں ہے (ریڈ بینڈ) ، ہم کم کرنے کے مواقع تلاش کرتے ہیں۔ کم کرنے کے شرائط میں شامل ہیں: قیمت کی اوپر کی سائے کی لائن ای ایم اے کی حد کو چھوتی ہے ، مضبوط نیچے کی لائن تشکیل دیتی ہے (اوپر کی سائے کی لائن سے بڑی ہستی) ، نیچے کی سائے کو کم سے کم کرنا (بڑے پیمانے پر 2٪ سے کم) ، بند ہونے کی قیمت دو ای ایم اے سے کم ہے ، پچھلی سلائی اوپر کی حد سے نہیں نکلی ، اور متعدد جڑیں مسلسل نیچے کی طرف رجحان کی مستقل مزاجی کو برقرار رکھتی ہیں۔

حکمت عملی بلٹ میں فکسڈ رسک ریٹرن کے لئے رسک مینجمنٹ سسٹم ، پہلے سے طے شدہ 3: 1 ، اسٹاپ نقصان کی ترتیب پچھلے سیٹ کی اونچائی / کم سے کم ہے ، اسٹاپ نقصان خود بخود رسک ریٹرن کے حساب سے حساب کیا جاتا ہے۔

اسٹریٹجک فوائد

اس حکمت عملی کے کئی اہم فوائد ہیں:

  1. اعلی جیت کا امکان: یہ حکمت عملی ای ایم اے بینڈ کے پیچھے آنے والے مضبوط متحرک رجحانات کو پکڑنے کے ذریعہ اعلی امکانات کے ساتھ کامیاب تجارتی مواقع کی نشاندہی کرنے میں کامیاب ہے۔

  2. واضح داخلے اور باہر نکلنے کے قواعد: حکمت عملی واضح تجارت کے حالات فراہم کرتی ہے ، جس سے موضوعی فیصلے اور جذباتی فیصلوں کا اثر کم ہوتا ہے۔

  3. بہترین رسک مینجمنٹ: فکسڈ رسک ریٹرن ریٹ اور خودکار اسٹاپ نقصان کی روک تھام کی ترتیبات کا استعمال کرتے ہوئے ، اس بات کو یقینی بنائیں کہ ہر تجارت کا خطرہ کنٹرول میں ہے۔

  4. رجحانات کو فائدہ اٹھانا: حکمت عملی صرف رجحانات کی سمت میں تجارت کرتی ہے ، اس سے متضاد آپریشن کے اعلی خطرے سے بچنے کے لئے۔

  5. ایک سے زیادہ ٹائم فریموں کے لئے موزوں: یہ حکمت عملی مختلف ٹائم فریموں پر موثر طریقے سے کام کرتی ہے ، جس سے لچکدار تجارتی اختیارات فراہم ہوتے ہیں۔

  6. مکمل انتباہ کا نظام: تجارتی مواقع کو ضائع نہ کرنے کے لئے تفصیلی تجارتی سگنل کی یاد دہانی کی خصوصیت۔

  7. بصری معاونت: پس منظر کے رنگ میں تبدیلی اور لیبل اشارے کے ذریعے ، تجارتی سگنل اور شرائط کی حیثیت کو بصری طور پر ظاہر کریں۔

اسٹریٹجک رسک

اس حکمت عملی کے عمدہ ڈیزائن کے باوجود ، مندرجہ ذیل ممکنہ خطرات موجود ہیں:

  1. جھٹکا دینے والی مارکیٹ کا خطرہ: کراس ڈسک یا جھٹکا دینے والی مارکیٹوں میں ، ای ایم اے بینڈ تنگ ہوسکتے ہیں ، جس سے بار بار لیکن کم معیار کے سگنل پیدا ہوتے ہیں ، جس کی وجہ سے مسلسل نقصان ہوتا ہے۔

  2. شدید قیمتوں کا خطرہ: اہم خبروں یا واقعات کے بعد ، مارکیٹوں میں قیمتوں میں اضافہ ہوسکتا ہے ، جس سے روک تھام کا نقطہ ختم ہوجاتا ہے ، جس سے توقع سے زیادہ نقصان ہوتا ہے۔

  3. پیرامیٹرز کو زیادہ سے زیادہ بہتر بنانا: حکمت عملی کے پیرامیٹرز کو زیادہ سے زیادہ بہتر بنانا ممکن ہے کہ اس کی وجہ سے سکرین فٹ ہوجائے ، جس کی وجہ سے حکمت عملی حقیقی وقت کی تجارت میں خراب کارکردگی کا مظاہرہ کرے گی۔

  4. رجحانات کی شناخت میں تاخیر: EMA ایک پیچھے رہ جانے والے اشارے کے طور پر ، رجحانات کے موڑ پر سست رد عمل کا سبب بن سکتا ہے ، جس کی وجہ سے بہترین انٹری پوائنٹس سے محروم ہوجاتے ہیں یا باہر نکلنے میں تاخیر ہوتی ہے۔

  5. اسٹاپ نقصان کا خطرہ: مارکیٹ میں شور کی وجہ سے اسٹاپ نقصان کا خطرہ ہوسکتا ہے ، جس کی وجہ سے قیمتوں میں غیر ضروری نقصانات کا باعث بننے کے لئے قیمتوں میں واپسی کی توقع کی جاتی ہے۔

حل میں شامل ہیں: ہلچل والی مارکیٹ میں تجارت کو روکنا۔ اتار چڑھاؤ کی شرح فلٹر کا استعمال کرتے ہوئے کم معیار کے اشارے سے بچنا۔ دوسرے اشارے کے ساتھ مل کر رجحانات کی تصدیق کرنا۔ باقاعدگی سے پیمائش اور پیرامیٹرز کو بہتر بنانا۔ ٹریکنگ اسٹاپ کا استعمال کرنے پر غور کرنا۔

حکمت عملی کی اصلاح کی سمت

اس حکمت عملی کو مندرجہ ذیل طریقوں سے بہتر بنایا جاسکتا ہے:

  1. متحرک رسک مینجمنٹ: مارکیٹ میں اتار چڑھاؤ کے مطابق خود بخود رسک ریٹرن ریٹ اور پوزیشن سائز کو ایڈجسٹ کریں ، تاکہ اعلی اتار چڑھاؤ والے ماحول میں رسک کے دروازے کو کم کیا جاسکے۔

  2. اعلی درجے کا فلٹر متعارف کرایا گیا: کم اتار چڑھاؤ کی مدت کے سگنل کو فلٹر کرنے کے لئے اے ٹی آر ((اوسط حقیقی طول و عرض) اشارے کے ساتھ مل کر؛ قیمت کی واپسی کی تاثیر کی توثیق کرنے کے لئے حجم کی تصدیق شامل کریں۔

  3. کثیر ٹائم پیکیج تجزیہ: اعلی ٹائم پیکیج کی رجحان کی سمت کو ضم کرنے کے لئے ایک اضافی فلٹرنگ شرط کے طور پر ، صرف اس وقت داخل کریں جب متعدد ٹائم پیکیج رجحانات ایک جیسے ہوں۔

  4. مشین لرننگ کی اصلاح: مشین لرننگ الگورتھم کا استعمال کرتے ہوئے پیرامیٹرز کو متحرک طور پر ایڈجسٹ کریں ، مختلف مارکیٹ کے حالات کے مطابق بہترین پیرامیٹرز کا مجموعہ اپنائیں۔

  5. ٹریکنگ اسٹاپ نقصان کی تکمیل: منافع کی ایک خاص سطح تک پہنچنے کے بعد ، ٹریکنگ اسٹاپ نقصان کا طریقہ کار نافذ کریں ، منافع کے کچھ حصوں کو لاک کریں جبکہ رجحان کو جاری رکھنے کی اجازت دیں۔

  6. جزوی منافع بخش حکمت عملی: منافع بخش حکمت عملی پر عمل درآمد ، مختلف ہدف کی قیمتوں پر تدریجی طور پر پوزیشن کم کرنا ، مجموعی طور پر رسک ریٹرن کی کارکردگی کو بہتر بنانا۔

ان اصلاحات سے حکمت عملی کی استحکام ، موافقت اور طویل مدتی منافع میں اضافہ ہوسکتا ہے۔

خلاصہ کریں۔

بائنری انڈیکس حرکت پذیر اوسط بینڈ باؤنس ٹریڈنگ حکمت عملی ایک جامع تجارتی نظام ہے جو تکنیکی تجزیہ ، گرافک پیٹرن کی شناخت اور سخت رسک مینجمنٹ کو جوڑتا ہے۔ یہ مارکیٹ کے مواقع پر قبضہ کرنے کے لئے ایک دھماکہ خیز حرکت پذیری کے ساتھ مارکیٹ کے مواقع کی نشاندہی کرتا ہے جس میں قیمتوں میں ای ایم اے بینڈ سے اچھالنے کا امکان ہوتا ہے۔ حکمت عملی کا بنیادی فائدہ اس کے واضح تجارتی قواعد ، ٹھوس رسک ریٹرن فریم ورک اور رجحانات کی مستقل مزاجی کی ضروریات میں ہے ، جس سے یہ مختلف قسم کے مارکیٹ کے ماحول اور دورانیہ کے لئے موزوں ہے۔

اگرچہ کچھ ممکنہ خطرات موجود ہیں ، لیکن تجویز کردہ اصلاحاتی اقدامات پر عمل پیرا ہونے سے ، تاجر حکمت عملی کی استحکام اور منافع بخش صلاحیت کو مزید بہتر بنا سکتے ہیں۔ یہ حکمت عملی خاص طور پر ان تاجروں کے لئے موزوں ہے جو سسٹم ، نظم و ضبط اور خطرے سے نمٹنے کے قابل تجارت کے طریقوں کی تلاش میں ہیں۔

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2025-05-26 00:00:00
end: 2025-06-02 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("Enhanced EMA Band Rejection Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Input parameters
ema12_length = input.int(12, title="EMA 12 Length")
ema21_length = input.int(21, title="EMA 21 Length")
max_wick_percent = input.float(2.0, title="Max Wick % at High/Low", minval=0.0, maxval=10.0)
risk_reward_ratio = input.float(3.0, title="Risk/Reward Ratio (R)", minval=1.0, maxval=10.0)
trend_consistency_bars = input.int(5, title="Trend Consistency Required (Bars)", minval=1, maxval=20)

// Notification Settings
enable_notifications = input.bool(true, title="Enable Notifications", group="Notifications")
notify_on_entry = input.bool(true, title="Notify on Trade Entry", group="Notifications")
notify_on_exit = input.bool(true, title="Notify on Trade Exit", group="Notifications")
notify_on_setup = input.bool(false, title="Notify on Potential Setup (Pre-Entry)", group="Notifications")
notify_on_failed_conditions = input.bool(false, title="Notify on Failed Conditions", group="Notifications")

// Calculate EMAs
ema12 = ta.ema(close, ema12_length)
ema21 = ta.ema(close, ema21_length)

// Determine upper and lower EMA bands
ema_upper = math.max(ema12, ema21)
ema_lower = math.min(ema12, ema21)

// Plot EMAs
plot(ema12, color=color.blue, linewidth=2, title="EMA 12")
plot(ema21, color=color.red, linewidth=2, title="EMA 21")

// Calculate candle components
body_size = math.abs(close - open)
upper_wick = high - math.max(open, close)
lower_wick = math.min(open, close) - low
candle_range = high - low

// Calculate wick percentages
upper_wick_percent = candle_range > 0 ? (upper_wick / candle_range) * 100 : 0
lower_wick_percent = candle_range > 0 ? (lower_wick / candle_range) * 100 : 0

// Determine EMA trend direction
ema_bullish = ema12 > ema21  // Green bands - bullish trend
ema_bearish = ema12 < ema21  // Red bands - bearish trend

// Check trend consistency for required number of bars
bullish_consistency_check = true
bearish_consistency_check = true

for i = 0 to trend_consistency_bars - 1
    ema12_past = ta.ema(close[i], ema12_length)
    ema21_past = ta.ema(close[i], ema21_length)
    if ema12_past <= ema21_past
        bullish_consistency_check := false
    if ema12_past >= ema21_past
        bearish_consistency_check := false

// Final trend conditions with consistency requirement
ema_bullish_consistent = ema_bullish and bullish_consistency_check
ema_bearish_consistent = ema_bearish and bearish_consistency_check

// NEW RULE: Previous candle close position relative to bands
prev_close_above_upper_band = close[1] > ema_upper[1]
prev_close_below_lower_band = close[1] < ema_lower[1]
prev_close_within_bands = close[1] >= ema_lower[1] and close[1] <= ema_upper[1]

// Long setup conditions (only when EMAs are bullish/green consistently)
long_wick_condition = low <= ema_lower or (low <= ema_upper and low >= ema_lower)
long_body_condition = body_size >= lower_wick
long_wick_percent_condition = upper_wick_percent <= max_wick_percent
long_bullish_candle = close > open
long_trend_condition = ema_bullish_consistent  // Only long when bands are consistently green
long_close_above_bands = close > ema_upper  // NEW: Close must be above both EMAs
// Previous candle must not have closed below the lower band
long_prev_close_condition = not prev_close_below_lower_band
long_setup = long_wick_condition and long_body_condition and long_wick_percent_condition and long_bullish_candle and long_trend_condition and long_close_above_bands and long_prev_close_condition

// Short setup conditions (only when EMAs are bearish/red consistently)
short_wick_condition = high >= ema_upper or (high >= ema_lower and high <= ema_upper)
short_body_condition = body_size >= upper_wick
short_wick_percent_condition = lower_wick_percent <= max_wick_percent
short_bearish_candle = close < open
short_trend_condition = ema_bearish_consistent  // Only short when bands are consistently red
short_close_below_bands = close < ema_lower  // NEW: Close must be below both EMAs
// Previous candle must not have closed above the upper band
short_prev_close_condition = not prev_close_above_upper_band
short_setup = short_wick_condition and short_body_condition and short_wick_percent_condition and short_bearish_candle and short_trend_condition and short_close_below_bands and short_prev_close_condition

// Entry conditions
var float long_sl = na
var float short_sl = na
var float long_tp = na
var float short_tp = na

if long_setup and strategy.position_size == 0
    strategy.entry("Long", strategy.long)
    long_sl := low
    risk_amount = close - long_sl
    long_tp := close + (risk_amount * risk_reward_ratio)
    label.new(bar_index, low, "LONG", style=label.style_label_up, color=color.green, size=size.small)
    
    // Entry Notification
    if enable_notifications and notify_on_entry
        alert("🟢 LONG ENTRY SIGNAL\n" + 
              "Symbol: " + syminfo.ticker + "\n" + 
              "Price: " + str.tostring(close, "#.####") + "\n" + 
              "Stop Loss: " + str.tostring(long_sl, "#.####") + "\n" + 
              "Take Profit: " + str.tostring(long_tp, "#.####") + "\n" + 
              "Risk/Reward: " + str.tostring(risk_reward_ratio, "#.##") + "R\n" + 
              "Time: " + str.tostring(time), alert.freq_once_per_bar)

if short_setup and strategy.position_size == 0
    strategy.entry("Short", strategy.short)
    short_sl := high
    risk_amount = short_sl - close
    short_tp := close - (risk_amount * risk_reward_ratio)
    label.new(bar_index, high, "SHORT", style=label.style_label_down, color=color.red, size=size.small)
    
    // Entry Notification
    if enable_notifications and notify_on_entry
        alert("🔴 SHORT ENTRY SIGNAL\n" + 
              "Symbol: " + syminfo.ticker + "\n" + 
              "Price: " + str.tostring(close, "#.####") + "\n" + 
              "Stop Loss: " + str.tostring(short_sl, "#.####") + "\n" + 
              "Take Profit: " + str.tostring(short_tp, "#.####") + "\n" + 
              "Risk/Reward: " + str.tostring(risk_reward_ratio, "#.##") + "R\n" + 
              "Time: " + str.tostring(time), alert.freq_once_per_bar)

// Exit conditions with fixed R:R
if strategy.position_size > 0
    // Long position - fixed stop loss and take profit
    strategy.exit("Long Exit", "Long", stop=long_sl, limit=long_tp)
    
    // Exit Notifications
    if enable_notifications and notify_on_exit
        if close <= long_sl
            alert("🛑 LONG STOP LOSS HIT\n" + 
                  "Symbol: " + syminfo.ticker + "\n" + 
                  "Exit Price: " + str.tostring(close, "#.####") + "\n" + 
                  "Loss: " + str.tostring(close - strategy.position_avg_price, "#.####") + "\n" + 
                  "Time: " + str.tostring(time), alert.freq_once_per_bar)
        if close >= long_tp
            alert("🎯 LONG TAKE PROFIT HIT\n" + 
                  "Symbol: " + syminfo.ticker + "\n" + 
                  "Exit Price: " + str.tostring(close, "#.####") + "\n" + 
                  "Profit: " + str.tostring(close - strategy.position_avg_price, "#.####") + "\n" + 
                  "Time: " + str.tostring(time), alert.freq_once_per_bar)

if strategy.position_size < 0
    // Short position - fixed stop loss and take profit
    strategy.exit("Short Exit", "Short", stop=short_sl, limit=short_tp)
    
    // Exit Notifications
    if enable_notifications and notify_on_exit
        if close >= short_sl
            alert("🛑 SHORT STOP LOSS HIT\n" + 
                  "Symbol: " + syminfo.ticker + "\n" + 
                  "Exit Price: " + str.tostring(close, "#.####") + "\n" + 
                  "Loss: " + str.tostring(strategy.position_avg_price - close, "#.####") + "\n" + 
                  "Time: " + str.tostring(time), alert.freq_once_per_bar)
        if close <= short_tp
            alert("🎯 SHORT TAKE PROFIT HIT\n" + 
                  "Symbol: " + syminfo.ticker + "\n" + 
                  "Exit Price: " + str.tostring(close, "#.####") + "\n" + 
                  "Profit: " + str.tostring(strategy.position_avg_price - close, "#.####") + "\n" + 
                  "Time: " + str.tostring(time), alert.freq_once_per_bar)

// Plot stop levels and take profit levels
plot(strategy.position_size > 0 ? long_sl : na, color=color.red, linewidth=2, style=plot.style_line, title="Long SL")
plot(strategy.position_size < 0 ? short_sl : na, color=color.red, linewidth=2, style=plot.style_line, title="Short SL")
plot(strategy.position_size > 0 ? long_tp : na, color=color.green, linewidth=2, style=plot.style_line, title="Long TP")
plot(strategy.position_size < 0 ? short_tp : na, color=color.green, linewidth=2, style=plot.style_line, title="Short TP")

// Additional Notification Logic
// Potential Setup Notifications (when most conditions are met but not all)
long_potential_setup = long_wick_condition and long_body_condition and long_wick_percent_condition and long_bullish_candle and long_trend_condition and long_prev_close_condition and not long_close_above_bands
short_potential_setup = short_wick_condition and short_body_condition and short_wick_percent_condition and short_bearish_candle and short_trend_condition and short_prev_close_condition and not short_close_below_bands

if enable_notifications and notify_on_setup and strategy.position_size == 0
    if long_potential_setup
        alert("⚠️ POTENTIAL LONG SETUP\n" + 
              "Symbol: " + syminfo.ticker + "\n" + 
              "Price: " + str.tostring(close, "#.####") + "\n" + 
              "Status: Close needs to be above " + str.tostring(ema_upper, "#.####") + "\n" + 
              "Current Close: " + str.tostring(close, "#.####") + "\n" + 
              "Time: " + str.tostring(time), alert.freq_once_per_bar)
    
    if short_potential_setup
        alert("⚠️ POTENTIAL SHORT SETUP\n" + 
              "Symbol: " + syminfo.ticker + "\n" + 
              "Price: " + str.tostring(close, "#.####") + "\n" + 
              "Status: Close needs to be below " + str.tostring(ema_lower, "#.####") + "\n" + 
              "Current Close: " + str.tostring(close, "#.####") + "\n" + 
              "Time: " + str.tostring(time), alert.freq_once_per_bar)

// Failed Conditions Notifications (for debugging)
if enable_notifications and notify_on_failed_conditions and strategy.position_size == 0
    if long_wick_condition and long_body_condition and long_wick_percent_condition and long_bullish_candle and not long_trend_condition
        alert("❌ LONG SETUP FAILED\n" + 
              "Symbol: " + syminfo.ticker + "\n" + 
              "Reason: " + (not ema_bullish ? "EMA trend bearish" : "EMA trend not consistent") + "\n" + 
              "EMA12: " + str.tostring(ema12, "#.####") + "\n" + 
              "EMA21: " + str.tostring(ema21, "#.####") + "\n" + 
              "Time: " + str.tostring(time), alert.freq_once_per_bar)
    
    if short_wick_condition and short_body_condition and short_wick_percent_condition and short_bearish_candle and not short_trend_condition
        alert("❌ SHORT SETUP FAILED\n" + 
              "Symbol: " + syminfo.ticker + "\n" + 
              "Reason: " + (not ema_bearish ? "EMA trend bullish" : "EMA trend not consistent") + "\n" + 
              "EMA12: " + str.tostring(ema12, "#.####") + "\n" + 
              "EMA21: " + str.tostring(ema21, "#.####") + "\n" + 
              "Time: " + str.tostring(time), alert.freq_once_per_bar)
bgcolor(long_setup ? color.new(color.green, 90) : na, title="Long Setup")
bgcolor(short_setup ? color.new(color.red, 90) : na, title="Short Setup")
// Show when previous close condition fails
bgcolor(long_wick_condition and long_body_condition and long_wick_percent_condition and long_bullish_candle and long_trend_condition and prev_close_below_lower_band ? color.new(color.orange, 95) : na, title="Long Rejected by Prev Close")
bgcolor(short_wick_condition and short_body_condition and short_wick_percent_condition and short_bearish_candle and short_trend_condition and prev_close_above_upper_band ? color.new(color.orange, 95) : na, title="Short Rejected by Prev Close")

// Detailed debugging for failed conditions
long_all_conditions_except_prev = long_wick_condition and long_body_condition and long_wick_percent_condition and long_bullish_candle and long_trend_condition and long_close_above_bands
bgcolor(long_all_conditions_except_prev and prev_close_below_lower_band ? color.new(color.purple, 90) : na, title="Long Failed: Prev Close Below Band")
bgcolor(long_wick_condition and not long_body_condition ? color.new(color.yellow, 90) : na, title="Long Failed: Body Too Small")
bgcolor(long_wick_condition and long_body_condition and not long_wick_percent_condition ? color.new(color.blue, 90) : na, title="Long Failed: Upper Wick Too Big")
bgcolor(long_wick_condition and long_body_condition and long_wick_percent_condition and not long_bullish_candle ? color.new(color.gray, 90) : na, title="Long Failed: Not Bullish Candle")
bgcolor(long_wick_condition and long_body_condition and long_wick_percent_condition and long_bullish_candle and ema_bullish and not ema_bullish_consistent ? color.new(color.fuchsia, 90) : na, title="Long Failed: Trend Not Consistent")
bgcolor(long_wick_condition and long_body_condition and long_wick_percent_condition and long_bullish_candle and not ema_bullish ? color.new(color.maroon, 90) : na, title="Long Failed: EMA Trend Bearish")
bgcolor(long_wick_condition and long_body_condition and long_wick_percent_condition and long_bullish_candle and long_trend_condition and not long_close_above_bands ? color.new(color.lime, 90) : na, title="Long Failed: Close Not Above Bands")

// Similar debugging for shorts
short_all_conditions_except_prev = short_wick_condition and short_body_condition and short_wick_percent_condition and short_bearish_candle and short_trend_condition and short_close_below_bands
bgcolor(short_all_conditions_except_prev and prev_close_above_upper_band ? color.new(color.purple, 90) : na, title="Short Failed: Prev Close Above Band")
bgcolor(short_wick_condition and short_body_condition and short_wick_percent_condition and short_bearish_candle and short_trend_condition and not short_close_below_bands ? color.new(color.aqua, 90) : na, title="Short Failed: Close Not Below Bands")

// Enhanced table for debugging
if barstate.islast
    var table debug_table = table.new(position.top_right, 2, 19, bgcolor=color.white, border_width=1)
    table.cell(debug_table, 0, 0, "Condition", text_color=color.black, bgcolor=color.gray)
    table.cell(debug_table, 1, 0, "Value", text_color=color.black, bgcolor=color.gray)
    table.cell(debug_table, 0, 1, "Body Size", text_color=color.black)
    table.cell(debug_table, 1, 1, str.tostring(body_size, "#.##"), text_color=color.black)
    table.cell(debug_table, 0, 2, "Upper Wick", text_color=color.black)
    table.cell(debug_table, 1, 2, str.tostring(upper_wick, "#.##"), text_color=color.black)
    table.cell(debug_table, 0, 3, "Lower Wick", text_color=color.black)
    table.cell(debug_table, 1, 3, str.tostring(lower_wick, "#.##"), text_color=color.black)
    table.cell(debug_table, 0, 4, "Upper Wick %", text_color=color.black)
    table.cell(debug_table, 1, 4, str.tostring(upper_wick_percent, "#.##") + "%", text_color=color.black)
    table.cell(debug_table, 0, 5, "Lower Wick %", text_color=color.black)
    table.cell(debug_table, 1, 5, str.tostring(lower_wick_percent, "#.##") + "%", text_color=color.black)
    table.cell(debug_table, 0, 6, "EMA Upper", text_color=color.black)
    table.cell(debug_table, 1, 6, str.tostring(ema_upper, "#.##"), text_color=color.black)
    table.cell(debug_table, 0, 7, "EMA Lower", text_color=color.black)
    table.cell(debug_table, 1, 7, str.tostring(ema_lower, "#.##"), text_color=color.black)
    table.cell(debug_table, 0, 8, "R:R Ratio", text_color=color.black)
    table.cell(debug_table, 1, 8, str.tostring(risk_reward_ratio, "#.##") + "R", text_color=color.black)
    table.cell(debug_table, 0, 9, "Position", text_color=color.black)
    table.cell(debug_table, 1, 9, strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "NONE", text_color=color.black)
    // NEW DEBUG INFO
    table.cell(debug_table, 0, 10, "Prev Close", text_color=color.black)
    table.cell(debug_table, 1, 10, str.tostring(close[1], "#.##"), text_color=color.black)
    table.cell(debug_table, 0, 11, "Prev Above Upper", text_color=color.black)
    table.cell(debug_table, 1, 11, prev_close_above_upper_band ? "YES" : "NO", text_color=color.black)
    table.cell(debug_table, 0, 12, "Prev Below Lower", text_color=color.black)
    table.cell(debug_table, 1, 12, prev_close_below_lower_band ? "YES" : "NO", text_color=color.black)
    table.cell(debug_table, 0, 13, "Prev Within Bands", text_color=color.black)
    table.cell(debug_table, 1, 13, prev_close_within_bands ? "YES" : "NO", text_color=color.black)
    // NEW: Trend consistency info
    table.cell(debug_table, 0, 14, "Bullish Consistent", text_color=color.black)
    table.cell(debug_table, 1, 14, ema_bullish_consistent ? "YES" : "NO", text_color=color.black)
    table.cell(debug_table, 0, 15, "Bearish Consistent", text_color=color.black)
    table.cell(debug_table, 1, 15, ema_bearish_consistent ? "YES" : "NO", text_color=color.black)
    table.cell(debug_table, 0, 16, "Consistency Bars", text_color=color.black)
    table.cell(debug_table, 1, 16, str.tostring(trend_consistency_bars), text_color=color.black)
    // NEW: Close position relative to bands
    table.cell(debug_table, 0, 17, "Close Above Upper", text_color=color.black)
    table.cell(debug_table, 1, 17, close > ema_upper ? "YES" : "NO", text_color=color.black)
    table.cell(debug_table, 0, 18, "Close Below Lower", text_color=color.black)
    table.cell(debug_table, 1, 18, close < ema_lower ? "YES" : "NO", text_color=color.black)