Heiken Asch رجحان کی پیروی کی حکمت عملی: کثیر سطحی سٹاپ نقصان کے طریقہ کار کے ساتھ ایک کثیر مدتی رجحان کی شناخت کا نظام

supertrend ADX ATR HEIKEN ASHI DMI
تخلیق کی تاریخ: 2025-04-14 11:31:37 آخر میں ترمیم کریں: 2025-04-14 11:31:37
کاپی: 1 کلکس کی تعداد: 502
2
پر توجہ دیں
319
پیروکار

Heiken Asch رجحان کی پیروی کی حکمت عملی: کثیر سطحی سٹاپ نقصان کے طریقہ کار کے ساتھ ایک کثیر مدتی رجحان کی شناخت کا نظام Heiken Asch رجحان کی پیروی کی حکمت عملی: کثیر سطحی سٹاپ نقصان کے طریقہ کار کے ساتھ ایک کثیر مدتی رجحان کی شناخت کا نظام

جائزہ

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

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

ہیکناش ٹرینڈ ٹریکنگ کی حکمت عملی تین بنیادی تکنیکی اشارے پر مبنی ہے:

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

  2. سپر ٹرینڈ اشارے فلٹر کریں: سسٹم سپر ٹرینڈ اشارے ((پہلے سے طے شدہ فیکٹر: 3.0 ، اے ٹی آر دورانیہ: 10) کا استعمال کرتا ہے تاکہ ممکنہ رجحان کی سمت کی تصدیق کی جاسکے۔ داخلہ سگنل کو سپر ٹرینڈ کی سمت کے مطابق ہونا چاہئے ، جس سے سگنل کی وشوسنییتا میں اضافہ ہوتا ہے اور غلط تجارت میں کمی واقع ہوتی ہے۔

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

اس نظام میں داخل ہونے اور باہر نکلنے کے واضح اصول ہیں:

  • داخلہ سگنل: جب مندرجہ ذیل شرائط پوری ہوں تو تشکیل پاتی ہے: ((1) بغیر کسی نیچے کی سائے والی سبز ہیکن اشیا (((زیادہ کریں) یا بغیر کسی اوپر کی سائے والی سرخ ہیکن اشیا (((خالی کریں)) ؛ ((2) سپر ٹرینڈ سمت کی تصدیق؛ ((3) ADX threshold (((اگر چالو ہو))
  • باہر نکلنے کا اشارہجب مخالف سمت میں ایک بظاہر تار تار نظر آتا ہے، یا کسی بھی سٹاپ نقصان کا طریقہ کار ٹرگر ہوتا ہے، تو تجارت ختم ہو جاتی ہے.

اس حکمت عملی کی سب سے نمایاں خصوصیت اس کے جدید تین درجے کے اسٹاپ نقصان کا نظام ہے:

  1. اے ٹی آر ٹریکنگ نقصان: مارکیٹ میں اتار چڑھاو کی بنیاد پر (ATR قیمت) سٹاپ نقصان کی پوزیشن کو متحرک طور پر ایڈجسٹ کریں ، رجحان کے ساتھ ساتھ منافع کو لاک کریں۔
  2. سائیکلنگ پوائنٹ سٹاپ نقصان: مارکیٹ کی قدرتی ساخت کا استعمال کرتے ہوئے (ریٹرننگ کے دوران حالیہ اونچائی / کم) اسٹاپ نقصان کی حد طے کریں ، مارکیٹ کی اپنی رفتار کا احترام کریں۔
  3. نقصان کی انشورنسسیکیورٹی نیٹ ورک: سیکیورٹی نیٹ ورک جو داخلے کی قیمت کے فی صد کی بنیاد پر قائم کیا گیا ہے ، فوری طور پر سرمایہ کی حفاظت فراہم کرتا ہے ، خاص طور پر جب سوئنگ پوائنٹ اسٹاپ نقصان کی پوزیشن داخلے کے نقطہ سے بہت دور ہوسکتی ہے۔

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

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

  2. انتہائی موافقت پذیر: تمام اجزاء ((سپر ٹرینڈ، ADX) کو مختلف مارکیٹ کے حالات کے مطابق آن / آف کیا جاسکتا ہے ، اور پیرامیٹرز کو ایڈجسٹ کیا جاسکتا ہے ، جس سے حکمت عملی کو بہت زیادہ لچک مل جاتی ہے۔

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

  4. واضح بصری آراء: حکمت عملی چارٹ پر پوزیشن کی حیثیت ، داخلے کی قیمت اور موجودہ اسٹاپ نقصان کی سطح کو ظاہر کرتی ہے ، جس سے تاجر کو حکمت عملی کی کارکردگی کو بصری طور پر سمجھنے اور اس کی پیروی کرنے کی اجازت ملتی ہے۔

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

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

اسٹریٹجک رسک

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

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

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

  4. کم اتار چڑھاؤ والے ماحول میں خراب کارکردگی: کم اتار چڑھاؤ یا افقی مارکیٹوں میں ، اس حکمت عملی سے متعدد غلط سگنل پیدا ہوسکتے ہیں ، جس کی وجہ سے “ہلکا” تجارت ہوتا ہے۔ اس طرح کے ماحول میں تجارت کو روکنے یا مارکیٹ کے اضافی ماحول کے فلٹرز کو شامل کرنے کا حل ہے۔

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

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

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

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

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

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

  5. نقصان کی روک تھام کو بہتر بنانا: موجودہ تھری لیئر اسٹاپ سسٹم کو مزید بہتر بنایا جاسکتا ہے ، جیسے کہ انشورنس اسٹاپ فیصد کو متغیرات کی بنیاد پر متحرک طور پر ایڈجسٹ کرنا ، یا سپورٹ / مزاحمت کی سطح کو استعمال کرنا تاکہ سستے سستے کے بجائے سستے سستے کو درست طریقے سے ترتیب دیا جاسکے۔

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

خلاصہ کریں۔

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

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

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2025-01-01 00:00:00
end: 2025-04-12 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("Heiken Ashi Supertrend ADX - Strategy", overlay=true, initial_capital=1000, commission_type=strategy.commission.percent, commission_value=0, calc_on_every_tick=true, process_orders_on_close=false, default_qty_type=strategy.percent_of_equity, default_qty_value=3)


// Supertrend Settings
useSupertrend = input.bool(true, "Use Supertrend for Entries", group="Supertrend Settings")
atrPeriod = input.int(10, "ATR Period", minval=1, group="Supertrend Settings")
factor = input.float(3.0, "Supertrend Factor", minval=0.5, step=0.1, group="Supertrend Settings")

// ADX Filter Settings
useAdxFilter = input.bool(false, "Use ADX Filter", group="ADX Filter")
adxPeriod = input.int(14, "ADX Period", minval=1, group="ADX Filter")
adxThreshold = input.float(25, "ADX Threshold", minval=0, group="ADX Filter")

// Stop Loss Options
useSwingStop = input.bool(false, "Use Swing Point Stop", group="Stop Loss Options")
swingLookback = input.int(3, "Swing Lookback Periods", minval=1, maxval=20, group="Stop Loss Options")

useSafetyNetStop = input.bool(true, "Use Insurance Stop", group="Stop Loss Options")
safetyNetPercent = input.float(5.0, "Insurance Stop Loss Percent", minval=0.1, step=0.1, group="Stop Loss Options")

// Trailing Stop Loss Settings
useTrailingStop = input.bool(true, "Use ATR Trailing Stop", group="Stop Loss Options")
trailAtrMultiplier = input.float(2.0, "Trailing Stop ATR Multiplier", minval=0.1, step=0.1, group="Stop Loss Options")

// Get HA data for signals
ha_security = ticker.heikinashi(syminfo.tickerid)
[o, h, l, c] = request.security(ha_security, timeframe.period, [open, high, low, close])

// Get real price data
real_open = open
real_high = high
real_low = low
real_close = close

// Calculate Supertrend using built-in function with real price data
[supertrend, direction] = ta.supertrend(factor, atrPeriod)
supertrend := barstate.isfirst ? na : supertrend

// Determine if we're in an uptrend or downtrend based on Supertrend
isUptrend = direction < 0   // In TradingView, negative direction means uptrend
isDowntrend = direction > 0 // In TradingView, positive direction means downtrend

// Calculate ATR for visualization
atrValue = ta.atr(atrPeriod)

// Calculate ADX and Trade Logic
[diplus, diminus, adx] = ta.dmi(adxPeriod, adxPeriod)
int trade = 0
if trade == 0 and diplus > diminus
    trade := 1
else if trade == 0 and diminus > diplus
    trade := -1
else if trade == 1 and diminus > diplus
    trade := -1
else if trade == -1 and diplus > diminus
    trade := 1
else
    trade := trade[1]

// Combine with ADX Threshold
isAdxBullish = diplus > diminus and adx > adxThreshold
isAdxBearish = diminus > diplus and adx > adxThreshold

// Debug ADX Values (only if needed for development)
// plot(adx, "ADX", color=color.orange, linewidth=1)
// plot(diplus, "DI+", color=color.green, linewidth=1)
// plot(diminus, "DI-", color=color.red, linewidth=1)
// hline(adxThreshold, "ADX Threshold", color=color.gray, linestyle=hline.style_dashed)

// Check for wicks on the current candle
threshold = syminfo.mintick * 0.1
noBottomWick = math.abs(math.min(o, c) - l) <= threshold
noTopWick = math.abs(h - math.max(o, c)) <= threshold

// Identify candle color and signal conditions
isGreenCandle = c > o
isRedCandle = c < o

// KEY INTEGRATION: Color the real bars based on HA trend
bullishColor = color.green   // Green for long/bullish
bearishColor = color.purple  // Purple for short/bearish
barcolor(isGreenCandle ? bullishColor : bearishColor)

// Signal conditions for both entry and exit
longCondition = (isGreenCandle and noBottomWick and barstate.isconfirmed) and (not useSupertrend or isUptrend) and (not useAdxFilter or isAdxBullish)

shortCondition = (isRedCandle and noTopWick and barstate.isconfirmed) and (not useSupertrend or isDowntrend) and (not useAdxFilter or isAdxBearish)

exitLongCondition = isRedCandle and noTopWick and barstate.isconfirmed
exitShortCondition = isGreenCandle and noBottomWick and barstate.isconfirmed

// Calculate swing points based on real candles (not HA)
swingLow = ta.lowest(real_low, swingLookback)
swingHigh = ta.highest(real_high, swingLookback)

// Position tracking
var int position = 0  // 0 = no position, 1 = long, -1 = short
var float entryPrice = na
var float trailStopLevel = na  // For ATR trailing stop
var float swingStopLevel = na  // For swing point stop
var float safetyNetStopLevel = na  // For safety net stop
var float highestSinceEntry = na  // For tracking highest price since entry (for long positions)
var float lowestSinceEntry = na   // For tracking lowest price since entry (for short positions)

// Alert variables
var bool longAlert = false
var bool shortAlert = false
var bool exitLongAlert = false
var bool exitShortAlert = false

// Reset alerts each bar
longAlert := false
shortAlert := false
exitLongAlert := false
exitShortAlert := false

// Handle entries and exits
if longCondition and (position <= 0)
    if position < 0
        exitShortAlert := true
        strategy.close("Short", comment="Exit Short")
        position := 0
    longAlert := true
    strategy.entry("Long", strategy.long, comment="Enter Long")
    position := 1
    entryPrice := real_close
    highestSinceEntry := real_close
    lowestSinceEntry := na
    // Initialize trailing stops
    if useTrailingStop
        trailStopLevel := real_close - (atrValue * trailAtrMultiplier)
    // Initialize swing point stop
    if useSwingStop
        swingStopLevel := swingLow
    // Initialize safety net stop
    if useSafetyNetStop
        safetyNetStopLevel := real_close * (1 - safetyNetPercent / 100)
        
if shortCondition and (position >= 0)
    if position > 0
        exitLongAlert := true
        strategy.close("Long", comment="Exit Long")
        position := 0
    shortAlert := true
    strategy.entry("Short", strategy.short, comment="Enter Short")
    position := -1
    entryPrice := real_close
    highestSinceEntry := na
    lowestSinceEntry := real_close
    // Initialize trailing stops
    if useTrailingStop
        trailStopLevel := real_close + (atrValue * trailAtrMultiplier)
    // Initialize swing point stop
    if useSwingStop
        swingStopLevel := swingHigh
    // Initialize safety net stop
    if useSafetyNetStop
        safetyNetStopLevel := real_close * (1 + safetyNetPercent / 100)

if position > 0 and exitLongCondition
    exitLongAlert := true
    strategy.close("Long", comment="Exit Long Signal")
    position := 0
    trailStopLevel := na
    swingStopLevel := na
    safetyNetStopLevel := na
    highestSinceEntry := na

if position < 0 and exitShortCondition
    exitShortAlert := true
    strategy.close("Short", comment="Exit Short Signal")
    position := 0
    trailStopLevel := na
    swingStopLevel := na
    safetyNetStopLevel := na
    lowestSinceEntry := na

// Check for swing point stop hit
if useSwingStop and position != 0 and not na(swingStopLevel)
    // For long positions, check if price drops below the swing low
    if position > 0 and real_low <= swingStopLevel
        strategy.close("Long", comment="Swing Point Stop Hit")
        position := 0
        trailStopLevel := na
        swingStopLevel := na
        safetyNetStopLevel := na
        highestSinceEntry := na
        
    // For short positions, check if price rises above the swing high
    else if position < 0 and real_high >= swingStopLevel
        strategy.close("Short", comment="Swing Point Stop Hit")
        position := 0
        trailStopLevel := na
        swingStopLevel := na
        safetyNetStopLevel := na
        lowestSinceEntry := na

// Check for safety net stop loss hit
if useSafetyNetStop and position != 0 and not na(safetyNetStopLevel)
    // For long positions, check if price drops below the safety net level
    if position > 0 and real_low <= safetyNetStopLevel
        strategy.close("Long", comment="Safety Net Stop Hit")
        position := 0
        trailStopLevel := na
        swingStopLevel := na
        safetyNetStopLevel := na
        highestSinceEntry := na
        
    // For short positions, check if price rises above the safety net level
    else if position < 0 and real_high >= safetyNetStopLevel
        strategy.close("Short", comment="Safety Net Stop Hit")
        position := 0
        trailStopLevel := na
        swingStopLevel := na
        safetyNetStopLevel := na
        lowestSinceEntry := na

// Track highest/lowest prices for trailing stop calculation
if position > 0 and not na(highestSinceEntry)
    highestSinceEntry := math.max(highestSinceEntry, real_high)
    
if position < 0 and not na(lowestSinceEntry)
    lowestSinceEntry := math.min(lowestSinceEntry, real_low)

// Update and check trailing stop (ATR-based)
if useTrailingStop and position != 0 and not na(trailStopLevel)
    // Update trailing stop level for long positions
    if position > 0
        // Calculate new potential trailing stop level
        trailStopNew = real_close - (atrValue * trailAtrMultiplier)
        // Only move the stop up, never down
        if trailStopNew > trailStopLevel
            trailStopLevel := trailStopNew
        // Check if price hit stop
        if real_low <= trailStopLevel
            strategy.close("Long", comment="ATR Trailing Stop Hit")
            position := 0
            trailStopLevel := na
            swingStopLevel := na
            safetyNetStopLevel := na
            highestSinceEntry := na
            
    // Update trailing stop level for short positions
    else if position < 0
        // Calculate new potential trailing stop level
        trailStopNew = real_close + (atrValue * trailAtrMultiplier)
        // Only move the stop down, never up
        if trailStopNew < trailStopLevel
            trailStopLevel := trailStopNew
        // Check if price hit stop
        if real_high >= trailStopLevel
            strategy.close("Short", comment="ATR Trailing Stop Hit")
            position := 0
            trailStopLevel := na
            swingStopLevel := na
            safetyNetStopLevel := na
            lowestSinceEntry := na

// Plot stop loss levels
plot(useTrailingStop and position != 0 ? trailStopLevel : na, "ATR Trailing Stop", color=color.yellow, style=plot.style_linebr, linewidth=1)
plot(useSwingStop and position != 0 ? swingStopLevel : na, "Swing Point Stop", color=color.red, style=plot.style_circles, linewidth=2)
plot(useSafetyNetStop and position != 0 ? safetyNetStopLevel : na, "Insurance Stop", color=color.yellow, style=plot.style_circles, linewidth=1)

// Visual signals for chart (just entry/exit markers, no ADX labels)
plotshape(longAlert, title="Long Entry", location=location.abovebar, color=bullishColor, style=shape.triangleup, size=size.small)
plotshape(shortAlert, title="Short Entry", location=location.belowbar, color=bearishColor, style=shape.triangledown, size=size.small)
plotshape(exitLongAlert, title="Long Exit Signal", location=location.abovebar, color=bullishColor, style=shape.xcross, size=size.small)
plotshape(exitShortAlert, title="Short Exit Signal", location=location.belowbar, color=bearishColor, style=shape.xcross, size=size.small)

// Supertrend visualization
bodyMiddlePlot = plot((real_open + real_close) / 2, "Body Middle", display=display.none)
upTrend = plot(useSupertrend and isUptrend ? supertrend : na, "Up Trend", color=bullishColor, style=plot.style_linebr, linewidth=1)
downTrend = plot(useSupertrend and isDowntrend ? supertrend : na, "Down Trend", color=bearishColor, style=plot.style_linebr, linewidth=1)
fill(upTrend, bodyMiddlePlot, color=useSupertrend ? color.new(bullishColor, 85) : na, title="Uptrend Background")
fill(downTrend, bodyMiddlePlot, color=useSupertrend ? color.new(bearishColor, 85) : na, title="Downtrend Background")

// Position background
bgcolor(position == 1 ? color.new(bullishColor, 85) : position == -1 ? color.new(bearishColor, 85) : na, title="Position Background")

// Position label
var label positionLabel = na
label.delete(positionLabel)
if barstate.islast
    positionText = position == 1 ? "LONG" : position == -1 ? "SHORT" : "FLAT"
    entryInfo = not na(entryPrice) ? "\nEntry: " + str.tostring(entryPrice, "#.00000") : ""
    atrStopInfo = useTrailingStop and not na(trailStopLevel) ? "\nATR Stop: " + str.tostring(trailStopLevel, "#.00000") + " (" + str.tostring(trailAtrMultiplier, "#.0") + "x ATR)" : ""
    swingStopInfo = useSwingStop and not na(swingStopLevel) ? "\nSwing Stop: " + str.tostring(swingStopLevel, "#.00000") + " (" + str.tostring(swingLookback) + " bars)" : ""
    safetyNetInfo = useSafetyNetStop and not na(safetyNetStopLevel) ? "\nInsurance Stop: " + str.tostring(safetyNetStopLevel, "#.00000") + " (" + str.tostring(safetyNetPercent, "#.0") + "%)" : ""
    supertrendInfo = useSupertrend ? "\nSupertrend: " + (isUptrend ? "UPTREND" : "DOWNTREND") : ""
    positionColor = position == 1 ? bullishColor : position == -1 ? bearishColor : color.gray
    positionLabel := label.new(bar_index, high, positionText + entryInfo + atrStopInfo + swingStopInfo + safetyNetInfo + supertrendInfo, color=positionColor, style=label.style_label_down, textcolor=color.white)