
VWAP, ADX, EMA, REGIME
اس حکمت عملی کا بنیادی منطق بہت سادہ ہے:رجحان کی تصدیق کے پیش نظر ، VWAP کے قریب خاص طور پر نشانہ بنانے کے لئے جعلی توڑ پھوڑADX نے 20-35 کی حد میں فائرنگ کی اور 45 سے زیادہ پر براہ راست روک دیا گیا تھا۔ کیوں؟ کیونکہ اعداد و شمار ہمیں بتاتے ہیں کہ ADX کے بہت زیادہ ہونے کا مطلب یہ ہے کہ رجحان بہت زیادہ گرم ہے ، اور اس ماحول میں واپسی کی حکمت عملی کی کامیابی کی شرح میں تیزی سے کمی واقع ہوئی ہے۔
حکمت عملی کا تقاضا ہے کہ قیمت کو کم از کم 2 ٹکس VWAP سے گزرنا چاہئے اور پھر مضبوطی سے پیچھے ہٹنا چاہئے۔ یہ کوئی فکشن نہیں ہے ، بلکہ بہت زیادہ ریٹرننگ پر مبنی بہترین پیرامیٹرز پر مبنی ہے۔2 سے کم ٹکس کی رسائی اکثر شور ہے، 5 سے زیادہ ٹکس کی رسائی عام طور پر حقیقی رجحان کی تبدیلی کا مطلب ہے。
یہاں ایک اہم ڈیزائن ہے:1 گھنٹے کی سطح پر 20⁄50 EMA بڑے رجحانات کا فیصلہ کرنے کے لئے ذمہ دار ہے ، 5 منٹ ADX بہترین انٹری ونڈو کا انتخاب کرنے کے لئے ذمہ دار ہے。 کیوں سورج کی روشنی کا استعمال نہیں کیا؟ چونکہ سورج کی روشنی کا ردعمل بہت سست ہے۔。 کیوں 15 منٹ کا استعمال نہیں کیا؟ چونکہ 15 منٹ میں مختصر مدت کے شور کی وجہ سے آسانی سے خلل پڑ سکتا ہے۔。
60 منٹ ایک میٹھا نقطہ ہے: نہ صرف مختصر مدت کے اتار چڑھاؤ کو فلٹر کریں ، بلکہ رجحان کی تبدیلی کے ابتدائی اشارے کو بھی نہ چھوڑیں۔ جب ایک تیز لائن سست لائن کو عبور کرتی ہے اور دونوں لائنیں اوپر کی طرف جھک جاتی ہیں تو ، کثیر رخا رجحان کی تصدیق ہوتی ہے۔اس دوہری تصدیق کے طریقہ کار سے جعلی سگنلوں میں تقریباً 40 فیصد کمی واقع ہوتی ہے۔。
ADX کی 20-35 کی حد بھی قابل ذکر ہے: 20 سے کم مارکیٹ کی کمی کی نشاندہی کرتا ہے ، 35 سے زیادہ بہترین ٹریڈنگ زون میں داخل ہونا شروع ہوتا ہے ، لیکن 45 سے زیادہ گرمی سے محتاط رہنا چاہئے۔تاریخی اعداد و شمار سے پتہ چلتا ہے کہ جب ADX 25-30 کی حد میں ہوتا ہے تو ، واپسی کی حکمت عملی کی کامیابی کا سب سے زیادہ امکان ہوتا ہے。
اسٹاپ نقصان ایک دوسرے کے اختتام پر ہوتا ہے ، جو کہ خطرہ کی قدرتی حد ہے۔اگر قیمت سپورٹ یا مزاحمت کو توڑنے میں ناکام ہوجاتی ہے تو ، اس کا مطلب یہ ہے کہ ہمارا فیصلہ غلط ہے اور ہمیں فوری طور پر اس کی تصدیق کرنی ہوگی。
مقصد 1R اور 2R کی کلاسیکی ترتیب کا استعمال کرتے ہوئے مقرر کیا گیا ہے: 50٪ پوزیشن 1R میں چھوڑ دی گئی ہے، باقی 50٪ 2R میں رکھی جاتی ہے. کیوں یہ تقسیم ہے؟تقریبا 60 فیصد کامیاب تجارت 1R تک پہنچتی ہے، لیکن صرف 35 فیصد 2R تک پہنچتی ہےاس طرح کی تقسیم سے بنیادی آمدنی کی ضمانت ملتی ہے ، لیکن اس سے بڑے پیمانے پر منافع کمانے کی گنجائش بھی ملتی ہے۔
اس خطرے کی واپسی کے تناسب کے ڈیزائن کو نظر انداز نہ کریں۔ یہاں تک کہ اگر اس میں صرف 45 فیصد کامیابی ہے تو ، اس خطرے کے انتظام کے نظام میں 1،000 ڈیمو ٹریڈنگ میں مثبت منافع ہے۔جیت کی شرح نہیں، نقصان کا تناسب اہم ہے。
اس کے باوجود، اس کے بارے میں بات کرنے کی ضرورت نہیں ہے.اس حکمت عملی نے افقی مارکیٹ کے اتار چڑھاؤ میں بہت کم کارکردگی کا مظاہرہ کیاجب ADX طویل عرصے تک 20 سے کم ہوتا ہے تو ، مارکیٹ میں واضح سمت کا فقدان ہوتا ہے ، اور VWAP واپسی کے اشارے کی وشوسنییتا میں نمایاں کمی واقع ہوتی ہے۔ اس وقت سب سے بہتر آپشن یہ ہے کہ جبری تجارت کے بجائے انتظار کریں۔
حکمت عملی کا بہترین کارکردگی کا دورانیہ رجحان کے ابتدائی اور رجحان کے وسط میں ریڈکشن مرحلے میں ہوتا ہے۔مضبوط رجحان کے اختتام پر ((ADX> 45) ، منافع کی گنجائش تیزی سے تنگ ہوجاتی ہے یہاں تک کہ اگر سگنل درست ہے。 یہی وجہ ہے کہ اے ڈی ایکس ہارڈ لائن کو سیٹ کرنا پڑتا ہے۔。
ایک اور رکاوٹ نقل و حرکت کی ضروریات ہیں۔ یہ حکمت عملی مرکزی دھارے میں شامل نسلوں کے لئے زیادہ موزوں ہے ، اور یہ کہ چھوٹی آبادی کے نشانات کے لئے 2 ٹکس کی رسائی کی ضرورت بہت زیادہ حساس ہوسکتی ہے ، جن کی نقل و حرکت کم ہے۔
بہترین وقت: رجحان کے قیام کے بعد پہلی اہم واپسی ، ADX 25-35 کے درمیان ، حجم کے ساتھ ملتا ہے۔
وقت کا استعمال نہ کریں: اہم خبروں کی اشاعت سے پہلے اور بعد میں ، ADX 20 سے نیچے کی افقی مدت کے ساتھ ساتھ ADX 45 سے اوپر کے رجحان کے اختتام پر۔
پیرامیٹرز کو مختلف اقسام کے مطابق ایڈجسٹ کیا جاسکتا ہے: اعلی اتار چڑھاؤ کی شرح والی اقسام کم سے کم دخول کو 3-4 ٹکس تک ایڈجسٹ کرسکتی ہیں ، اور کم اتار چڑھاؤ کی شرح والی اقسام 2 ٹکس برقرار رکھ سکتی ہیں۔لیکن بنیادی منطق کو تبدیل نہ کریں: رجحان کی تصدیق + واپسی کی گرفتاری + سخت ہوا کا کنٹرول。
یاد رکھیں کہ کوئی بھی حکمت عملی سب کچھ نہیں کر سکتی ہے۔ یہ نظام ٹرینڈنگ مارکیٹ میں بہترین کارکردگی کا مظاہرہ کرتا ہے ، لیکن چپپی مارکیٹ میں مسلسل معمولی نقصانات کا سامنا کرنا پڑتا ہے۔اس کے بجائے کہ آپ ہر روز تجارت کرنے پر اصرار کریں ، صبر سے بہترین موقع کا انتظار کریں۔。
خطرے سے متعلق اشارہ: تاریخی ریٹرن مستقبل کی آمدنی کی نمائندگی نہیں کرتا ، حکمت عملی میں مسلسل نقصان کا خطرہ ہے ، خطرے کے انتظام کو سختی سے نافذ کرنے کی ضرورت ہے ، مختلف مارکیٹ کے حالات میں کارکردگی میں نمایاں فرق ہے۔
/*backtest
start: 2025-08-13 00:00:00
end: 2025-12-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("GC/MGC VWAP Pullback + ADX Regime (Prop-Safe)",
overlay=true,
pyramiding=0,
calc_on_every_tick=false,
process_orders_on_close=true,
initial_capital=50000)
// ---------- Inputs ----------
groupRegime = "Regime Filter"
adxLen = input.int(14, "ADX Length", group=groupRegime, minval=1)
adxMin = input.float(20.0, "ADX Min (trade allowed)", group=groupRegime, step=0.5)
adxMax = input.float(35.0, "ADX Max (best zone)", group=groupRegime, step=0.5)
adxHardStop = input.float(45.0, "ADX Hard Stop (no new entries above)", group=groupRegime, step=0.5)
groupTrend = "Trend Filter (1H)"
htf = input.timeframe("60", "Trend Timeframe", group=groupTrend)
emaFastLen = input.int(20, "EMA Fast", group=groupTrend, minval=1)
emaSlowLen = input.int(50, "EMA Slow", group=groupTrend, minval=1)
requireSlope = input.bool(true, "Require EMAs sloping", group=groupTrend)
groupSetup = "Setup Logic"
useVwap = input.bool(true, "Use Session VWAP", group=groupSetup)
minWickTicks = input.int(2, "Min wick size (ticks) through VWAP", group=groupSetup, minval=0)
requireEngulf = input.bool(false, "Require strong rejection body (close beyond midpoint)", group=groupSetup)
groupRisk = "Risk / Exits"
useStops = input.bool(true, "Use stop loss + targets", group=groupRisk)
rrTP1 = input.float(1.0, "TP1 (R multiple)", group=groupRisk, step=0.25)
rrTP2 = input.float(2.0, "TP2 (R multiple)", group=groupRisk, step=0.25)
tp1Pct = input.int(50, "TP1 % qty", group=groupRisk, minval=1, maxval=99)
tp2Pct = 100 - tp1Pct
// ---------- Core Calculations ----------
// ADX
[_, __, adx] = ta.dmi(adxLen, adxLen)
// VWAP (session)
vwap = useVwap ? ta.vwap(hlc3) : na
// 1H EMAs for direction
emaFastHTF = request.security(syminfo.tickerid, htf, ta.ema(close, emaFastLen), barmerge.gaps_off, barmerge.lookahead_off)
emaSlowHTF = request.security(syminfo.tickerid, htf, ta.ema(close, emaSlowLen), barmerge.gaps_off, barmerge.lookahead_off)
// Optional slope filter (simple: current > prior for fast/slow in trend direction)
emaFastHTF_prev = request.security(syminfo.tickerid, htf, ta.ema(close, emaFastLen)[1], barmerge.gaps_off, barmerge.lookahead_off)
emaSlowHTF_prev = request.security(syminfo.tickerid, htf, ta.ema(close, emaSlowLen)[1], barmerge.gaps_off, barmerge.lookahead_off)
bullTrend = emaFastHTF > emaSlowHTF and (not requireSlope or (emaFastHTF > emaFastHTF_prev and emaSlowHTF > emaSlowHTF_prev))
bearTrend = emaFastHTF < emaSlowHTF and (not requireSlope or (emaFastHTF < emaFastHTF_prev and emaSlowHTF < emaSlowHTF_prev))
// Regime filter: "best zone" + hard stop
adxTradable = adx >= adxMin and adx <= adxMax
adxTooHot = adx > adxHardStop
// Tick helper
tick = syminfo.mintick
minWick = minWickTicks * tick
// ---------- Rejection Candles at VWAP ----------
hasVwap = useVwap and not na(vwap)
// Bullish rejection definition:
// - price probes at/through VWAP (low <= vwap - minWick)
// - closes back above VWAP
// - preferably bullish candle
bullReject =
hasVwap and
low <= (vwap - minWick) and
close > vwap and
close > open and
(not requireEngulf or close > (high + low) / 2)
// Bearish rejection definition:
// - price probes at/through VWAP (high >= vwap + minWick)
// - closes back below VWAP
// - preferably bearish candle
bearReject =
hasVwap and
high >= (vwap + minWick) and
close < vwap and
close < open and
(not requireEngulf or close < (high + low) / 2)
// We enter on break of the rejection candle high/low (next bar stop order)
// Use prior bar’s rejection signal to avoid repainting.
bullReject_prev = bullReject[1]
bearReject_prev = bearReject[1]
longStopPrice = high[1] + tick
shortStopPrice = low[1] - tick
// Risk distance (R) based on rejection candle extremes
longSL = low[1] - tick
shortSL = high[1] + tick
longRisk = math.max(longStopPrice - longSL, tick)
shortRisk = math.max(shortSL - shortStopPrice, tick)
longTP1 = longStopPrice + (longRisk * rrTP1)
longTP2 = longStopPrice + (longRisk * rrTP2)
shortTP1 = shortStopPrice - (shortRisk * rrTP1)
shortTP2 = shortStopPrice - (shortRisk * rrTP2)
// ---------- Entry Conditions ----------
canEnter = not adxTooHot and adxTradable
longCond = canEnter and bullTrend and bullReject_prev
shortCond = canEnter and bearTrend and bearReject_prev
// ---------- Orders ----------
if (longCond)
strategy.entry("L", strategy.long, stop=longStopPrice)
if (shortCond)
strategy.entry("S", strategy.short, stop=shortStopPrice)
// ---------- Exits ----------
if useStops
// Long exits
strategy.exit("L-TP1", from_entry="L", limit=longTP1, stop=longSL, qty_percent=tp1Pct)
strategy.exit("L-TP2", from_entry="L", limit=longTP2, stop=longSL, qty_percent=tp2Pct)
// Short exits
strategy.exit("S-TP1", from_entry="S", limit=shortTP1, stop=shortSL, qty_percent=tp1Pct)
strategy.exit("S-TP2", from_entry="S", limit=shortTP2, stop=shortSL, qty_percent=tp2Pct)
// ---------- Plots ----------
plot(useVwap ? vwap : na, "VWAP", linewidth=2)
plot(emaFastHTF, "HTF EMA Fast", color=color.new(color.green, 0))
plot(emaSlowHTF, "HTF EMA Slow", color=color.new(color.red, 0))
// Visual markers for rejection candles
plotshape(bullReject, title="Bull Rejection", style=shape.triangleup, location=location.belowbar, size=size.tiny, color=color.new(color.green, 0), text="BR")
plotshape(bearReject, title="Bear Rejection", style=shape.triangledown, location=location.abovebar, size=size.tiny, color=color.new(color.red, 0), text="SR")
// ---- Entry-ready signals (visual) ----
plotshape(longCond, title="LONG READY", style=shape.labelup, location=location.belowbar, text="LONG", color=color.new(color.green, 0), textcolor=color.white, size=size.tiny)
plotshape(shortCond, title="SHORT READY", style=shape.labeldown, location=location.abovebar, text="SHORT", color=color.new(color.red, 0), textcolor=color.white, size=size.tiny)
plot(longCond ? longStopPrice : na, "Long Stop Entry", style=plot.style_linebr, linewidth=2)
plot(shortCond ? shortStopPrice : na, "Short Stop Entry", style=plot.style_linebr, linewidth=2)
// =====================================================
// ADX DISPLAY (for visibility only)
// =====================================================
showADX = input.bool(true, "Show ADX (pane)", group="Signals / Alerts")
adxPlot = showADX ? adx : na
plot(adxPlot, title="ADX (5m)", color=color.new(color.orange, 0), linewidth=2)
// Reference lines
hline(20, "ADX 20", color=color.new(color.green, 60))
hline(35, "ADX 35", color=color.new(color.yellow, 60))
hline(45, "ADX 45", color=color.new(color.red, 60))