کثیر مدت کے متحرک اتار چڑھاؤ سے باخبر رہنے کی حکمت عملی

EMA RSI ATR 趋势跟踪 动态止损 多周期分析 量化交易 部分获利
تخلیق کی تاریخ: 2025-06-11 11:02:35 آخر میں ترمیم کریں: 2025-06-11 11:02:35
کاپی: 0 کلکس کی تعداد: 243
2
پر توجہ دیں
319
پیروکار

کثیر مدت کے متحرک اتار چڑھاؤ سے باخبر رہنے کی حکمت عملی کثیر مدت کے متحرک اتار چڑھاؤ سے باخبر رہنے کی حکمت عملی

جائزہ

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

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

یہ حکمت عملی ایک کثیر پرت سگنل اسٹیکلر فن تعمیر پر مبنی ہے:

  1. رجحانات کی شناخت: مائیکرو ٹرینڈ کی سمت کا تعین کرنے کے لئے فاسٹ ای ایم اے اور سست ای ایم اے کو کراس کریں۔ جب فاسٹ ای ایم اے سست ای ایم اے سے اوپر ہوتا ہے تو ، اس کی نشاندہی بائسنک ٹرینڈ کے طور پر کی جاتی ہے۔ اس کے برعکس ، اس کی نشاندہی بائسنک ٹرینڈ کے طور پر کی جاتی ہے۔
  2. توانائی صحت سے زیادہ: حد سے زیادہ توسیع کا پیچھا کرنے سے بچنے کے لئے اقدامات کریں۔ صرف اس وقت زیادہ کرنے کی اجازت ہے جب RSI اوور بل کی سطح سے نیچے ہو۔ صرف اس وقت خالی کرنے کی اجازت ہے جب RSI اوور سیل کی سطح سے اوپر ہو۔
  3. K لائن کی تصدیق کا طریقہ کار: سگنل کی شرائط کی ضرورت ہوتی ہے کہ مارکیٹ شور کو مؤثر طریقے سے فلٹر کرنے کے لئے ایک سے زیادہ K لائنیں قائم ہوں۔
  4. داخلہ ٹرگر: مارکیٹ کا آرڈر اس وقت جاری کریں جب تصدیق ونڈو میں K لائن نظر آئے۔
  5. ابتدائی سٹاپ نقصان: اے ٹی آر کی بنیاد پر اتار چڑھاؤ کی شرح میں ایڈجسٹمنٹ ، اور تجارتی حجم کے مطابق متحرک ایڈجسٹمنٹ۔
  6. ٹریکنگ سٹاپ نقصان کی منطق: محور اور اے ٹی آر بیس اسٹاپ نقصانات کے ساتھ مل کر منافع کو لاک کرنے کے لئے ایک بہتر حل۔
  7. اعلی ٹائم فریم RSI مانیٹرنگاس کے علاوہ ، اس نے مارکیٹ کے پس منظر سے باہر نکلنے کے اشارے فراہم کیے ہیں ، اور منفی تجارت سے گریز کیا ہے۔
  8. درجہ بندی منافع کے اہداف: تین اے ٹی آر پر مبنی ہدف پوزیشنوں کا تعین کریں ، تاکہ پوزیشنوں کو آہستہ آہستہ کم کیا جا سکے۔
  9. ٹرانزیکشن محدود کرنے والاٹرینڈ فیز: ہر ٹرینڈ فیز میں زیادہ سے زیادہ ٹرانزیکشنز کی تعداد کو محدود کریں تاکہ زیادہ سے زیادہ ٹرانزیکشنز کو روکا جا سکے۔

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

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

  1. لچکدار: اے ٹی آر کے ذریعہ ایڈجسٹ شدہ اسٹاپ اور ٹارگٹ پوزیشن ، حکمت عملی کو مختلف مارکیٹ کے اتار چڑھاؤ کے حالات کے مطابق ڈھالنے کے قابل بناتی ہے ، بغیر پیرامیٹرز کو بار بار دوبارہ بہتر بنانے کی ضرورت ہوتی ہے۔
  2. ملٹی لیول رسک مینجمنٹ: ابتدائی اسٹاپ ، ٹریک اسٹاپ ، جزوی منافع اور کثیر مدتی آر ایس آئی فلٹرنگ کے ساتھ مل کر ، ایک مکمل رسک کنٹرول سسٹم تشکیل دیا گیا۔
  3. شور فلٹرنگ میکانزم: مسلسل K لائن کی تصدیق کی ضرورت نے جعلی سگنل کو مؤثر طریقے سے کم کیا اور ٹرانزیکشن کے معیار کو بہتر بنایا۔
  4. مائعیت کا احساس: کم لیکویڈیٹی ماحول میں خود کار طریقے سے خطرے کے دروازے کو سخت کرنے کے لئے ٹریڈنگ حجم تناسب کے ذریعے روکنے کی سطح کو ایڈجسٹ کریں۔
  5. رجحان کی پختگی کی نگرانی: رجحانات کے ساتھ ساتھ ، ٹریڈنگ کی اجازت کی تعداد کو خود بخود کم کریں تاکہ رجحانات کے بعد کے مرحلے میں زیادہ تجارت سے بچا جاسکے۔
  6. لچکدار منافع کے نظامسطح 3: جزوی منافع کی حکمت عملی قیمتوں میں فائدہ مند ہونے پر جزوی منافع کو لاک کرنے کی اجازت دیتی ہے ، جبکہ اوپر جانے کی گنجائش باقی رہتی ہے۔
  7. کراس سائیکل تجزیہ: اعلی ٹائم فریم پر RSI مانیٹرنگ مارکیٹ کے وسیع تر پس منظر کے نقطہ نظر کو فراہم کرتی ہے ، جس سے بڑے رجحانات کے الٹ جانے پر مائکرو سگنل پر قائم رہنے سے بچا جاسکتا ہے۔
  8. آسانی سے عملدرآمداس کے علاوہ ، اس نے کہا کہ اس کے پاس “پائن کنیکٹر” کے ساتھ انضمام ہے ، جس سے حکمت عملی کو آسانی سے خودکار کیا جاسکتا ہے ، جس سے انسانی مداخلت اور جذباتی اثرات کو کم کیا جاسکتا ہے۔

