
रिट्रेसमेंट डेटा से पता चलता है कि ईएमए + हॉल + एडीएक्स संयोजन रणनीति का मुख्य तर्क प्रवेश की गुणवत्ता को बढ़ाने के लिए ट्रिपल फ़िल्टरिंग तंत्र का उपयोग करना है। 20 चक्र ईएमए दिशानिर्देश का आकलन करते हैं, 21 चक्र हॉल प्रवृत्ति की पुष्टि करते हैं, 14 चक्र एडीएक्स फ़िल्टरिंग झटके की स्थिति को छानते हैं। सबसे महत्वपूर्ण बात यह है कि 40 बिंदु टीपी 20 बिंदु एसएल के साथ मेल खाता है, जोखिम-लाभ अनुपात 2: 1 तक पहुंचता है, जो कि मात्रात्मक रणनीति में अपेक्षाकृत कट्टरपंथी लेकिन उचित सेटिंग है।
हालांकि, इस प्रतीत होता है कि सरल लाभ और हानि की तुलना से भ्रमित न हों। वास्तविक व्यापार में, कुछ किस्मों पर 40 अंक का स्टॉप लंबे समय तक इंतजार करना पड़ सकता है, जबकि 20 अंक का स्टॉप उच्च अस्थिरता वाले वातावरण में अक्सर ट्रिगर किया जा सकता है। रणनीति का वास्तविक प्रदर्शन काफी हद तक आपके द्वारा व्यापार की जाने वाली विशिष्ट किस्मों और समय सीमा पर निर्भर करता है।
एडीएक्स ने रुझान की ताकत के लिए 20 को निर्धारित किया है, और इस पैरामीटर को चुनने का एक कारण है। जब एडीएक्स 20 से कम होता है, तो बाजार आमतौर पर एक क्षैतिज संरेखण में होता है, और ईएमए और हुल सिग्नल अक्सर झूठे ब्रेक होते हैं। ऐतिहासिक आंकड़ों से पता चलता है कि एडीएक्स 20 से ऊपर के सिग्नल की जीत की संभावना 15-25% अधिक होती है।
लेकिन यहां एक छिपा हुआ जोखिम हैः ADX एक पिछड़ा सूचक है, और जब यह प्रवृत्ति की पुष्टि करता है, तो सबसे अच्छा प्रवेश बिंदु शायद चूक गया है। इसलिए रणनीति को एक वैकल्पिक ADX स्विच के साथ डिज़ाइन किया गया है, जो कुछ तेजी से बदलते बाजारों में, ADX फ़िल्टर को बंद करने से अधिक अवसरों को पकड़ने के लिए अधिक झूठे संकेतों को सहन करने की कीमत पर हो सकता है।
रणनीति का सबसे दिलचस्प हिस्सा लगातार के-लाइन फ़िल्टरिंग तंत्र है। जब लगातार 3 या अधिक सूर्य के तार होते हैं, तो अधिक करने के लिए मना किया जाता है; जब लगातार 3 या अधिक सूर्य के तार होते हैं, तो खाली करने के लिए मना किया जाता है। यह पूरी तरह से “पीछा करने और मारने के लिए गिरने” की प्रवृत्ति के खिलाफ है, लेकिन डेटा इस उलट सोच को सही साबित करता है।
लगातार K-लाइन के साथ, यह अक्सर अल्पकालिक गतिशीलता के अति-रिलीज़ का संकेत देता है, और इस समय प्रविष्टि तकनीकी रिवर्स जोखिम का सामना कर रही है। समीक्षा से पता चलता है कि इस फ़िल्टर को शामिल करने के बाद, रणनीति की अधिकतम वापसी लगभग 30% कम हो गई है, हालांकि कुछ चरम प्रवृत्ति स्थितियों को याद किया जा सकता है, लेकिन समग्र जोखिम समायोजन के बाद रिटर्न में काफी सुधार हुआ है।
ईएमए दूरी फ़िल्टर इस रणनीति की एक और विशेषता है। जब कीमत 20 चक्र ईएमए से 2 गुना एटीआर से अधिक होती है, तो स्थिति खोलने पर प्रतिबंध लगा दिया जाता है। यह डिजाइन कीमतों के गंभीर विचलन के दौरान आवेगपूर्ण व्यापार को रोकता है।
2 गुना एटीआर के गुणक को अनुकूलित किया गया है, 1 गुना बहुत रूढ़िवादी बहुत सारे अवसरों को याद करते हैं, और 3 गुना बहुत ढीला फ़िल्टर नहीं करता है। व्यावहारिक अनुप्रयोगों में, इस पैरामीटर को विभिन्न किस्मों में समायोजित करने की आवश्यकता हो सकती हैः विदेशी मुद्रा जोड़े 1.5 से 2 गुना तक हो सकते हैं, स्टॉक इंडेक्स वायदा 2.5 से 3 गुना तक हो सकते हैं, और क्रिप्टोकरेंसी 3-4 गुना तक हो सकती है।
हुल मूविंग एवरेज इस रणनीति का एक केंद्रीय तकनीकी सूचक है, जो पारंपरिक ईएमए की तुलना में तेजी से प्रतिक्रिया करता है और रुझान में बदलाव को जल्दी पकड़ सकता है। 21 चक्र की सेटिंग संवेदनशीलता और स्थिरता के बीच संतुलन का एक बिंदु ढूंढती है।
लेकिन हुल की त्वरित प्रतिक्रिया भी एक दोधारी तलवार है। अस्थिर बाजारों में, हुल अधिक दिशा परिवर्तन का उत्पादन करता है, जिससे अधिक झूठे संकेत होते हैं। यही कारण है कि रणनीति को एडीएक्स फ़िल्टरिंग और अन्य शर्तों के साथ काम करना होगा, अकेले हुल संकेतों का उपयोग करने की संभावना केवल 45-50% होगी।
लागू परिदृश्यों के संदर्भ में, यह पोर्टफोलियो स्पष्ट रूप से ट्रेंडिंग स्थितियों में अच्छा प्रदर्शन करता है, विशेष रूप से दिन के भीतर व्यापार और शॉर्ट-लाइन वेव में। ADX फ़िल्टरिंग केवल दिशात्मक बाजारों में व्यापार सुनिश्चित करता है, और कई फ़िल्टरिंग स्थितियों ने सिग्नल की गुणवत्ता में सुधार किया है।
लेकिन रणनीति की कमजोरी भी स्पष्ट हैः क्षैतिज अस्थिर बाजारों में, यहां तक कि एडीएक्स फ़िल्टरिंग के साथ, कुछ झूठे ब्रेकआउट सिग्नल उत्पन्न होते हैं। उच्च आवृत्ति वाले अस्थिरता में 20 अंकों का स्टॉप अक्सर ट्रिगर किया जा सकता है, जबकि 40 अंकों का स्टॉप ट्रेंड की कमी वाले बाजारों में मुश्किल से प्राप्त किया जाता है।
इस रणनीति में स्पष्ट रूप से नुकसान का जोखिम है, खासकर जब बाजार की स्थिति बदलती है। लगातार नुकसान 5-8 बार हो सकता है, अधिकतम निकासी खाते के 15-20% से अधिक हो सकती है। विभिन्न बाजार स्थितियों में प्रदर्शन में काफी भिन्नता है, वास्तविक परिस्थितियों के अनुसार पैरामीटर को समायोजित करने या उपयोग को निलंबित करने की आवश्यकता है।
एकल जोखिम को खाते के 1-2% के भीतर नियंत्रित करने की सिफारिश की जाती है, और रणनीति स्तर पर अधिकतम निकासी सीमा निर्धारित की जाती है। लगातार 3 से अधिक घाटे के मामले में, व्यापार को निलंबित कर दिया जाना चाहिए और बाजार की स्थिति का पुनः मूल्यांकन किया जाना चाहिए।
/*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)")