ٹرپل EMA Retracement Scalping Strategy

EMA ATR PULLBACK SCALPING
تخلیق کی تاریخ: 2025-09-30 13:04:41 آخر میں ترمیم کریں: 2025-09-30 13:04:41
کاپی: 0 کلکس کی تعداد: 443
2
پر توجہ دیں
319
پیروکار

ٹرپل EMA Retracement Scalping Strategy ٹرپل EMA Retracement Scalping Strategy

25/50/100 EMA ٹرپل فلٹرنگ ، یہ حقیقی رجحان واپسی کی تجارت ہے

ایک ہی مساوی لائن کے ساتھ تجارت نہ کریں۔ یہ حکمت عملی 25/50/100 کے تین EMAs کے ساتھ ایک مکمل رجحان کی شناخت کا نظام بناتی ہے ، جس میں EMAs کو لازمی طور پر ترتیب سے ترتیب دیا جانا چاہئے اور اسی سمت میں جھکاؤ ، اس کے علاوہ 0.10x ATR کی کم سے کم فاصلہ کی ضرورت ہے۔ اعداد و شمار سے پتہ چلتا ہے کہ یہ ٹرپل فلٹرنگ میکانزم زلزلے کی مارکیٹوں میں جعلی توڑ سے بچنے کے لئے موثر ہے ، اور صرف حقیقی رجحانات کے دوران کام کرتا ہے۔

کلیدی بات یہ ہے کہ “صاف ای ایم اے صف بندی” کی جائے: کثیر سر کے وقت 25> 50> 100 اور تمام اوپر کی طرف ، خالی سر کے وقت 25 < 50 < 100 اور تمام نیچے کی طرف۔ وقفہ فلٹرنگ اس بات کو یقینی بناتی ہے کہ رجحان کافی مضبوط ہے ، اور یکساں طور پر چپکنے والی حالت میں غیر موثر سگنل سے بچتا ہے۔

الٹ لوجیک ڈیزائن درست ہے، 15 سائیکلوں کے اندر الٹ کی تصدیق ضروری ہے

اس حکمت عملی کا بنیادی مرکز واپسی کا پتہ لگانے کا طریقہ کار ہے۔ کثیر سر واپسی کی ضرورت ہوتی ہے کہ قیمت 25 یا 50 ای ایم اے کو چھوئے لیکن 100 ای ایم اے سے اوپر رہے ، اور خالی سر واپسی کی ضرورت ہوتی ہے کہ قیمت 25 یا 50 ای ایم اے کو چھوئے لیکن 100 ای ایم اے سے نیچے رہے۔ یہ ڈیزائن روایتی “سپورٹ کو توڑنے اور پھر خریدنے” سے زیادہ درست ہے۔

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

داخلہ کی تصدیق کا طریقہ کار سخت ہے ، پوری K لائن کو 25EMA سے مکمل طور پر الگ ہونا ضروری ہے

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

کثیر سر داخلہ کی ضروریات: اوپن> 25 ای ایم اے ، کم سے کم> 25 ای ایم اے ، بند> 25 ای ایم اے۔ خالی سر داخلہ کی ضروریات: اوپن <25 ای ایم اے ، زیادہ سے زیادہ <25 ای ایم اے ، بند <25 ای ایم اے۔ اس طرح کے “مکمل K لائن کی تصدیق” کے طریقہ کار سے داخلے کے معیار میں نمایاں اضافہ ہوا ہے اور غیر موثر سودوں میں کمی واقع ہوئی ہے۔

10٪ پوزیشن + 0.05٪ فیس، ہائی فریکوئینسی کھالیں آپریشن کے لئے موزوں

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

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

قابل اطلاق منظر نامہ واضح ہے ، رجحانات کی مارکیٹ میں عمدہ کارکردگی ہے لیکن ہلچل والے بازاروں کو محتاط رہنا چاہئے

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

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

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

