ملٹی سائیکل ایس ایم سی فیوژن حکمت عملی


تخلیق کی تاریخ: 2025-12-22 18:05:23 آخر میں ترمیم کریں: 2026-01-23 13:53:53
کاپی: 11 کلکس کی تعداد: 255
2
پر توجہ دیں
413
پیروکار

ملٹی سائیکل ایس ایم سی فیوژن حکمت عملی ملٹی سائیکل ایس ایم سی فیوژن حکمت عملی

MTF, SMC, EMA, OB, FVG, BOS, SSL

ٹرپل سائیکل ریمونز، ایس ایم سی کا نظام مذاق نہیں کر رہا

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

1٪ ڈے لائن رسک ، 0.75٪ گھڑی لائن ، 0.5٪ چاند لائن - یہ تخفیف ڈیزائن بہت ہوشیار ہے۔ طویل مدتی سگنل اگرچہ زیادہ درست ہیں ، لیکن طویل عرصے سے انعقاد کرتے ہیں ، لہذا پوزیشن کو کم کرنا درست ہے۔ اسٹاپ نقصان کی ترتیب 12 / 40 / 100 پوائنٹس ، رسک ریٹرن 2: 3: 4 ہے ، اعداد و شمار آپ کو بتاتے ہیں کہ: وقت کا فریم جتنا لمبا ہوتا ہے ، اتنا ہی زیادہ جگہ دی جاتی ہے ، اتنا ہی زیادہ مطلوبہ منافع ہوتا ہے۔

آرڈر بلاک + منصفانہ قیمت کا فرق ، روایتی تکنیکی تجزیہ کے لئے رونا

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

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

ایف وی جی کی شناخت زیادہ براہ راست ہے: موجودہ کم ترین قیمت دو کے لائنوں سے پہلے کی اعلی ترین قیمت سے زیادہ ہے ، فرق کا سائز ایڈجسٹ کیا جاسکتا ہے۔ جب قیمت خلا کے علاقے میں واپس آجاتی ہے تو یہ ممکنہ الٹ پوائنٹ ہوتا ہے۔ رجحان کی سمت میں ایف وی جی کی واپسی کے اعداد و شمار سے پتہ چلتا ہے کہ جیت کی شرح 70٪ سے زیادہ ہوسکتی ہے۔

لیکویڈیٹی صفائی کا پتہ لگانا، حقیقی ادارہ سوچ

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

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

ہم آہنگی کی درجہ بندی کا نظام، احساس کی مقدار

حکمت عملی میں سب سے زیادہ ذہین جگہ ایک مرکب اسکورنگ میکانزم ہے۔ کم از کم 6 پوائنٹس سورج کی لکیر ، 7 پوائنٹس دائرہ ، اور 8 پوائنٹس چاند کی لکیر۔ ہر شرط کے لئے واضح اسکورنگ ہے:

  • ملٹی سائیکل رجحانات کی مستقل مزاجی: 2 پوائنٹس
  • آرڈر بلاک + ڈسکاؤنٹ زون / پریمیم زون کی حمایت: 2 پوائنٹس
  • لیکویڈیٹی صفائی: 1 پوائنٹ
  • ٹرانزیکشن کی تصدیق: 1 پوائنٹ
  • بہترین داخلے کا وقت: 1 منٹ

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

ٹائم فلٹرنگ اہم ہے، سب سے زیادہ خطرناک لمحات سے بچنے کے لئے

اس حکمت عملی میں وقت کا فلٹر شامل کیا گیا ہے: بہترین داخلے کا وقت 9-12 اور 14-16 ہے ، 12-14 کے دوپہر کے کھانے اور افتتاحی سے 35 منٹ قبل۔ یہ ڈیزائن ای ایس معاہدوں کی لیکویڈیٹی کی خصوصیات پر مبنی ہے - یورپی اختتام اور امریکی اسٹاک کے افتتاحی اوقات کے دوران ، ادارہ سب سے زیادہ متحرک ہے۔

دوپہر کے کھانے کے دوران حجم میں کمی واقع ہوتی ہے ، قیمتوں میں آسانی سے جوڑتوڑ کی جاسکتی ہے ، جس سے غلط سگنل پیدا ہوتا ہے۔ افتتاحی سے پہلے 35 منٹ کا وقفہ خطرہ ہے ، قیمتوں میں استحکام کے بعد داخل ہونے کا انتظار کرنا ایک ذہین انتخاب ہے۔

خطرے کا انتظام ایک ترتیب نہیں ہے، ہر پیرامیٹر پر گہرائی ہے

