ট্রিপল ইএমএ রিট্রেসমেন্ট স্ক্যাল্পিং কৌশল

EMA ATR PULLBACK SCALPING
সৃষ্টির তারিখ: 2025-09-30 13:04:41 অবশেষে সংশোধন করুন: 2025-09-30 13:04:41
অনুলিপি: 0 ক্লিকের সংখ্যা: 444
2
ফোকাস
319
অনুসারী

ট্রিপল ইএমএ রিট্রেসমেন্ট স্ক্যাল্পিং কৌশল ট্রিপল ইএমএ রিট্রেসমেন্ট স্ক্যাল্পিং কৌশল

25/50/100 ইএমএ ট্রিপল ফিল্টারিং, এটাই আসল ট্রেন্ড রিট্র্যাক ট্রেডিং

এই কৌশলটি 25/50/100 তিনটি ইএমএ দিয়ে একটি সম্পূর্ণ প্রবণতা সনাক্তকরণ সিস্টেম তৈরি করে, যার জন্য ইএমএগুলি অবশ্যই ক্রমানুসারে এবং একই দিকে ঝুঁকতে হবে, এছাড়াও 0.10x এটিআর এর সর্বনিম্ন ব্যবধানের প্রয়োজনীয়তা রয়েছে। ডেটা দেখায় যে এই ট্রিপল ফিল্টারিং প্রক্রিয়াটি কার্যকরভাবে অস্থির বাজারের ভুয়া ব্রেকিং এড়াতে পারে, কেবলমাত্র সত্যিকারের প্রবণতা চলাকালীন।

মূল বিষয় হল “পরিচ্ছন্ন ইএমএ সারিবদ্ধকরণ”: 25> 50> 100 এবং সমস্ত উপরের দিকে, 25 < 50 < 100 এবং সমস্ত নীচের দিকে। স্প্যান ফিল্টারিং নিশ্চিত করে যে প্রবণতা যথেষ্ট শক্তিশালী এবং সমান্তরাল আঠালো অবস্থায় অকার্যকর সংকেত এড়াতে পারে।

প্রত্যাহার লজিক ডিজাইন সঠিকতা, 15 চক্রের মধ্যে রিভার্স কনফার্মেশন সম্পন্ন করতে হবে

কৌশলটির কেন্দ্রবিন্দু হল প্রত্যাহারের সনাক্তকরণ প্রক্রিয়া। মাল্টি-হেড রিট্র্যাকের জন্য দাম 25 বা 50 ইএমএ স্পর্শ করে কিন্তু 100 ইএমএর উপরে থাকে, এবং খালি হেডের জন্য দাম 25 বা 50 ইএমএ স্পর্শ করে কিন্তু 100 ইএমএর নীচে থাকে। এই নকশাটি প্রচলিত “সমর্থন ভেঙে আবার কেনা” এর চেয়ে অনেক বেশি নির্ভুল।

15 চক্রের প্রত্যাহারের উইন্ডোটি যুক্তিসঙ্গতভাবে সেট করা হয়েছে। ব্যাকআপ ডেটা দেখায় যে সত্যিকারের প্রবণতা প্রত্যাহার সাধারণত 10-15 চক্রের মধ্যে বিপরীত হয়, এই সময় উইন্ডো অতিক্রম করার পরে প্রত্যাহারটি প্রায়শই বোঝায় যে প্রবণতাটি পরিবর্তিত হতে পারে। একবার ওভারটাইম বা দাম 100 ইএমএ অতিক্রম করলে কৌশলটি অবিলম্বে অস্ত্রোপচার বাতিল করে দেয়।

ভর্তি নিশ্চিতকরণ ব্যবস্থা কঠোর, পুরো কে লাইনটি অবশ্যই 25 ইএমএ থেকে সম্পূর্ণ বিচ্ছিন্ন হতে হবে

