
متحرک وقت فلٹرنگ سپورٹ مزاحمت ٹریکنگ اسٹاپ ٹریڈنگ سسٹم ایک اعلی درجے کی مقداری تجارتی حکمت عملی ہے جو عین مطابق انٹری سگنل ، ذہین وقت فلٹرنگ اور خود بخود رسک مینجمنٹ کو جوڑتی ہے۔ یہ نظام خاص طور پر ایسے تاجروں کے لئے ڈیزائن کیا گیا ہے جو کسی خاص وقت کی کھڑکی کے اندر اعلی امکانات والے تجارتی مواقع کی نشاندہی کرنا چاہتے ہیں ، جبکہ متحرک ٹریکنگ اسٹاپ اور کچھ پوزیشن مینجمنٹ ٹکنالوجی کو بروئے کار لاتے ہوئے ، تجارت کی کارکردگی کو بہتر بناتے ہیں۔ حکمت عملی کا بنیادی مرکز سپورٹ اور مزاحمت کی سطح کی متحرک شناخت کے ذریعے ہے ، جو تجارتی وقت فلٹرنگ اور حجم کی تصدیق کے ساتھ مل کر ، درست تجارتی سگنل فراہم کرتا ہے۔
اس حکمت عملی کے بنیادی اصول تین بنیادی عناصر کے ہم آہنگی پر مبنی ہیں: درست اندراج، بہترین وقت اور حالت کا انتظام۔
داخلہ نظام: حکمت عملی متحرک طور پر اہم قیمت کی سطح کی نشاندہی کرکے الٹ جانے کے مواقع کی تلاش کرتی ہے۔ یہ سپورٹ اور مزاحمت کی سطح کا حساب لگانے کے لئے ایک قابل ترتیب واپسی کی مدت کا استعمال کرتا ہے ، اور جب قیمت ان اہم علاقوں کے ساتھ تعامل کرتی ہے تو اس میں داخل ہونے کا اشارہ ہوتا ہے۔ داخلے کی شرائط میں قیمت اور سپورٹ / مزاحمت کی سطح کے ساتھ تعامل ، لین دین کی تصدیق اور اختیاری رجحان فلٹر کی تصدیق شامل ہے۔ جب قیمت سپورٹ کی سطح سے رابطہ کرتی ہے اور قیمت سپورٹ باؤنج سے اوپر ہوتی ہے اور لین دین اوسط سے اوپر ہوتا ہے تو ، نظام ایک سے زیادہ سگنل پیدا کرتا ہے۔ اسی طرح ، جب قیمت مزاحمت کی سطح سے رابطہ کرتی ہے اور قیمت مزاحمت کے باؤنج سے نیچے ہوتی ہے اور لین دین اوسط سے اوپر ہوتا ہے تو ، نظام ایک خالی سگنل پیدا کرتا ہے۔
وقت فلٹرنگ نظام: حکمت عملی میں ایک جامع ٹائم فلٹرنگ سسٹم ہے جو تاجروں کو بہترین ٹریڈنگ کے اوقات کی وضاحت کرنے کی اجازت دیتا ہے۔ اس میں شامل ہیں:
خطرے کے انتظام کے نظام: حکمت عملی میں تین درجے کے خطرے کے انتظام کا طریقہ استعمال کیا گیا ہے:
کوڈ کو گہرائی سے تجزیہ کرنے کے بعد، اس حکمت عملی کے درج ذیل فوائد ہیں:
جامع انٹری سگنل: قیمت کے رویے ، حجم کی تصدیق اور رجحان کی مستقل مزاجی کے ساتھ مل کر ، تجارتی سگنل کی وشوسنییتا کو بہتر بناتا ہے۔ نظام اہم معاونت اور مزاحمت کے مقامات کے قریب اعلی امکان والے الٹ پوائنٹس کی تلاش کرتا ہے ، جس سے جھوٹے توڑنے کا خطرہ کم ہوجاتا ہے۔
لچکدار وقت فلٹرنگ نظام: تاجروں کو بہترین تجارتی اوقات پر توجہ دینے کی اجازت دیتا ہے ، اور کم لیکویڈیٹی یا اعلی اتار چڑھاؤ والے مارکیٹ کے ماحول سے گریز کرتا ہے۔ اس سے تجارت کی کارکردگی میں اضافہ ہوتا ہے اور مارکیٹ کے خراب حالات میں تجارت کا امکان کم ہوتا ہے۔ کثیر ٹائم زون ٹریڈنگ اور کسٹم ٹریڈنگ ٹائم سیٹنگ کی حمایت کرتا ہے ، جس سے یہ دنیا بھر کے تاجروں کے لئے موزوں ہے۔
اعلی درجے کی خطرے کے انتظام کی خصوصیات: متحرک ٹریکنگ اسٹاپ سسٹم مارکیٹ میں اتار چڑھاؤ کے ساتھ خود بخود ایڈجسٹ ہوتا ہے ، منافع کو بچانے میں مدد کرتا ہے اور منافع بخش پوزیشنوں کو جاری رکھتا ہے۔ کثیر سطح کے اسٹاپ ٹارگٹ اور جزوی طور پر خالی پوزیشن کے اختیارات منافع کو مختلف قیمت کی سطح پر لاک کرنے کی اجازت دیتے ہیں۔
مکمل بصری آراء: سسٹم میں تفصیلی چارٹ عناصر اور ریئل ٹائم ڈیش بورڈ فراہم کیے گئے ہیں جو تاجروں کو مارکیٹ کی صورتحال اور حکمت عملی کی کارکردگی کو بصری طور پر سمجھنے میں مدد کرتے ہیں۔ داخلے کے علاقے کی نمایاں نمائش ، متحرک رسک / ریٹرن لائن اور ٹریکنگ اسٹاپ نقصان کی نمائش ٹریڈنگ کے فیصلے کے عمل کو زیادہ شفاف بناتی ہے۔
اعلی حسب ضرورت: حکمت عملی کے بنیادی پیرامیٹرز سے لے کر ٹائم فلٹرنگ کنٹرول اور رسک مینجمنٹ کے اختیارات تک ، حکمت عملی مختلف تجارتی طرزوں اور مارکیٹ کے حالات کے مطابق اپنی مرضی کے مطابق صلاحیتوں کی ایک وسیع رینج فراہم کرتی ہے۔
اگرچہ اس حکمت عملی کے بہت سے فوائد ہیں ، اس میں کچھ ممکنہ خطرات بھی ہیں:
پیرامیٹر کی اصلاح کے خطرات: حکمت عملی متعدد پیرامیٹرز کی ترتیبات پر منحصر ہے ، جیسے ریٹرننگ پیریڈ ، اے ٹی آر ضرب اور ٹرینڈ فلٹر کی ترتیبات۔ ان پیرامیٹرز کو مختلف مارکیٹ کے حالات کے مطابق ڈھالنے کے لئے احتیاط سے بہتر اور باقاعدگی سے ایڈجسٹ کرنے کی ضرورت ہے۔ پیرامیٹرز کی ضرورت سے زیادہ اصلاح سے ممکنہ طور پر زیادہ فٹ ہونا پڑتا ہے ، اور مستقبل میں مارکیٹ کے حالات میں خراب کارکردگی کا مظاہرہ کرنا پڑتا ہے۔
مارکیٹ کے حالات کی حساسیت: اعلی اتار چڑھاؤ یا کم لیکویڈیٹی والے بازاروں میں ، سپورٹ اور مزاحمت کی سطحیں توقع سے کم قابل اعتماد ہوسکتی ہیں۔ انتہائی مارکیٹ کے حالات میں ، قیمتیں تیزی سے اہم سطحوں کو توڑ سکتی ہیں ، جس کی وجہ سے اسٹاپ نقصانات کو متحرک کیا جاسکتا ہے۔
وقت فلٹرنگ کی حدٹائم فلٹرنگ: اگرچہ ٹائم فلٹرنگ سے غیر موزوں ٹریڈنگ کے اوقات سے بچنے میں مدد مل سکتی ہے ، لیکن اس سے کچھ اعلی معیار کے ٹریڈنگ کے مواقع ضائع ہونے کا بھی سبب بن سکتا ہے۔ مارکیٹ ہمیشہ مقررہ وقت کے نمونوں پر عمل نہیں کرتی ہے ، خاص طور پر اہم واقعات یا اچانک خبروں کے دوران۔
روک تھام کے جالوں کا سراغ لگانا: متحرک ٹریکنگ اسٹاپس کو ہلچل والی مارکیٹوں میں جلد ہی ٹرگر کیا جاسکتا ہے ، جس کی وجہ سے منافع بخش تجارت جلد ختم ہوجاتی ہے۔ مختلف ٹریکنگ اسٹاپس کی ترتیبات (محتاط ، متوازن ، متحرک) مختلف مارکیٹ کے ماحول میں مختلف کارکردگی کا مظاہرہ کرتی ہیں۔
سگنل تصادمجب قیمت ایک سے زیادہ سپورٹ اور مزاحمت کی سطحوں کے قریب ہوتی ہے یا جب وقت کی فلٹرنگ اور انٹری سگنل کے مابین تنازعہ ہوتا ہے تو ، مخلوط سگنل ہوسکتے ہیں۔ اس کے لئے اضافی فیصلے یا فیصلے کے زیادہ پیچیدہ قواعد کی ضرورت ہوتی ہے۔
کوڈ کے تجزیہ کے مطابق، ممکنہ اصلاحات یہ ہیں:
خود کار طریقے سے پیرامیٹرز کو ایڈجسٹ: ایک ایسا میکانزم جو مارکیٹ میں حالیہ اتار چڑھاؤ اور ٹریڈنگ کی کارکردگی کے مطابق کلیدی پیرامیٹرز کو خود بخود ایڈجسٹ کرتا ہے ، جیسے ریٹرننگ کی مدت اور اے ٹی آر ضرب۔ اس سے حکمت عملی کو مختلف مارکیٹ کے حالات میں بہتر طور پر ایڈجسٹ کرنے میں مدد مل سکتی ہے ، بغیر کسی دستی مداخلت کی ضرورت ہے۔
مارکیٹ ڈھانچہ تجزیہ کو بڑھانا: قیمت کی ساخت کی شناخت کے زیادہ پیچیدہ طریقوں کو مربوط کریں ، جیسے اعلی سطح کی حمایت اور مزاحمت کے علاقوں کی نشاندہی کرنا ، رجحان چینل یا قیمت کی شکل کی شناخت کرنا۔ اس سے انٹری سگنل کی کیفیت اور وشوسنییتا میں اضافہ ہوسکتا ہے۔
وقت فلٹرنگ منطق کو بہتر بنائیں: اعداد و شمار کے تجزیہ کے ذریعے کسی خاص مارکیٹ کے لئے بہترین تجارتی اوقات تلاش کریں اور تاریخی کارکردگی کے مطابق تجارتی وقت کی کھڑکیوں کو خود بخود ایڈجسٹ کریں۔ موسمی نمونوں اور مارکیٹ کے مخصوص واقعات (جیسے معاشی اعداد و شمار کے اجراء) کے لئے انضمام کو فلٹر کرنے پر غور کریں۔
خطرے کے انتظام میں بہتری: ایک زیادہ ذہین پوزیشن مینجمنٹ سسٹم ڈیزائن کریں ، جو پوزیشنوں کے سائز کو تاریخی اتار چڑھاؤ ، موجودہ مارکیٹ کے حالات اور حکمت عملی کی کارکردگی کے مطابق متحرک طور پر ایڈجسٹ کریں۔ منافع بخش تجارت میں منافع بخش فیصد پر مبنی سیڑھی کی سطح کی حکمت عملی شامل کریں۔
مربوط مشین لرننگ ماڈل: مشین لرننگ الگورتھم کا استعمال کرتے ہوئے معاونت اور مزاحمت کی پوزیشنوں کی وشوسنییتا کی پیش گوئی کریں ، یا مارکیٹ کے مخصوص حالات میں داخل ہونے والے سگنل کی کامیابی کے امکانات کا اندازہ لگائیں۔ یہ ممکنہ طور پر کم معیار کے تجارتی سگنل کو فلٹر کرنے میں مدد کرسکتا ہے۔
متحرک ٹائم فلٹرنگ سپورٹ مزاحمت ٹریکنگ اسٹاپ نقصان ٹریڈنگ سسٹم ایک مکمل فنکشنل ٹریڈنگ حکمت عملی ہے جس میں عین مطابق انٹری سگنل ، ذہین ٹائم فلٹرنگ اور خود ساختہ رسک مینجمنٹ شامل ہیں۔ اس نے اہم سپورٹ اور مزاحمت کی جگہوں پر اعلی امکان کے الٹ مواقع کی تلاش کے ساتھ ساتھ ٹائم فلٹرنگ اور ٹرانزیکشن کی تصدیق کا استعمال کرتے ہوئے تجارت کے معیار کو بہتر بنایا ہے۔
اس حکمت عملی کے اہم فوائد اس کی جامع ٹائم فلٹرنگ سسٹم، متحرک ٹریکنگ سٹاپ نقصان ٹیکنالوجی اور انتہائی مرئی صارف انٹرفیس میں ہیں۔ یہ خصوصیات ایک ساتھ مل کر ایک طاقتور اور لچکدار تجارتی آلہ بناتی ہیں جو مارکیٹ کے مختلف حالات اور تجارتی طرز کے لئے موزوں ہے۔
تاہم ، اس حکمت عملی کی مکمل صلاحیت کو حاصل کرنے کے ل traders ، تاجروں کو پیرامیٹرز کو احتیاط سے بہتر بنانے کی ضرورت ہے ، مارکیٹ کے مختلف ماحول میں اس کی کارکردگی کی خصوصیات کو سمجھنا ہوگا ، اور ممکنہ طور پر مخصوص مارکیٹ اور انفرادی تجارتی اہداف کے مطابق اس میں تخصیص کی ضرورت ہوگی۔ تجویز کردہ اصلاحات پر عمل درآمد سے حکمت عملی کی کارکردگی اور لچک کو مزید بڑھایا جاسکتا ہے ، اور تاجروں کو مارکیٹ کے تجزیہ اور تجارت کے عملدرآمد کے زیادہ قابل اعتماد اوزار فراہم کیے جاسکتے ہیں۔
/*backtest
start: 2025-08-13 00:00:00
end: 2025-08-20 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Futures_OKX","currency":"ETH_USDT","balance":5000}]
*/
//@version=5
strategy("FlowStateTrader", overlay=true)
// Input Parameters
lookbackPeriod = input.int(20, "Lookback Period for Key Levels", minval=5, maxval=100)
atrPeriod = input.int(14, "ATR Period", minval=5, maxval=50)
atrMultiplierSL = input.float(1.5, "SL ATR Multiplier", minval=0.5, maxval=5.0, step=0.1)
atrMultiplierTP1 = input.float(1.5, "TP1 ATR Multiplier", minval=0.5, maxval=5.0, step=0.1)
atrMultiplierTP2 = input.float(2.0, "TP2 ATR Multiplier", minval=0.5, maxval=5.0, step=0.1)
rewardToRisk = input.float(2.0, "Reward to Risk Ratio", minval=1.0, maxval=5.0, step=0.1)
// Trend Filter Settings
enableTrendFilter = input.bool(true, "Enable Trend Filter")
trendMAPeriod = input.int(20, "Trend MA Period", minval=5, maxval=200)
trendMAType = input.string("EMA", "Trend MA Type", options=["EMA", "SMA"])
// TIME FILTER SETTINGS
enableTimeFilter = input.bool(false, "Enable Time-Based Filter", tooltip="Filter trades based on specific time windows")
// 12-hour format time inputs
startHour12 = input.int(9, "Start Hour (1-12)", minval=1, maxval=12, tooltip="Trading start hour in 12-hour format")
startAMPM = input.string("AM", "Start AM/PM", options=["AM", "PM"])
endHour12 = input.int(4, "End Hour (1-12)", minval=1, maxval=12, tooltip="Trading end hour in 12-hour format")
endAMPM = input.string("PM", "End AM/PM", options=["AM", "PM"])
// Timezone selection
timeZone = input.string("UTC", "Time Zone", options=["UTC", "EST", "PST", "CST"], tooltip="Time zone for trading hours")
// Additional controls
avoidLunchHour = input.bool(true, "Avoid Lunch Hour (12:00-1:00 PM)", tooltip="Skip trading during typical lunch break")
weekendsOnly = input.bool(false, "Weekends Only", tooltip="Only trade on weekends")
weekdaysOnly = input.bool(false, "Weekdays Only", tooltip="Only trade on weekdays")
// Strategy Settings
entryQty = input.int(10, "Entry Quantity (Contracts)", minval=1, maxval=1000)
enablePartialClose = input.bool(true, "Enable Partial Close at TP1")
partialCloseQty = input.int(1, "Contracts to Close at TP1", minval=1, maxval=100)
enableAlerts = input.bool(true, "Enable Strategy Alerts")
// Dashboard Settings
dashboardSize = input.string("Medium", "Dashboard Size", options=["Small", "Medium", "Large"], tooltip="Control the size of the information dashboard")
enableScorecard = input.bool(true, "Enable Performance Scorecard", tooltip="Show performance metrics in lower right corner")
// Trailing Stop Settings
enableTrailingStop = input.bool(true, "Enable Trailing Stop")
trailMode = input.string("Balanced", "Trailing Stop Mode", options=["Conservative", "Balanced", "Aggressive"], tooltip="Conservative: Protect more profit | Balanced: Good middle ground | Aggressive: Let winners run longer")
// Set trailing parameters based on mode
trailActivationMultiplier = trailMode == "Conservative" ? 0.8 : trailMode == "Balanced" ? 1.0 : 1.2
trailDistanceMultiplier = trailMode == "Conservative" ? 0.6 : trailMode == "Balanced" ? 0.8 : 1.0
// TIME FILTER FUNCTIONS
// Convert 12-hour format to 24-hour format
convertTo24Hour(hour12, ampm) =>
var int hour24 = na
if ampm == "AM"
hour24 := hour12 == 12 ? 0 : hour12
else // PM
hour24 := hour12 == 12 ? 12 : hour12 + 12
hour24
// Convert timezone to UTC offset
getUTCOffset(tz) =>
var int offset = na
if tz == "UTC"
offset := 0
else if tz == "EST"
offset := -5 // EST is UTC-5
else if tz == "CST"
offset := -6 // CST is UTC-6
else if tz == "PST"
offset := -8 // PST is UTC-8
offset
getCurrentHour() =>
hour(time, "UTC")
getCurrentDayOfWeek() =>
dayofweek(time)
isWeekend() =>
currentDay = getCurrentDayOfWeek()
currentDay == dayofweek.saturday or currentDay == dayofweek.sunday
isWeekday() =>
not isWeekend()
isInTradingWindow() =>
if not enableTimeFilter
true
else
// Convert 12-hour inputs to 24-hour UTC
startHour24 = convertTo24Hour(startHour12, startAMPM)
endHour24 = convertTo24Hour(endHour12, endAMPM)
utcOffset = getUTCOffset(timeZone)
// Convert local time to UTC
startHourUTC = (startHour24 - utcOffset + 24) % 24
endHourUTC = (endHour24 - utcOffset + 24) % 24
currentHour = getCurrentHour()
// Handle trading window logic
var bool inWindow = false
// Handle same-day window vs overnight window
if startHourUTC <= endHourUTC
// Same day window (e.g., 9 AM to 4 PM)
inWindow := currentHour >= startHourUTC and currentHour <= endHourUTC
else
// Overnight window (e.g., 10 PM to 6 AM)
inWindow := currentHour >= startHourUTC or currentHour <= endHourUTC
// Apply day-of-week filters
if weekendsOnly and not isWeekend()
inWindow := false
if weekdaysOnly and not isWeekday()
inWindow := false
// Apply lunch hour filter (12:00-1:00 PM in selected timezone)
if avoidLunchHour and inWindow
lunchStart24 = 12 // 12 PM
lunchEnd24 = 13 // 1 PM
lunchStartUTC = (lunchStart24 - utcOffset + 24) % 24
lunchEndUTC = (lunchEnd24 - utcOffset + 24) % 24
// Check if current hour falls in lunch period
if lunchStartUTC <= lunchEndUTC
// Normal case: lunch doesn't cross midnight
if currentHour >= lunchStartUTC and currentHour < lunchEndUTC
inWindow := false
else
// Edge case: lunch period crosses midnight (shouldn't happen but safety check)
if currentHour >= lunchStartUTC or currentHour < lunchEndUTC
inWindow := false
inWindow
// Combined time filter
isGoodTradingTime() =>
isInTradingWindow()
// ATR and Volume Calculation
atr = ta.atr(atrPeriod)
volumeSMA = ta.sma(volume, atrPeriod)
// Trend Filter
trendMA = enableTrendFilter ? (trendMAType == "EMA" ? ta.ema(close, trendMAPeriod) : ta.sma(close, trendMAPeriod)) : na
isBullishTrend = enableTrendFilter ? close > trendMA : true
isBearishTrend = enableTrendFilter ? close < trendMA : true
// Key Levels Identification (Support & Resistance Zones)
support = ta.lowest(low, lookbackPeriod)
resistance = ta.highest(high, lookbackPeriod)
supportBuffer = support - atr * 0.5
resistanceBuffer = resistance + atr * 0.5
// Define Entry Conditions (with time filter)
isBullishEntry = (close > supportBuffer) and (low <= support) and (volume > volumeSMA) and isBullishTrend and isGoodTradingTime()
isBearishEntry = (close < resistanceBuffer) and (high >= resistance) and (volume > volumeSMA) and isBearishTrend and isGoodTradingTime()
// Calculate Stop Loss and Take Profit Levels
bullishSL = support - atr * atrMultiplierSL
bullishTP1 = support + atr * rewardToRisk * atrMultiplierTP1
bullishTP2 = support + atr * rewardToRisk * atrMultiplierTP2
bearishSL = resistance + atr * atrMultiplierSL
bearishTP1 = resistance - atr * rewardToRisk * atrMultiplierTP1
bearishTP2 = resistance - atr * rewardToRisk * atrMultiplierTP2
// Strategy Position Management
var float longEntryPrice = na
var float shortEntryPrice = na
var bool tp1HitLong = false
var bool tp1HitShort = false
// Trailing Stop Variables
var float longTrailStop = na
var float shortTrailStop = na
var bool longTrailActive = false
var bool shortTrailActive = false
// Calculate position sizing
finalQty = entryQty
// Long Entry
if isBullishEntry and strategy.position_size == 0
strategy.entry("Long", strategy.long, qty=finalQty)
longEntryPrice := close
tp1HitLong := false
// Reset trailing stop variables
longTrailStop := na
longTrailActive := false
if enableAlerts
alert("Long Entry Signal at " + str.tostring(close) + " - Qty: " + str.tostring(finalQty), alert.freq_once_per_bar)
// Short Entry
if isBearishEntry and strategy.position_size == 0
strategy.entry("Short", strategy.short, qty=finalQty)
shortEntryPrice := close
tp1HitShort := false
// Reset trailing stop variables
shortTrailStop := na
shortTrailActive := false
if enableAlerts
alert("Short Entry Signal at " + str.tostring(close) + " - Qty: " + str.tostring(finalQty), alert.freq_once_per_bar)
// Long Position Management
if strategy.position_size > 0
// Calculate current profit
currentProfit = close - strategy.position_avg_price
profitInATR = currentProfit / atr
// Trailing Stop Logic
if enableTrailingStop and profitInATR >= trailActivationMultiplier
// Activate trailing stop
if not longTrailActive
longTrailActive := true
longTrailStop := close - atr * trailDistanceMultiplier
else
// Update trailing stop (only move up, never down)
newTrailStop = close - atr * trailDistanceMultiplier
longTrailStop := math.max(longTrailStop, newTrailStop)
// Determine which stop loss to use
effectiveStopLoss = enableTrailingStop and longTrailActive ? longTrailStop : bullishSL
// Stop Loss (either original or trailing)
strategy.exit("Long SL", "Long", stop=effectiveStopLoss)
// Take Profit 1 (Partial Close by Contracts)
if enablePartialClose and not tp1HitLong and high >= bullishTP1 and strategy.position_size >= partialCloseQty
strategy.close("Long", qty=partialCloseQty, comment="Long TP1", immediately=true)
tp1HitLong := true
// Take Profit 2 (Close Remaining Position) or Full Close if Partial is Disabled
if (enablePartialClose and tp1HitLong and high >= bullishTP2) or (not enablePartialClose and high >= bullishTP1)
strategy.close("Long", comment=enablePartialClose ? "Long TP2" : "Long TP1", immediately=true)
// Short Position Management
if strategy.position_size < 0
// Calculate current profit (for shorts, profit when price goes down)
currentProfit = strategy.position_avg_price - close
profitInATR = currentProfit / atr
// Trailing Stop Logic
if enableTrailingStop and profitInATR >= trailActivationMultiplier
// Activate trailing stop
if not shortTrailActive
shortTrailActive := true
shortTrailStop := close + atr * trailDistanceMultiplier
else
// Update trailing stop (only move down, never up)
newTrailStop = close + atr * trailDistanceMultiplier
shortTrailStop := math.min(shortTrailStop, newTrailStop)
// Determine which stop loss to use
effectiveStopLoss = enableTrailingStop and shortTrailActive ? shortTrailStop : bearishSL
// Stop Loss (either original or trailing)
strategy.exit("Short SL", "Short", stop=effectiveStopLoss)
// Take Profit 1 (Partial Close by Contracts)
if enablePartialClose and not tp1HitShort and low <= bearishTP1 and math.abs(strategy.position_size) >= partialCloseQty
strategy.close("Short", qty=partialCloseQty, comment="Short TP1", immediately=true)
tp1HitShort := true
// Take Profit 2 (Close Remaining Position) or Full Close if Partial is Disabled
if (enablePartialClose and tp1HitShort and low <= bearishTP2) or (not enablePartialClose and low <= bearishTP1)
strategy.close("Short", comment=enablePartialClose ? "Short TP2" : "Short TP1", immediately=true)
// Reset flags when position closes
if strategy.position_size == 0
tp1HitLong := false
tp1HitShort := false
// Reset trailing stop variables
longTrailStop := na
shortTrailStop := na
longTrailActive := false
shortTrailActive := false
// Visualization - Entry Zones
var box bullishBox = na
var box bearishBox = na
var label bullishZoneLabel = na
var label bearishZoneLabel = na
// Bullish Entry Zone
// Bearish Entry Zone
// Visualization - Risk/Reward Lines for Active Positions
var line longTP1Line = na
var line longTP2Line = na
var line longSLLine = na
var line shortTP1Line = na
var line shortTP2Line = na
var line shortSLLine = na
// Labels for TP/SL Values
// Short Position Lines and Labels
// Support and Resistance Lines
plot(support, "Support", color=color.green, linewidth=1, style=plot.style_line)
plot(resistance, "Resistance", color=color.red, linewidth=1, style=plot.style_line)
// Plot Trend MA if enabled
plot(enableTrendFilter ? trendMA : na, "Trend MA", color=color.blue, linewidth=2)
// Plot Trailing Stops if active
plot(strategy.position_size > 0 and longTrailActive ? longTrailStop : na, "Long Trail Stop", color=color.orange, linewidth=2, style=plot.style_stepline)
plot(strategy.position_size < 0 and shortTrailActive ? shortTrailStop : na, "Short Trail Stop", color=color.orange, linewidth=2, style=plot.style_stepline)