اسٹاپ نقصان کا ڈیزائن اے ٹی آر کے بجائے فکسڈ پوائنٹس کا استعمال کرتا ہے ، جو ایس ایس جیسے معیاری مرکب معاہدے پر زیادہ معقول ہے۔ سورج کی لکیر 12 پوائنٹ اسٹاپ نقصان تقریبا 0.25٪ اتار چڑھاؤ ہے ، مدار 40 پوائنٹ تقریبا 0.8٪ ہے ، اور چاند کی لکیر 100 پوائنٹ تقریبا 2٪ ہے۔

خطرے کی واپسی کے تناسب کا بڑھتا ہوا ڈیزائن ((2:3:4) مختلف سائیکل کی خصوصیات کی عکاسی کرتا ہے: مختصر دورانیے کے سگنل کثرت سے لیکن زیادہ شور ، طویل دورانیے کے سگنل نایاب لیکن اعلی معیار کے ہیں۔ لہذا طویل دورانیے میں انتظار کی لاگت کی تلافی کے لئے زیادہ منافع کی ضرورت ہوتی ہے۔

اس حکمت عملی کی حدود کو واضح کیا جانا چاہئے:

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

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

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2025-12-14 00:00:00
end: 2026-01-21 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT","balance":500000}]
*/

//@version=5
strategy("Multi-Timeframe SMC Entry System", overlay=true, pyramiding=3)

// ============================================================================
// INPUT PARAMETERS
// ============================================================================

timeframe_group = "=== TIMEFRAME SELECTION ==="
enable_daily = input.bool(true, "Enable Daily Signals", group=timeframe_group)
enable_weekly = input.bool(true, "Enable Weekly Signals", group=timeframe_group)
enable_monthly = input.bool(true, "Enable Monthly Signals", group=timeframe_group)

risk_group = "=== RISK MANAGEMENT ==="
account_risk_daily = input.float(0.1, "Daily Risk %", minval=0, maxval=5, step=0.1, group=risk_group)
account_risk_weekly = input.float(0.075, "Weekly Risk %", minval=0, maxval=5, step=0.1, group=risk_group)
account_risk_monthly = input.float(0.05, "Monthly Risk %", minval=0, maxval=5, step=0.1, group=risk_group)

daily_stop_atr = input.float(1.5, "Daily Stop (ATR)", minval=0.5, maxval=5, step=0.5, group=risk_group)
weekly_stop_atr = input.float(2.5, "Weekly Stop (ATR)", minval=1, maxval=8, step=0.5, group=risk_group)
monthly_stop_atr = input.float(4.0, "Monthly Stop (ATR)", minval=2, maxval=12, step=0.5, group=risk_group)

daily_rr_ratio = input.float(2.0, "Daily R:R", minval=1.0, maxval=5.0, step=0.5, group=risk_group)
weekly_rr_ratio = input.float(3.0, "Weekly R:R", minval=1.0, maxval=6.0, step=0.5, group=risk_group)
monthly_rr_ratio = input.float(4.0, "Monthly R:R", minval=1.0, maxval=10.0, step=0.5, group=risk_group)

confluence_group = "=== CONFLUENCE THRESHOLDS ==="
daily_min_score = input.int(6, "Daily Min Score", minval=1, maxval=10, group=confluence_group)
weekly_min_score = input.int(7, "Weekly Min Score", minval=1, maxval=10, group=confluence_group)
monthly_min_score = input.int(8, "Monthly Min Score", minval=1, maxval=10, group=confluence_group)

smc_group = "=== SMC SETTINGS ==="
ob_length = input.int(20, "Order Block Lookback", minval=5, maxval=100, group=smc_group)
fvg_atr_mult = input.float(0.5, "FVG Min Size (ATR)", minval=0.1, maxval=2, step=0.1, group=smc_group)
liquidity_lookback = input.int(10, "Liquidity Lookback", minval=3, maxval=50, group=smc_group)
swing_lookback = input.int(50, "Swing Lookback", minval=20, maxval=200, group=smc_group)

visual_group = "=== VISUALS ==="
show_premium_discount = input.bool(true, "Premium/Discount Zones", group=visual_group)

// ============================================================================
// ATR CALCULATION - 核心参考指标
// ============================================================================

atr_period = 14
atr_value = ta.atr(atr_period)
atr_4h = request.security(syminfo.tickerid, "240", ta.atr(atr_period))
atr_daily = request.security(syminfo.tickerid, "D", ta.atr(atr_period))
atr_weekly = request.security(syminfo.tickerid, "W", ta.atr(atr_period))

// ============================================================================
// MULTI-TIMEFRAME DATA
// ============================================================================

ema20_4h = request.security(syminfo.tickerid, "240", ta.ema(close, 20))
ema50_4h = request.security(syminfo.tickerid, "240", ta.ema(close, 50))
ema20_daily = request.security(syminfo.tickerid, "D", ta.ema(close, 20))
ema50_daily = request.security(syminfo.tickerid, "D", ta.ema(close, 50))
ema20_weekly = request.security(syminfo.tickerid, "W", ta.ema(close, 20))
ema50_weekly = request.security(syminfo.tickerid, "W", ta.ema(close, 50))
ema12_monthly = request.security(syminfo.tickerid, "M", ta.ema(close, 12))
ema26_monthly = request.security(syminfo.tickerid, "M", ta.ema(close, 26))

// ============================================================================
// MARKET STRUCTURE
// ============================================================================

var float last_swing_high = na
var float last_swing_low = na

if ta.pivothigh(high, 3, 3)
    last_swing_high := high[3]
if ta.pivotlow(low, 3, 3)
    last_swing_low := low[3]

is_bullish_bos = not na(last_swing_high) and close > last_swing_high
is_bearish_bos = not na(last_swing_low) and close < last_swing_low

trend_bullish_4h = close > ema20_4h and ema20_4h > ema50_4h
trend_bearish_4h = close < ema20_4h and ema20_4h < ema50_4h
trend_bullish_daily = close > ema20_daily and close > ema50_daily
trend_bearish_daily = close < ema20_daily and close < ema50_daily
trend_bullish_weekly = close > ema20_weekly and close > ema50_weekly
trend_bearish_weekly = close < ema20_weekly and close < ema50_weekly
trend_bullish_monthly = close > ema12_monthly and close > ema26_monthly
trend_bearish_monthly = close < ema12_monthly and close < ema26_monthly

// ============================================================================
// PREMIUM/DISCOUNT ZONES
// ============================================================================

swing_range_high = ta.highest(high, swing_lookback)
swing_range_low = ta.lowest(low, swing_lookback)
swing_midpoint = (swing_range_high + swing_range_low) / 2

in_premium = close > swing_midpoint
in_discount = close < swing_midpoint

range_position = (swing_range_high != swing_range_low) ? ((close - swing_range_low) / (swing_range_high - swing_range_low)) * 100 : 50
deep_discount = range_position < 30
deep_premium = range_position > 70

// ============================================================================
// ORDER BLOCKS
// ============================================================================

var float bull_ob_high = na
var float bull_ob_low = na
var int bull_ob_bar = na
var float bear_ob_high = na
var float bear_ob_low = na
var int bear_ob_bar = na

if close[1] < open[1] and close > high[1] and (close - open) > (high[1] - low[1]) * 1.2
    bull_ob_high := high[1]
    bull_ob_low := low[1]
    bull_ob_bar := bar_index[1]

if close[1] > open[1] and close < low[1] and (open - close) > (high[1] - low[1]) * 1.2
    bear_ob_high := high[1]
    bear_ob_low := low[1]
    bear_ob_bar := bar_index[1]

in_bullish_ob = not na(bull_ob_high) and low <= bull_ob_high and high >= bull_ob_low and (bar_index - bull_ob_bar) < ob_length
in_bearish_ob = not na(bear_ob_high) and low <= bear_ob_high and high >= bear_ob_low and (bar_index - bear_ob_bar) < ob_length

bull_ob_fresh = not na(bull_ob_bar) and (bar_index - bull_ob_bar) < 10
bear_ob_fresh = not na(bear_ob_bar) and (bar_index - bear_ob_bar) < 10

// ============================================================================
// FAIR VALUE GAPS - 使用ATR作为阈值
// ============================================================================

fvg_threshold = atr_value * fvg_atr_mult
bullish_fvg = low > high[2] and (low - high[2]) >= fvg_threshold
bearish_fvg = high < low[2] and (low[2] - high) >= fvg_threshold

var float last_bull_fvg_top = na
var float last_bull_fvg_bottom = na
var float last_bear_fvg_top = na
var float last_bear_fvg_bottom = na

if bullish_fvg
    last_bull_fvg_top := low
    last_bull_fvg_bottom := high[2]

if bearish_fvg
    last_bear_fvg_top := low[2]
    last_bear_fvg_bottom := high

near_bullish_fvg = not na(last_bull_fvg_top) and low <= last_bull_fvg_top and high >= last_bull_fvg_bottom
near_bearish_fvg = not na(last_bear_fvg_top) and low <= last_bear_fvg_top and high >= last_bear_fvg_bottom

if near_bullish_fvg and low <= last_bull_fvg_bottom
    last_bull_fvg_top := na
    last_bull_fvg_bottom := na

if near_bearish_fvg and high >= last_bear_fvg_top
    last_bear_fvg_top := na
    last_bear_fvg_bottom := na

// ============================================================================
// LIQUIDITY SWEEPS
// ============================================================================

sellside_sweep = low < ta.lowest(low[1], liquidity_lookback) and close > open and close > low + (high - low) * 0.6
buyside_sweep = high > ta.highest(high[1], liquidity_lookback) and close < open and close < high - (high - low) * 0.6

var bool recent_ssl_sweep = false
var bool recent_bsl_sweep = false
var int ssl_sweep_bar = 0
var int bsl_sweep_bar = 0

if sellside_sweep
    recent_ssl_sweep := true
    ssl_sweep_bar := bar_index

if buyside_sweep
    recent_bsl_sweep := true
    bsl_sweep_bar := bar_index

if bar_index - ssl_sweep_bar > 10
    recent_ssl_sweep := false

if bar_index - bsl_sweep_bar > 10
    recent_bsl_sweep := false

// ============================================================================
// VOLUME FILTER
// ============================================================================

volume_avg = ta.sma(volume, 20)
volume_confirmation = volume > volume_avg * 1.2

// ============================================================================
// CONFLUENCE SCORING
// ============================================================================

daily_score = 0
if (trend_bullish_4h and trend_bullish_daily) or (trend_bearish_4h and trend_bearish_daily)
    daily_score += 2
if (in_bullish_ob and in_discount and trend_bullish_4h) or (in_bearish_ob and in_premium and trend_bearish_4h)
    daily_score += 2
if recent_ssl_sweep or recent_bsl_sweep
    daily_score += 1
if volume_confirmation
    daily_score += 1
if is_bullish_bos or is_bearish_bos
    daily_score += 1
if near_bullish_fvg or near_bearish_fvg
    daily_score += 1
daily_score += 1

weekly_score = 0
if (trend_bullish_weekly and trend_bullish_monthly) or (trend_bearish_weekly and trend_bearish_monthly)
    weekly_score += 2
if (trend_bullish_daily and trend_bullish_weekly) or (trend_bearish_daily and trend_bearish_weekly)
    weekly_score += 2
if (deep_discount and trend_bullish_weekly) or (deep_premium and trend_bearish_weekly)
    weekly_score += 2
if recent_ssl_sweep or recent_bsl_sweep
    weekly_score += 1
if in_bullish_ob or in_bearish_ob
    weekly_score += 1
if bull_ob_fresh or bear_ob_fresh
    weekly_score += 1
weekly_score += 1

monthly_score = 0
if (trend_bullish_monthly and trend_bullish_weekly) or (trend_bearish_monthly and trend_bearish_weekly)
    monthly_score += 2
if (in_bullish_ob and deep_discount) or (in_bearish_ob and deep_premium)
    monthly_score += 2
if recent_ssl_sweep or recent_bsl_sweep
    monthly_score += 2
if (trend_bullish_daily and trend_bullish_weekly and trend_bullish_monthly) or (trend_bearish_daily and trend_bearish_weekly and trend_bearish_monthly)
    monthly_score += 2
if range_position < 20 or range_position > 80
    monthly_score += 1
monthly_score += 1

// ============================================================================
// ENTRY CONDITIONS
// ============================================================================

daily_long_condition = enable_daily and daily_score >= daily_min_score and trend_bullish_4h and in_discount and (in_bullish_ob or recent_ssl_sweep or near_bullish_fvg) 
daily_short_condition = enable_daily and daily_score >= daily_min_score and trend_bearish_4h and in_premium and (in_bearish_ob or recent_bsl_sweep or near_bearish_fvg) 
weekly_long_condition = enable_weekly and weekly_score >= weekly_min_score and trend_bullish_weekly and trend_bullish_daily and in_discount and (in_bullish_ob or recent_ssl_sweep)
weekly_short_condition = enable_weekly and weekly_score >= weekly_min_score and trend_bearish_weekly and trend_bearish_daily and in_premium and (in_bearish_ob or recent_bsl_sweep)
monthly_long_condition = enable_monthly and monthly_score >= monthly_min_score and trend_bullish_monthly and trend_bullish_weekly and deep_discount and in_bullish_ob
monthly_short_condition = enable_monthly and monthly_score >= monthly_min_score and trend_bearish_monthly and trend_bearish_weekly and deep_premium and in_bearish_ob

// ============================================================================
// STOP LOSS CALCULATION - 基于ATR
// ============================================================================

daily_stop_distance = atr_4h * daily_stop_atr
weekly_stop_distance = atr_daily * weekly_stop_atr
monthly_stop_distance = atr_weekly * monthly_stop_atr

// ============================================================================
// POSITION SIZING 
// ============================================================================

calculate_position_size(risk_pct, stop_distance) =>
    risk_amount = strategy.equity * (risk_pct / 100)
    // 止损距离就是每单位的风险金额
    position = risk_amount / stop_distance

daily_contracts = calculate_position_size(account_risk_daily, daily_stop_distance)
weekly_contracts = calculate_position_size(account_risk_weekly, weekly_stop_distance)
monthly_contracts = calculate_position_size(account_risk_monthly, monthly_stop_distance)

// ============================================================================
// STRATEGY EXECUTION
// ============================================================================

if daily_long_condition
    strategy.entry("Daily Long", strategy.long, qty=daily_contracts)
    strategy.exit("DL Exit", "Daily Long", stop=close - daily_stop_distance, limit=close + (daily_stop_distance * daily_rr_ratio))

if daily_short_condition
    strategy.entry("Daily Short", strategy.short, qty=daily_contracts)
    strategy.exit("DS Exit", "Daily Short", stop=close + daily_stop_distance, limit=close - (daily_stop_distance * daily_rr_ratio))

if weekly_long_condition
    strategy.entry("Weekly Long", strategy.long, qty=weekly_contracts)
    strategy.exit("WL Exit", "Weekly Long", stop=close - weekly_stop_distance, limit=close + (weekly_stop_distance * weekly_rr_ratio))

if weekly_short_condition
    strategy.entry("Weekly Short", strategy.short, qty=weekly_contracts)
    strategy.exit("WS Exit", "Weekly Short", stop=close + weekly_stop_distance, limit=close - (weekly_stop_distance * weekly_rr_ratio))

if monthly_long_condition
    strategy.entry("Monthly Long", strategy.long, qty=monthly_contracts)
    strategy.exit("ML Exit", "Monthly Long", stop=close - monthly_stop_distance, limit=close + (monthly_stop_distance * monthly_rr_ratio))

if monthly_short_condition
    strategy.entry("Monthly Short", strategy.short, qty=monthly_contracts)
    strategy.exit("MS Exit", "Monthly Short", stop=close + monthly_stop_distance, limit=close - (monthly_stop_distance * monthly_rr_ratio))

// ============================================================================
// VISUALS 
// ============================================================================

p1 = plot(show_premium_discount ? swing_range_high : na, color=na)
p2 = plot(show_premium_discount ? swing_midpoint : na, "EQ", color.new(color.white, 50), 1)
p3 = plot(show_premium_discount ? swing_range_low : na, color=na)
fill(p1, p2, color.new(color.red, 92))
fill(p2, p3, color.new(color.green, 92))

plotshape(daily_long_condition, "D Long", shape.triangleup, location.belowbar, color.new(color.lime, 0), size=size.small, text="D")
plotshape(daily_short_condition, "D Short", shape.triangledown, location.abovebar, color.new(color.red, 0), size=size.small, text="D")
plotshape(weekly_long_condition, "W Long", shape.triangleup, location.belowbar, color.new(color.green, 0), size=size.normal, text="W")
plotshape(weekly_short_condition, "W Short", shape.triangledown, location.abovebar, color.new(color.maroon, 0), size=size.normal, text="W")
plotshape(monthly_long_condition, "M Long", shape.triangleup, location.belowbar, color.new(color.aqua, 0), size=size.large, text="M")
plotshape(monthly_short_condition, "M Short", shape.triangledown, location.abovebar, color.new(color.fuchsia, 0), size=size.large, text="M")

plotshape(sellside_sweep, "SSL", shape.labeldown, location.top, color.new(color.yellow, 20), size=size.tiny, text="SSL")
plotshape(buyside_sweep, "BSL", shape.labelup, location.bottom, color.new(color.yellow, 20), size=size.tiny, text="BSL")
plotshape(is_bullish_bos, "BOS↑", shape.circle, location.belowbar, color.new(color.lime, 50), size=size.tiny)
plotshape(is_bearish_bos, "BOS↓", shape.circle, location.abovebar, color.new(color.red, 50), size=size.tiny)