
রিটার্নিং ডেটা দেখায় যে এই ইএমএ + হুল + এডিএক্স সমন্বিত কৌশলটির মূল যুক্তিটি হল ট্রিপল ফিল্টারিং প্রক্রিয়াটি প্রবেশের গুণমান বাড়ানোর জন্য। 20 চক্রের ইএমএ মূল দিক নির্ধারণ করে, 21 চক্রের হুল প্রবণতা শক্তি নিশ্চিত করে, 14 চক্রের এডিএক্স ঝাঁকুনির পরিস্থিতি ফিল্টার করে। সর্বাধিক গুরুত্বপূর্ণ বিষয় হ’ল 40 পয়েন্ট টিপি 20 পয়েন্ট এসএল, ঝুঁকি-ফেরতের অনুপাত 2: 1 যা পরিমাণগত কৌশলটিতে তুলনামূলকভাবে আক্রমনাত্মক তবে যুক্তিসঙ্গত সেটিংয়ের অন্তর্ভুক্ত।
তবে এই সহজ মনে হওয়া লাভ-ক্ষতির তুলনায় বিভ্রান্ত হবেন না। বাস্তবিক লেনদেনের ক্ষেত্রে, 40 পয়েন্টের স্টপ-আপগুলি কিছু জাতের জন্য দীর্ঘ সময় অপেক্ষা করতে পারে, এবং 20 পয়েন্টের স্টপ-আপগুলি উচ্চ অস্থিরতার পরিবেশে ঘন ঘন ট্রিগার হতে পারে। কৌশলটির প্রকৃত কার্যকারিতা আপনার ট্রেডিংয়ের নির্দিষ্ট জাত এবং সময় ফ্রেমের উপর নির্ভর করে।
এডিএক্স ট্রেন্ডের শক্তির থ্রেশহোল্ড হিসাবে 20 সেট করে, এই প্যারামিটারটি বেছে নেওয়া যুক্তিযুক্ত। যখন এডিএক্স 20 এর নীচে থাকে, তখন বাজারগুলি সাধারণত একটি ক্রস-অর্ডার অবস্থায় থাকে, এই সময়ে ইএমএ এবং হুল সংকেতগুলি প্রায়শই মিথ্যা ব্রেকআউট হয়। ঐতিহাসিক তথ্য দেখায় যে এডিএক্স 20 এর উপরে সংকেত বিজয়ী হওয়ার হার ফিল্টারযুক্ত সংকেতের চেয়ে 15-25% বেশি।
কিন্তু এখানে একটি লুকানো ঝুঁকি রয়েছে: ADX একটি পিছিয়ে পড়া সূচক, এবং যখন এটি একটি প্রবণতা নিশ্চিত করে, তখন সর্বোত্তম প্রবেশের পয়েন্টটি মিস করা হতে পারে। তাই কৌশলটি ADX সুইচগুলিকে বিকল্পভাবে ডিজাইন করা হয়েছে, এবং কিছু দ্রুত পরিবর্তিত বাজারে, ADX ফিল্টার বন্ধ করা আরও বেশি সুযোগকে ক্যাপচার করতে পারে, আরো মিথ্যা সংকেত বহন করার খরচ।
কৌশলটির সবচেয়ে আকর্ষণীয় অংশটি হল ক্রমাগত কে-লাইন ফিল্টারিং প্রক্রিয়া। যখন ক্রমাগত 3 বা ততোধিক লাইনের উত্থান হয়, তখন অতিরিক্ত কাজ করা নিষিদ্ধ; যখন ক্রমাগত 3 বা ততোধিক লাইনের উত্থান হয়, তখন খালি করা নিষিদ্ধ। এটি “অনুসরণ-হত্যা” প্রবৃত্তির সম্পূর্ণ বিপরীত, তবে ডেটা এই বিপরীত চিন্তাভাবনাকে সঠিক বলে প্রমাণ করে।
ক্রমাগত সমান্তরাল K-লাইন প্রায়ই স্বল্পমেয়াদী গতিশীলতা অতিরিক্ত মুক্তি মানে, এই সময়ে প্রবেশাধিকার প্রযুক্তিগত রিবাউন্ড ঝুঁকি সম্মুখীন হয়। retracement দেখায় যে এই ফিল্টারিং শর্ত যোগ করার পরে, কৌশল সর্বোচ্চ প্রত্যাহার প্রায় 30% হ্রাস করা হয়, যদিও কিছু চরম প্রবণতা পরিস্থিতি মিস করা হতে পারে, কিন্তু সামগ্রিক ঝুঁকি সমন্বয় পরে আয় উল্লেখযোগ্যভাবে উন্নত।
ইএমএ দূরত্ব ফিল্টার এই কৌশলটির আরেকটি হাইলাইট। যখন দাম 20 চক্রের ইএমএ থেকে 2xATR এর বেশি দূরে থাকে, তখন পজিশন খোলার নিষেধাজ্ঞা দেওয়া হয়। এই নকশাটি যখন দাম গড়ের তীব্র বিচ্যুতিতে থাকে তখন আবেগময় লেনদেন প্রতিরোধ করে।
2xATR এর গুণকটি অপ্টিমাইজ করা হয়েছে, 1x খুব রক্ষণশীল অনেক সুযোগ মিস করবে, এবং 3x খুব শিথিল একটি ফিল্টার হবে না। বাস্তব প্রয়োগে, এই প্যারামিটারটি বিভিন্ন জাতের জন্য সামঞ্জস্য করতে পারেঃ বৈদেশিক মুদ্রার জোড়া 1.5-2x উপযুক্ত হতে পারে, স্টক সূচক ফিউচারগুলি 2.5-3x প্রয়োজন হতে পারে, এবং ক্রিপ্টোকারেন্সি 3-4x প্রয়োজন হতে পারে।
হুল মুভিং এভারেজ হল এই কৌশলটির মূল প্রযুক্তিগত সূচক, যা প্রচলিত ইএমএর তুলনায় দ্রুত প্রতিক্রিয়াশীল এবং প্রবণতা রূপান্তরকে আরও তাড়াতাড়ি ধরতে পারে। 21 চক্রের সেটিংটি সংবেদনশীলতা এবং স্থায়িত্বের মধ্যে একটি ভারসাম্য খুঁজে পায়।
কিন্তু হুলের দ্রুত প্রতিক্রিয়াও একটি দ্বি-মুখী তলোয়ার। অস্থির বাজারে, হুল আরও দিক পরিবর্তন করে, যার ফলে আরও মিথ্যা সংকেত তৈরি হয়। এই কারণেই কৌশলটি এডিএক্স ফিল্টারিং এবং অন্যান্য শর্তগুলির সাথে কাজ করতে হবে। একা হুল সংকেত ব্যবহার করে জয়লাভের হার 45-50% হতে পারে।
প্রযোজ্য পরিস্থিতিতে, এই পোর্টফোলিওটি স্পষ্ট প্রবণতা পরিস্থিতিতে বিশেষ করে দিনের ব্যবসায় এবং সংক্ষিপ্ত তরঙ্গের মধ্যে ভাল কাজ করে। ADX ফিল্টারিং কেবলমাত্র নির্দেশিত বাজারে ট্রেডিং নিশ্চিত করে এবং একাধিক ফিল্টারিং শর্তগুলি সংকেতের গুণমানকে উন্নত করে।
কিন্তু এই কৌশলটির দুর্বলতাও স্পষ্টঃ এমনকি ADX ফিল্টার থাকা সত্ত্বেও, কিছু মিথ্যা ব্রেকিং সিগন্যাল তৈরি হতে পারে। উচ্চ ফ্রিকোয়েন্সির কম্পনের সময় ২০ পয়েন্টের স্টপ প্রায়শই ট্রিগার করা যেতে পারে, এবং 40 পয়েন্টের স্টপটি ট্রেন্ডের অভাবের বাজারে পাওয়া কঠিন।
এই কৌশলটি হ্রাসের সুস্পষ্ট ঝুঁকি নিয়ে আসে, বিশেষত যখন বাজার পরিস্থিতি পরিবর্তিত হয়। ক্রমাগত ক্ষতির পরিমাণ 5-8 বার হতে পারে এবং সর্বাধিক প্রত্যাহারটি অ্যাকাউন্টের 15-20% ছাড়িয়ে যেতে পারে। বিভিন্ন বাজার পরিস্থিতিতে পারফরম্যান্সের মধ্যে ব্যাপক বৈচিত্র্য রয়েছে এবং প্রকৃত পরিস্থিতি অনুসারে প্যারামিটারগুলি সামঞ্জস্য করা বা ব্যবহার স্থগিত করা প্রয়োজন।
এককালীন ঝুঁকিকে অ্যাকাউন্টের ১-২% এর মধ্যে নিয়ন্ত্রণ করার পরামর্শ দেওয়া হয় এবং কৌশলগত স্তরে সর্বাধিক প্রত্যাহারের সীমা নির্ধারণ করা হয়। যদি আপনি তিনবারেরও বেশি ক্ষতির সম্মুখীন হন তবে আপনার লেনদেন স্থগিত করা উচিত এবং বাজার পরিস্থিতি পুনরায় মূল্যায়ন করা উচিত।
/*backtest
start: 2025-10-18 00:00:00
end: 2025-10-27 08:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=6
strategy("Iriza4 - DAX EMA+HULL+ADX TP40 SL20 (Streak & EMA/ATR Distance Filter)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1)
// === INPUTS ===
emaLen = input.int(20, "EMA Length")
hullLen = input.int(21, "HULL Length")
adxLen = input.int(14, "ADX Length")
adxThreshold = input.float(20, "ADX Threshold")
useADX = input.bool(true, "Use ADX filter (entry only)")
tpPoints = input.int(40, "TP (points)")
slPoints = input.int(20, "SL (points)")
// Filters
atrLen = input.int(14, "ATR Length")
atrMult = input.float(2.0, "Max distance from EMA (ATR multiples)")
maxBullStreak= input.int(3, "Block LONG if ≥ this many prior bull bars")
maxBearStreak= input.int(3, "Block SHORT if ≥ this many prior bear bars")
// === FUNCTIONS ===
// Hull Moving Average (HMA)
hma(src, length) =>
half = math.round(length / 2)
sqrt_l = math.round(math.sqrt(length))
w1 = ta.wma(src, half)
w2 = ta.wma(src, length)
ta.wma(2 * w1 - w2, sqrt_l)
// ADX (Wilder) manual calc
calc_adx(len) =>
upMove = ta.change(high)
downMove = -ta.change(low)
plusDM = na(upMove) ? na : (upMove > downMove and upMove > 0 ? upMove : 0)
minusDM = na(downMove) ? na : (downMove > upMove and downMove > 0 ? downMove : 0)
tr = ta.tr(true)
trRma = ta.rma(tr, len)
plusDI = 100 * ta.rma(plusDM, len) / trRma
minusDI = 100 * ta.rma(minusDM, len) / trRma
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
ta.rma(dx, len)
// === INDICATORS ===
ema = ta.ema(close, emaLen)
hull = hma(close, hullLen)
adx = calc_adx(adxLen)
atr = ta.atr(atrLen)
// HULL slope state
var float hull_dir = 0.0
hull_dir := hull > hull[1] ? 1 : hull < hull[1] ? -1 : hull_dir
// === STREAKS (consecutive bull/bear bars BEFORE current bar) ===
var int bullStreak = 0
var int bearStreak = 0
bullStreak := close[1] > open[1] ? bullStreak[1] + 1 : 0
bearStreak := close[1] < open[1] ? bearStreak[1] + 1 : 0
blockLong = bullStreak >= maxBullStreak
blockShort = bearStreak >= maxBearStreak
// === EMA DISTANCE FILTER ===
distFromEMA = math.abs(close - ema)
farFromEMA = distFromEMA > atrMult * atr
// === ENTRY CONDITIONS ===
baseLong = close > ema and hull_dir == 1 and (not useADX or adx > adxThreshold)
baseShort = close < ema and hull_dir == -1 and (not useADX or adx > adxThreshold)
longSignal = barstate.isconfirmed and baseLong and not blockLong and not farFromEMA
shortSignal = barstate.isconfirmed and baseShort and not blockShort and not farFromEMA
// === ENTRIES ===
if (longSignal and strategy.position_size == 0)
strategy.entry("Long", strategy.long)
if (shortSignal and strategy.position_size == 0)
strategy.entry("Short", strategy.short)
// === EXITS === (no partials, no breakeven)
if (strategy.position_size > 0)
entryPrice = strategy.position_avg_price
strategy.exit("Exit Long", from_entry="Long", stop=entryPrice - slPoints, limit=entryPrice + tpPoints)
if (strategy.position_size < 0)
entryPrice = strategy.position_avg_price
strategy.exit("Exit Short", from_entry="Short", stop=entryPrice + slPoints, limit=entryPrice - tpPoints)
// === VISUALS ===
plot(ema, color=color.orange, title="EMA 20")
plot(hull, color=hull_dir == 1 ? color.green : color.red, title="HULL 21")
plot(adx, title="ADX 14", color=color.new(color.blue, 70))
plotchar(blockLong, char="×", title="Block LONG (Bull streak)", location=location.top, color=color.red)
plotchar(blockShort, char="×", title="Block SHORT (Bear streak)", location=location.bottom,color=color.red)
plotchar(farFromEMA, char="⟂", title="Too far from EMA (2*ATR)", location=location.top, color=color.orange)
plotshape(longSignal and strategy.position_size == 0, title="Iriza4 Long", style=shape.triangleup, location=location.belowbar, size=size.tiny, color=color.green)
plotshape(shortSignal and strategy.position_size == 0, title="Iriza4 Short", style=shape.triangledown, location=location.abovebar, size=size.tiny, color=color.red)
bgcolor(strategy.position_size > 0 ? color.new(color.green, 92) : strategy.position_size < 0 ? color.new(color.red, 92) : na)
// === ALERTS ===
alertcondition(longSignal, title="Iriza4 Long", message="Iriza4 LONG (streak & EMA/ATR filter)")
alertcondition(shortSignal, title="Iriza4 Short", message="Iriza4 SHORT (streak & EMA/ATR filter)")