প্রবেশের ট্রিগার শর্তগুলি অত্যন্ত কঠোরঃ নিশ্চিত K-লাইন বন্ধ হওয়ার পরে, পুরো K-লাইনটি (খোলা, সর্বোচ্চ, সর্বনিম্ন, বন্ধ) অবশ্যই 25 ইএমএর সঠিক দিকে অবস্থিত হতে হবে। এই নকশাটি মিথ্যা বিপর্যয় এবং প্লেটের মধ্যে গোলমাল এড়াতে পারে, যা নিশ্চিত করে যে কেবলমাত্র সত্যিকারের বিপরীত নিশ্চিত হওয়ার পরে প্রবেশ করা হবে।

মাল্টি-হেড প্রবেশের প্রয়োজনীয়তাঃ ওপেন> 25EMA, সর্বনিম্ন> 25EMA, ক্লোজ> 25EMA। খালি হেড প্রবেশের প্রয়োজনীয়তাঃ ওপেন <25EMA, সর্বোচ্চ <25EMA, ক্লোজ <25EMA। এই “পুরো কে লাইন নিশ্চিতকরণ” পদ্ধতিটি প্রবেশের গুণমানকে উল্লেখযোগ্যভাবে উন্নত করে এবং অবৈধ লেনদেনকে হ্রাস করে।

১০% পজিশন + ০.০৫% প্রসেসিং ফি, উচ্চ ফ্রিকোয়েন্সি স্কাল্পিং অপারেশনের জন্য উপযুক্ত

কৌশল ডিফল্ট 10% অবস্থান সেট মাঝারি, উভয় পর্যাপ্ত রিটার্ন পেতে এবং একক ঝুঁকি নিয়ন্ত্রণ … 0.05% ফী সেট বাস্তব লেনদেনের খরচ কাছাকাছি, retesting ফলাফল আরো রেফারেন্স মান … সমর্থন বহুমুখী দ্বিমুখী লেনদেন, এছাড়াও বিভিন্ন বাজার পরিবেশের সাথে মানিয়ে একমুখী অপারেশন চয়ন করতে পারেন .

গুরুত্বপূর্ণ সতর্কতাঃ কৌশলটি কেবলমাত্র প্রবেশের যুক্তি নিয়ে গঠিত, কোনও স্টপস্টপ ক্ষতি সেট করা হয়নি। রিয়েল-টাইমে ব্যবহারের সময় কঠোর ঝুঁকি ব্যবস্থাপনার সাথে মিলিত হতে হবে, 2-3x এটিআর এর ক্ষতি এবং 1.5-2x ঝুঁকি-ফেরত অনুপাতের স্টপস্টপ সেট করার পরামর্শ দেওয়া হয়েছে।

প্রযোজ্য দৃশ্যপট স্পষ্ট, প্রবণতা বাজার ভাল কাজ করে কিন্তু অস্থির বাজার সতর্কতা প্রয়োজন

কৌশলটি স্পষ্ট প্রবণতা বাজারগুলিতে দুর্দান্ত কাজ করে, বিশেষত একতরফা ট্রেডিংয়ের জন্য উপযুক্ত। তবে, হরতালের অস্থিরতার বাজারগুলিতে, ইএমএ স্ট্রিংয়ের শর্তগুলি পূরণ করা কঠিন এবং তুলনামূলকভাবে কম ব্যবসায়ের সুযোগ রয়েছে। এটি আসলে কৌশলটির সুবিধা, এটি প্রতিকূল পরিবেশে অত্যধিক ব্যবসায় এড়ানো যায়।

ঝুঁকি পরামর্শঃ ঐতিহাসিক পুনরাবৃত্তি ভবিষ্যতের লাভের প্রতিনিধিত্ব করে না, কৌশলটি ক্রমাগত ক্ষতির ঝুঁকি নিয়ে থাকে। ঝড়ের বাজারে দীর্ঘমেয়াদী সংকেতহীন অবস্থা দেখা দিতে পারে, উপযুক্ত বাজার পরিবেশের জন্য ধৈর্য ধরতে হবে। ব্যবহারের আগে পর্যাপ্ত মডেল ট্রেডিং যাচাই করার পরামর্শ দেওয়া হয়।

কৌশল সোর্স কোড
/*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))