//@version=6
strategy("Clean 25/50/100 EMA Pullback Scalper — Entries Only (Side Select)",
     overlay=true, calc_on_every_tick=true, calc_on_order_fills=true,
     initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.05,
     pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// === Side selector ===
side = input.string("Both", "Trade Side", options=["Both", "Long Only", "Short Only"])
longsEnabled  = side == "Both" or side == "Long Only"
shortsEnabled = side == "Both" or side == "Short Only"

// === Inputs ===
lenFast   = input.int(25,  "Fast EMA (pullback)", minval=1)
lenMid    = input.int(50,  "Mid EMA (filter)",    minval=1)
lenSlow   = input.int(100, "Slow EMA (safety)",   minval=1)

useSlope  = input.bool(true,  "Require EMAs sloping same way?")
useSpread = input.bool(true,  "Require clean spacing (min spread)?")
spreadPct = input.float(0.10, "Min spread vs ATR (0.10 = 0.10×ATR)", step=0.01, minval=0.0)

pullLookback = input.int(15, "Max bars after pullback", minval=1, maxval=100)
showSignals  = input.bool(true, "Show entry markers?")

// === Series ===
ema25  = ta.ema(close, lenFast)
ema50  = ta.ema(close, lenMid)
ema100 = ta.ema(close, lenSlow)
atr    = ta.atr(14)

// === Trend & spacing ===
isUpStack   = ema25 > ema50 and ema50 > ema100
isDownStack = ema25 < ema50 and ema50 < ema100
slopeUp     = ema25 > ema25[1] and ema50 > ema50[1] and ema100 > ema100[1]
slopeDown   = ema25 < ema25[1] and ema50 < ema50[1] and ema100 < ema100[1]

minGap = atr * spreadPct
spreadUpOK   = (ema25 - ema50) > minGap and (ema50 - ema100) > minGap
spreadDownOK = (ema100 - ema50) > minGap and (ema50 - ema25) > minGap

trendLongOK  = isUpStack   and (useSlope ? slopeUp   : true) and (useSpread ? spreadUpOK   : true)
trendShortOK = isDownStack and (useSlope ? slopeDown : true) and (useSpread ? spreadDownOK : true)

// === Pullback detection state ===
var bool  pullArmedLong   = false
var bool  pullArmedShort  = false
var int   pullBarIdxLong  = na
var int   pullBarIdxShort = na
var float pullMinLong     = na
var float pullMaxShort    = na

// Long pullback state
if trendLongOK
    touched25 = low <= ema25
    touched50 = low <= ema50
    stayedAbove100 = low > ema100
    if (touched25 or touched50) and stayedAbove100
        pullArmedLong  := true
        pullBarIdxLong := bar_index
        pullMinLong    := na(pullMinLong) ? low : math.min(pullMinLong, low)
    else if pullArmedLong
        pullMinLong := na(pullMinLong) ? low : math.min(pullMinLong, low)
        if low <= ema100 or (bar_index - pullBarIdxLong > pullLookback)
            pullArmedLong := false
            pullMinLong   := na
else
    pullArmedLong := false
    pullMinLong   := na

// Short pullback state
if trendShortOK
    touched25s = high >= ema25
    touched50s = high >= ema50
    stayedBelow100 = high < ema100
    if (touched25s or touched50s) and stayedBelow100
        pullArmedShort  := true
        pullBarIdxShort := bar_index
        pullMaxShort    := na(pullMaxShort) ? high : math.max(pullMaxShort, high)
    else if pullArmedShort
        pullMaxShort := na(pullMaxShort) ? high : math.max(pullMaxShort, high)
        if high >= ema100 or (bar_index - pullBarIdxShort > pullLookback)
            pullArmedShort := false
            pullMaxShort   := na
else
    pullArmedShort := false
    pullMaxShort   := na

// === Entry triggers (confirmed bar & whole candle outside 25 EMA) ===
longEntryRaw  = pullArmedLong  and barstate.isconfirmed and (open > ema25 and low > ema25 and close > ema25) and (na(pullMinLong)  or pullMinLong  > ema100)
shortEntryRaw = pullArmedShort and barstate.isconfirmed and (open < ema25 and high < ema25 and close < ema25) and (na(pullMaxShort) or pullMaxShort < ema100)

longEntry  = longsEnabled  and longEntryRaw
shortEntry = shortsEnabled and shortEntryRaw

// Disarm after trigger
if longEntry
    pullArmedLong := false
    pullMinLong   := na
if shortEntry
    pullArmedShort := false
    pullMaxShort   := na

// === Orders (entries only; no TP/SL) ===
if longEntry and strategy.position_size <= 0
    strategy.entry("Long", strategy.long)

if shortEntry and strategy.position_size >= 0
    strategy.entry("Short", strategy.short)

// === Plots & visuals ===
plot(ema25,  "EMA 25",  color=color.new(color.teal, 0))
plot(ema50,  "EMA 50",  color=color.new(color.orange, 0))
plot(ema100, "EMA 100", color=color.new(color.purple, 0))

bgcolor(trendLongOK  ? color.new(color.green, 92) : na)
bgcolor(trendShortOK ? color.new(color.red, 92)   : na)

if showSignals and longEntry
    label.new(bar_index, low, "▲ BUY\nFull candle above 25 EMA", style=label.style_label_up, textcolor=color.white, color=color.new(color.green, 0))
if showSignals and shortEntry
    label.new(bar_index, high, "▼ SELL\nFull candle below 25 EMA", style=label.style_label_down, textcolor=color.white, color=color.new(color.red, 0))