
अनुकूली शून्य अंतराल घातीय चलती औसत मात्रात्मक व्यापार रणनीति एक मात्रात्मक व्यापार रणनीति है जो एहलर्स के शून्य अंतराल घातीय चलती औसत के विचार पर आधारित है। यह रणनीति सूचकांक चलती औसत का उपयोग एक आधारभूत सूचक के रूप में करती है, और गतिशील रूप से अनुकूली गतिशील औसत की अवधि के पैरामीटर को अनुकूलित करने के लिए तत्काल आवृत्ति माप की एक अनुकूलन विधि को जोड़ती है।
इस रणनीति का मूल विचार जॉन एहलर्स के शून्य-अवशिष्ट फ़िल्टर सिद्धांत से लिया गया है। इंडेक्सल मूविंग एवरेज, हालांकि एक प्रसिद्ध तकनीकी सूचक है, इसमें स्वाभाविक रूप से अवशिष्टता की समस्या है। एहलर्स ने इंडेक्सल मूविंग एवरेज के लिए गणना सूत्र में एक त्रुटि-सुधार कारक जोड़कर अवशिष्टता को प्रभावी रूप से समाप्त कर दिया है, जिससे शून्य-अवशिष्ट इंडेक्सल मूविंग एवरेज मूल्य परिवर्तनों को अधिक संवेदनशील रूप से ट्रैक करने में सक्षम है।
स्व-अनुकूली शून्य-विलंब ईएमए रणनीति में, हम अपने आप को अनुकूलित करने के लिए शून्य-विलंब सूचकांक चलती औसत के आवधिक मापदंडों को अनुकूलित करने के लिए तत्काल आवृत्ति माप पद्धति का उपयोग करते हैं। तत्काल आवृत्ति माप दो प्रकार के होते हैं, स्ट्रिंग विधि और पॉजिटिव सिंबल विधि, जो मूल्य क्रम परिवर्तन की प्रमुख अवधि को माप सकते हैं। हम इन दोनों माप विधियों द्वारा गणना की गई सर्वोत्तम अवधि को वास्तविक समय में ट्रैक करते हैं, गतिशील रूप से शून्य-विलंब सूचकांक चलती औसत के आवधिक मापदंडों को सेट करते हैं, जिससे यह वर्तमान बाजार की स्थिति के अनुरूप हो।
जब तेज़ रेखा ((शून्य मंदी सूचकांक चलती औसत) पर धीमी रेखा ((सामान्य सूचकांक चलती औसत) को पार करते समय अधिक किया जाता है, तो नीचे पार करते समय खाली किया जाता है, जिससे एक ट्रेडिंग रणनीति सिग्नल बनता है जो चलती औसत के पार होने के समान होता है।
स्व-अनुकूली शून्य-विलंब ईएमए रणनीति शून्य-विलंब फ़िल्टर और स्व-अनुकूली चक्र अनुकूलन के तरीकों को जोड़ती है, जिसमें निम्नलिखित फायदे हैंः
स्व-अनुकूलित शून्य-विलंब ईएमए रणनीतियों में कुछ जोखिम भी हैं, जो मुख्य रूप से इस प्रकार हैंः
इन जोखिमों को नियंत्रित करने के लिए, हमें विभिन्न बाजार स्थितियों में पैरामीटर सेटिंग्स का पूरी तरह से परीक्षण करने की आवश्यकता है, स्टॉप-स्टॉप पॉइंट्स को उचित रूप से समायोजित करें, और रिटर्न्स में जितना संभव हो उतना वास्तविक-डिस्क वातावरण का अनुकरण करें।
अनुकूलन के लिए शून्य-अवसर वाली ईएमए रणनीति में अनुकूलन के लिए व्यापक स्थान है, मुख्य दिशाओं में शामिल हैंः
इन अनुकूलन के माध्यम से, जीत की दर, लाभप्रदता, जोखिम समायोजन सूचकांक आदि को बढ़ाने की उम्मीद है।
स्व-अनुकूली शून्य-विलंब ईएमए रणनीति सफलतापूर्वक शून्य-विलंब फ़िल्टर और गतिशील चक्र अनुकूलन के विचार को जोड़ती है, एक मात्रात्मक व्यापार रणनीति है जिसमें कम पैरामीटर हैं, संचालित करने और अनुकूलित करने में आसान है। इसकी प्रतिक्रियाशील, स्व-अनुकूली विशेषताएं हैं, जो ट्रेंडिंग बाजारों में बेहतर प्रदर्शन करती हैं। उचित स्टॉप और पोजीशन प्रबंधन साधनों के साथ, इसकी स्थिरता और लाभप्रदता में सुधार किया जा सकता है। इस रणनीति में अभी भी काफी अनुकूलन की जगह है और आगे की जांच के लायक है।
/*backtest
start: 2024-01-19 00:00:00
end: 2024-02-18 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title="Adaptive Zero Lag EMA v2", shorttitle="AZLEMA", overlay = true)
src = input(title="Source", defval=close)
Period = input(title="Period", defval = 20)
adaptive = input(title="Adaptive Method", options=["Off", "Cos IFM", "I-Q IFM", "Average"], defval="Off")
GainLimit = input(title="Gain Limit", defval = 10)
Threshold = input(title="Threshold", type = float, defval=0.05, step=0.01)
fixedSL = input(title="SL Points", defval=70)
fixedTP = input(title="TP Points", defval=5)
risk = input(title='Risk', defval=0.01, step=0.01)
//##############################################################################
//I-Q IFM
//#############################################################################
range = input(title="Max Period", defval=60, minval=8, maxval=100)
PI = 3.14159265359
imult = 0.635
qmult = 0.338
inphase = 0.0
quadrature = 0.0
re = 0.0
im = 0.0
deltaIQ = 0.0
instIQ = 0.0
lenIQ = 0.0
V = 0.0
P = src - src[7]
inphase := 1.25*(P[4] - imult*P[2]) + imult*nz(inphase[3])
quadrature := P[2] - qmult*P + qmult*nz(quadrature[2])
re := 0.2*(inphase*inphase[1] + quadrature*quadrature[1]) + 0.8*nz(re[1])
im := 0.2*(inphase*quadrature[1] - inphase[1]*quadrature) + 0.8*nz(im[1])
if (re!= 0.0)
deltaIQ := atan(im/re)
for i=0 to range
V := V + deltaIQ[i]
if (V > 2*PI and instIQ == 0.0)
instIQ := i
if (instIQ == 0.0)
instIQ := nz(instIQ[1])
lenIQ := 0.25*instIQ + 0.75*nz(lenIQ[1])
//##############################################################################
//COSINE IFM
//#############################################################################
s2 = 0.0
s3 = 0.0
deltaC = 0.0
instC = 0.0
lenC = 0.0
v1 = 0.0
v2 = 0.0
v4 = 0.0
v1 := src - src[7]
s2 := 0.2*(v1[1] + v1)*(v1[1] + v1) + 0.8*nz(s2[1])
s3 := 0.2*(v1[1] - v1)*(v1[1] - v1) + 0.8*nz(s3[1])
if (s2 != 0)
v2 := sqrt(s3/s2)
if (s3 != 0)
deltaC := 2*atan(v2)
for i = 0 to range
v4 := v4 + deltaC[i]
if (v4 > 2*PI and instC == 0.0)
instC := i - 1
if (instC == 0.0)
instC := instC[1]
lenC := 0.25*instC + 0.75*nz(lenC[1])
if (adaptive == "Cos IFM")
Period := round(lenC)
if (adaptive == "I-Q IFM")
Period := round(lenIQ)
if (adaptive == "Average")
Period := round((lenC + lenIQ)/2)
//##############################################################################
//ZERO LAG EXPONENTIAL MOVING AVERAGE
//##############################################################################
LeastError = 1000000.0
EC = 0.0
Gain = 0.0
EMA = 0.0
Error = 0.0
BestGain = 0.0
alpha =2/(Period + 1)
EMA := alpha*src + (1-alpha)*nz(EMA[1])
for i = -GainLimit to GainLimit
Gain := i/10
EC := alpha*(EMA + Gain*(src - nz(EC[1]))) + (1 - alpha)*nz(EC[1])
Error := src - EC
if(abs(Error)<LeastError)
LeastError := abs(Error)
BestGain := Gain
EC := alpha*(EMA + BestGain*(src - nz(EC[1]))) + (1-alpha)*nz(EC[1])
plot(EC, title="EC", color=orange, linewidth=2)
plot(EMA, title="EMA", color=red, linewidth=2)
buy = crossover(EC,EMA) and 100*LeastError/src > Threshold
sell = crossunder(EC,EMA) and 100*LeastError/src > Threshold
strategy.initial_capital = 50000
if (time>timestamp(2016, 1, 1 , 0, 0))
//LONG
balance = strategy.initial_capital + strategy.netprofit
lots = ((risk * balance)/fixedSL)*1
strategy.entry("BUY", strategy.long, qty=lots, oca_name="BUY", when=buy)
strategy.exit("B.Exit", "BUY", qty_percent = 100, loss=fixedSL, trail_offset=15, trail_points=fixedTP)
//SHORT
strategy.entry("SELL", strategy.short, qty=lots, oca_name="SELL", when=sell)
strategy.exit("S.Exit", "SELL", qty_percent = 100, loss=fixedSL, trail_offset=15, trail_points=fixedTP)