اسٹریٹجک رسک

  1. واپسی کا خطرہخطرے کے کنٹرول کی متعدد پرتوں کے باوجود ، مارکیٹ کے انتہائی حالات (جیسے چھلانگ لگانا ، گرنا) میں حکمت عملی کو توقع سے زیادہ واپسی کا سامنا کرنا پڑ سکتا ہے۔ اس کا جواب پوزیشن کے سائز کو مناسب طریقے سے کم کرنا یا اے ٹی آر کے ضرب کو بڑھانا ہے۔
  2. پیرامیٹر کی حساسیت: کچھ اہم پیرامیٹرز جیسے ای ایم اے کی لمبائی اور آر ایس آئی کی حد حکمت عملی کی کارکردگی پر نمایاں اثر ڈالتی ہے۔ ضرورت سے زیادہ اصلاح سے زیادہ فٹ ہونے کا خطرہ پیدا ہوسکتا ہے۔ قدم بہ قدم جانچ کی بجائے نمونہ کے اندر اصلاح کا استعمال کرنے کی سفارش کی گئی ہے۔
  3. ہائی فریکوئینسی ٹرانزیکشن لاگتایک مختصر لائن حکمت عملی کے طور پر ، اعلی تجارتی تعدد ، اور تجارت کے جمع اخراجات (پوائنٹ مارجن ، کمیشن) سے حقیقی آمدنی پر نمایاں اثر پڑ سکتا ہے۔ ریٹرننگ میں اصل تجارتی اخراجات کو مدنظر رکھنا چاہئے۔
  4. تاخیر کا خطرہ:PineConnector کی عملدرآمد میں تاخیر ((تقریبا 100-300 ملی سیکنڈ) اعلی اتار چڑھاؤ والے بازاروں میں سلائڈ میں اضافے کا سبب بن سکتی ہے۔ انتہائی اتار چڑھاؤ والے یا کم لیکویڈیٹی والے بازاروں میں استعمال کی سفارش نہیں کی جاتی ہے۔
  5. مرکزی محور کا نقشہ: منٹ لائن کے نیچے سپر شارٹ لائن چارٹ پر ، مرکزی محور کو اصل وقت میں K لائن کی تشکیل کے دوران دوبارہ تیار کیا جاسکتا ہے ، جس سے اسٹاپ نقصان کی درستگی متاثر ہوتی ہے۔
  6. رجحانات کا پتہ لگانے میں تاخیر: ای ایم اے کراسنگ پر مبنی رجحانات کی شناخت میں فطری طور پر تاخیر ہوتی ہے ، اور رجحانات کے ابتدائی مرحلے میں کچھ واقعات کو یاد کیا جاسکتا ہے۔
  7. حد سے زیادہ فائدہ اٹھانے کا خطرہاگر آپ کے پاس بہت زیادہ پوزیشن ہے تو ، آپ کو ایک ہی تجارت میں بہت زیادہ خطرہ لاحق ہوسکتا ہے ، جس سے آپ کے اکاؤنٹ میں رقم تیزی سے ختم ہوجاتی ہے۔

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

  1. مشین لرننگ کی اصلاح: EMA اور RSI پیرامیٹرز کو متحرک طور پر ایڈجسٹ کرنے کے لئے مشین لرننگ الگورتھم متعارف کرایا گیا ہے ، جو مختلف مارکیٹ کے حالات کے مطابق خود کو ڈھالتا ہے۔ اس سے فکسڈ پیرامیٹرز کی مختلف مارکیٹ کے مراحل میں عدم موافقت کی دشواری کو حل کیا جاسکتا ہے۔
  2. مارکیٹ کی حالت کی درجہ بندی: اتار چڑھاؤ کے مجموعی تجزیہ کو بڑھانا ، مارکیٹ کو اعلی ، درمیانے اور کم اتار چڑھاؤ کی حالتوں میں تقسیم کرنا ، مختلف حالتوں کے ل differenti مختلف تجارتی پیرامیٹرز کو اپنانا۔ اس سے حکمت عملی کو منتقلی کی منڈیوں میں موافقت میں اضافہ ہوگا۔
  3. کثیر اشاریہ اجماع: دیگر متحرک اور رجحان اشارے (جیسے MACD ، برن بینڈ ، KDJ) کو ایک اشارے کے اجماع کا نظام تشکیل دیں ، صرف اس صورت میں جب زیادہ تر اشارے متفق ہوں تو سگنل پیدا کریں۔ اس سے جعلی سگنل کو کم کرنے میں مدد ملتی ہے۔
  4. ذہین وقت فلٹر: مارکیٹ کے اوقات اور اتار چڑھاؤ کے نمونوں کے تجزیے میں شامل ہوں ، غیر موثر تجارت کے اوقات اور معروف اعلی اتار چڑھاؤ والے واقعات (جیسے اہم معاشی اعداد و شمار کی اشاعت) سے گریز کریں۔
  5. متحرک حصہ منافع کا تناسب: مارکیٹ میں اتار چڑھاو اور رجحان کی طاقت کے مطابق خود کار طریقے سے کچھ منافع کے فیصد اور ہدف کے فاصلے کو ایڈجسٹ کریں ، مضبوط رجحانات میں زیادہ پوزیشنیں برقرار رکھیں ، کمزور رجحانات میں زیادہ متحرک منافع کمائیں۔
  6. کنٹرول میں اضافے کی واپسی: تاریخی ریٹائرمنٹ ماڈل پر مبنی رسک ایڈجسٹمنٹ میکانزم متعارف کرایا گیا ، جس میں تاریخی بڑے ریٹائرمنٹ کے اسی طرح کے پیش خیموں کا پتہ لگانے پر ٹریڈنگ کی فریکوئنسی کو خود بخود کم کیا جاتا ہے یا اسٹاپ نقصان کا فاصلہ بڑھایا جاتا ہے۔
  7. ہائی فریکوئینسی ڈیٹا میں اضافہ: جب حالات اجازت دیں تو ، داخلہ کو بہتر بنانے کے لئے ٹک لیول کے اعداد و شمار کو مربوط کریں ، جس سے سلائڈ پوائنٹس کو کم کیا جاسکے اور داخلہ کی قیمتوں میں بہتری آسکے۔
  8. کراس مارکیٹ مطابقت تجزیہ: متعلقہ مارکیٹوں کے ساتھ رابطے کے تجزیے میں شامل ہونا ، مارکیٹوں کے مابین لیڈر - پیچھے رہنے والے تعلقات کو استعمال کرنا تاکہ سگنل کی کوالٹی کو بہتر بنایا جاسکے۔

خلاصہ کریں۔

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

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

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

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

//@version=5
//@strategy_alert_message {{strategy.order.comment}}
// © AlgoSystems

strategy("Scalping Trend Power for MT5 - Updated", overlay=true, calc_on_every_tick=false)

//-------------------------------------------------------------------
// Function: confirm a condition for N consecutive bars
//-------------------------------------------------------------------
f_confirm(cond, bars) =>
    _ok = true
    for i = 0 to bars - 1
        _ok := _ok and cond[i]
    _ok

//-------------------------------------------------------------------
// Inputs: strategy parameters & PineConnector
//-------------------------------------------------------------------
lotSize                = input.float(0.1,  title="Lot Size")
lotMultiplier          = input.float(1.0,  title="Lot Multiplier", minval=0.1, step=0.1)
contractType           = input.string("FX", title="Contract Type", options=["FX", "CFD", "Futures"])
// (kept for potential future use)
riskPercentage         = input.float(1.0,  title="Risk per Trade (%)")
riskRewardRatio        = input.float(1.2,  title="Risk/Reward Ratio", step=0.1)
trailingStopMultiplier = input.float(1.2,  title="Trailing-Stop Multiplier", step=0.1)

emaShortLength         = input.int(9,  title="EMA Short Length")
emaLongLength          = input.int(21, title="EMA Long Length")
rsiLength              = input.int(14, title="RSI Length")
atrLength              = input.int(14, title="ATR Length")
rsiOverbought          = input.int(70, title="RSI Overbought Level")
rsiOversold            = input.int(30, title="RSI Oversold Level")

higherTF               = input.timeframe("30", title="Higher Time-Frame for Exit")
higherRsiOverbought    = input.int(70, title="Higher-TF RSI Overbought", minval=50)
higherRsiOversold      = input.int(30, title="Higher-TF RSI Oversold",  minval=10)

pivotLookback          = input.int(5,  title="Pivot Look-Back Period",  minval=2, step=1)
volumeLookback         = input.int(20, title="Volume Look-Back Period", minval=5, step=1)
volumeMultiplier       = input.float(1.0, title="Volume Multiplier",    minval=0.1, step=0.1)

enablePartialExit      = input.bool(true, title="Enable Partial Exit")
tp1ProfitMult          = input.float(1.0, title="TP1 Profit Multiplier", step=0.1)
tp2ProfitMult          = input.float(1.5, title="TP2 Profit Multiplier", step=0.1)
tp3ProfitMult          = input.float(2.0, title="TP3 Profit Multiplier", step=0.1)

tp1ExitPercentage      = input.float(33, title="TP1 Exit (%)", minval=1, maxval=100, step=1)
tp2ExitPercentage      = input.float(33, title="TP2 Exit (%)", minval=1, maxval=100, step=1)
tp3ExitPercentage      = input.float(34, title="TP3 Exit (%)", minval=1, maxval=100, step=1)

confirmBars            = input.int(2, title="Confirmation Bars", minval=1, step=1)

baseLongTrades         = 5
tradeDecreaseFactor    = input.int(0, title="Trade Decrease Factor", minval=0)
maxLongTradesPerTrend  = math.max(1, baseLongTrades - tradeDecreaseFactor)

activatePineConnector  = input.bool(false, title="Activate PineConnector")
pineConnectorLicense   = input.string("", title="PineConnector License Code")

//-------------------------------------------------------------------
// Indicator calculations
//-------------------------------------------------------------------
emaShort = ta.ema(close, emaShortLength)
emaLong  = ta.ema(close, emaLongLength)
rsiValue = ta.rsi(close, rsiLength)
atrValue = ta.atr(atrLength)

// ATR-based TP & SL
dynamicTP = atrValue * riskRewardRatio
dynamicSL = atrValue * trailingStopMultiplier

rawLongSignal  = emaShort > emaLong and rsiValue < rsiOverbought
rawShortSignal = emaShort < emaLong and rsiValue > rsiOversold

longSignal  = f_confirm(rawLongSignal,  confirmBars)
shortSignal = f_confirm(rawShortSignal, confirmBars)

//-------------------------------------------------------------------
// Dynamic ticker symbol (remove exchange prefix if any)
//-------------------------------------------------------------------
var string dynSymbol = na
if bar_index == 0
    parts     = str.split(syminfo.tickerid, ":")
    dynSymbol := array.size(parts) > 1 ? array.get(parts, 1) : syminfo.tickerid

//-------------------------------------------------------------------
// PineConnector messages (no "lots=" or "contract=" – updated syntax)
// The value after risk= is interpreted as LOTS if EA’s VolumeType = "Lots".
//-------------------------------------------------------------------
prefix        = activatePineConnector and (pineConnectorLicense != "") ? pineConnectorLicense + "," : ""
calculatedLot = lotSize * lotMultiplier  // actual order volume

// ENTRY messages
riskValue = str.tostring(calculatedLot)  // risk= interpreted as lots

txtBuy  = prefix + "buy,"  + dynSymbol + ",risk=" + riskValue
txtSell = prefix + "sell," + dynSymbol + ",risk=" + riskValue

// CLOSE FULL messages
txtCloseLong  = prefix + "closelong,"  + dynSymbol
txtCloseShort = prefix + "closeshort," + dynSymbol

// Helper to compute risk= for partial exits
f_partialRisk(pct) => str.tostring(calculatedLot * pct / 100)

// PARTIAL EXIT messages
msgTP1Long  = prefix + "closelongvol,"  + dynSymbol + ",risk=" + f_partialRisk(tp1ExitPercentage)
msgTP2Long  = prefix + "closelongvol,"  + dynSymbol + ",risk=" + f_partialRisk(tp2ExitPercentage)
msgTP3Long  = prefix + "closelongvol,"  + dynSymbol + ",risk=" + f_partialRisk(tp3ExitPercentage)
msgTP1Short = prefix + "closeshortvol," + dynSymbol + ",risk=" + f_partialRisk(tp1ExitPercentage)
msgTP2Short = prefix + "closeshortvol," + dynSymbol + ",risk=" + f_partialRisk(tp2ExitPercentage)
msgTP3Short = prefix + "closeshortvol," + dynSymbol + ",risk=" + f_partialRisk(tp3ExitPercentage)

//-------------------------------------------------------------------
// Higher-time-frame RSI request
//-------------------------------------------------------------------
higherRsi = request.security(syminfo.tickerid, higherTF, ta.rsi(close, rsiLength))

//-------------------------------------------------------------------
// State variables
//-------------------------------------------------------------------
var bool  inLongTrade       = false
var bool  inShortTrade      = false
var int   longTradeCount    = 0
var float trailingStopLevel = na
var bool  tp1_exited        = false
var bool  tp2_exited        = false
var bool  tp3_exited        = false

//-------------------------------------------------------------------
// Entry/Exit logic
//-------------------------------------------------------------------
if barstate.isconfirmed
    avgVol   = ta.sma(volume, volumeLookback)
    volRatio = avgVol != 0 ? volume / avgVol : 1.0
    adjSL    = dynamicSL / (volRatio * volumeMultiplier)
    pivotH   = ta.pivothigh(high, pivotLookback, pivotLookback)
    pivotL   = ta.pivotlow(low,  pivotLookback, pivotLookback)

    // LONG entry
    if longSignal and not inLongTrade and not inShortTrade and longTradeCount < maxLongTradesPerTrend
        strategy.entry("Long", strategy.long, qty=calculatedLot, comment="Long Entry")
        if activatePineConnector
            alert(txtBuy, alert.freq_once_per_bar)
        inLongTrade  := true
        inShortTrade := false
        longTradeCount += 1
        trailingStopLevel := low - adjSL
        tp1_exited := false
        tp2_exited := false
        tp3_exited := false

    // SHORT entry
    if shortSignal and not inShortTrade and not inLongTrade
        strategy.entry("Short", strategy.short, qty=calculatedLot, comment="Short Entry")
        if activatePineConnector
            alert(txtSell, alert.freq_once_per_bar)
        inShortTrade := true
        inLongTrade  := false
        trailingStopLevel := high + adjSL
        tp1_exited := false
        tp2_exited := false
        tp3_exited := false

    // Trailing-stop update
    if inLongTrade
        baseStop = close - adjSL
        trailingStopLevel := (not na(pivotL) and pivotL > trailingStopLevel) ? pivotL : math.max(trailingStopLevel, baseStop)
    if inShortTrade
        baseStop = close + adjSL
        trailingStopLevel := (not na(pivotH) and pivotH < trailingStopLevel) ? pivotH : math.min(trailingStopLevel, baseStop)

    // Dynamic TPs & partial exits
    if enablePartialExit and strategy.position_size != 0
        avgPrice  = strategy.position_avg_price
        direction = strategy.position_size > 0 ? 1 : -1
        tp1 = avgPrice + direction * dynamicTP * tp1ProfitMult
        tp2 = avgPrice + direction * dynamicTP * tp2ProfitMult
        tp3 = avgPrice + direction * dynamicTP * tp3ProfitMult

        // TP1
        if not tp1_exited and f_confirm(direction > 0 ? close >= tp1 : close <= tp1, confirmBars)
            strategy.exit("TP1", from_entry=direction>0 ? "Long" : "Short", qty_percent=tp1ExitPercentage, limit=tp1, comment=direction>0 ? msgTP1Long : msgTP1Short)
            if activatePineConnector
                alert(direction>0 ? msgTP1Long : msgTP1Short, alert.freq_once_per_bar)
            tp1_exited := true
        // TP2
        if not tp2_exited and f_confirm(direction > 0 ? close >= tp2 : close <= tp2, confirmBars)
            strategy.exit("TP2", from_entry=direction>0 ? "Long" : "Short", qty_percent=tp2ExitPercentage, limit=tp2, comment=direction>0 ? msgTP2Long : msgTP2Short)
            if activatePineConnector
                alert(direction>0 ? msgTP2Long : msgTP2Short, alert.freq_once_per_bar)
            tp2_exited := true
        // TP3
        if not tp3_exited and f_confirm(direction > 0 ? close >= tp3 : close <= tp3, confirmBars)
            strategy.exit("TP3", from_entry=direction>0 ? "Long" : "Short", qty_percent=tp3ExitPercentage, limit=tp3, comment=direction>0 ? msgTP3Long : msgTP3Short)
            if activatePineConnector
                alert(direction>0 ? msgTP3Long : msgTP3Short, alert.freq_once_per_bar)
            tp3_exited := true

    // FULL exit (trailing stop or opposite signals)
    exitCondLong  = inLongTrade  and (close < trailingStopLevel or rsiValue > rsiOverbought or higherRsi > higherRsiOverbought)
    exitCondShort = inShortTrade and (close > trailingStopLevel or rsiValue < rsiOversold   or higherRsi < higherRsiOversold)

    if exitCondLong and f_confirm(exitCondLong, confirmBars)
        strategy.exit("ExitLong", from_entry="Long", stop=trailingStopLevel, comment=txtCloseLong)
        if activatePineConnector
            alert(txtCloseLong, alert.freq_once_per_bar)
        inLongTrade := false

    if exitCondShort and f_confirm(exitCondShort, confirmBars)
        strategy.exit("ExitShort", from_entry="Short", stop=trailingStopLevel, comment=txtCloseShort)
        if activatePineConnector
            alert(txtCloseShort, alert.freq_once_per_bar)
        inShortTrade := false

// Reset counter when the bullish trend ends
if not rawLongSignal
    longTradeCount := 0

//-------------------------------------------------------------------
// Plot & styling
//-------------------------------------------------------------------
plot(emaShort, color=color.blue, linewidth=1, title="EMA Short")
plot(emaLong , color=color.red , linewidth=1, title="EMA Long")
barcolor(inLongTrade ? color.new(color.green,0) : inShortTrade ? color.new(color.red,0) : na)
bgcolor(rawLongSignal ? color.new(color.green,90) : rawShortSignal ? color.new(color.red,90) : na)
// Signal arrows disabled (user request):
// plotshape(longSignal , title="Long signal",  style=shape.triangleup,   location=location.belowbar,  color=color.green, size=size.tiny)
// plotshape(shortSignal, title="Short signal", style=shape.triangledown, location=location.abovebar, color=color.red,   size=size.tiny)

//-------------------------------------------------------------------
// HOW TO USE with PineConnector (quick checklist):
// 1. Attach this script to the chart.
// 2. Click the “Alert” bell → Create Alert.
// 3. Condition: “Scalping Trend Power … (Any alert() call)” (or “Order fills only”).
// 4. Webhook URL: https://webhook.pineconnector.com
// 5. Leave the Message box empty – the script fills it.
// 6. On MT5, run the PineConnector EA on the same symbol (dynSymbol) and keep VolumeType = Lots.
// 7. Enter your License ID in the input and tick “Activate PineConnector”.
//-------------------------------------------------------------------