अनुकूली शून्य विलंब घातीय गतिशील औसत मात्रात्मक ट्रेडिंग रणनीति जॉन एहलर्स के शून्य विलंब घातीय गतिशील औसत (ZLEMA) के विचार के आधार पर विकसित एक मात्रात्मक ट्रेडिंग रणनीति है। यह रणनीति घातीय गतिशील औसत को आधार रेखा संकेतक के रूप में उपयोग करती है और घातीय गतिशील औसत के अवधि पैरामीटर को गतिशील रूप से अनुकूलित करने के लिए तत्काल आवृत्ति माप (IFM) की एक अनुकूलन विधि को शामिल करती है।
इस रणनीति का मूल विचार जॉन एहलर्स के शून्य विलंब फ़िल्टर के सिद्धांत से उत्पन्न होता है। यद्यपि घातीय चलती औसत एक व्यापक रूप से ज्ञात तकनीकी संकेतक है, लेकिन इसमें स्वाभाविक रूप से विलंब की समस्या है। एहलर्स ने विलंब की घटना को प्रभावी ढंग से खत्म करने के लिए घातीय चलती औसत के गणना सूत्र में त्रुटि सुधार कारक पेश किया, जिससे शून्य विलंब ईएमए मूल्य परिवर्तनों को ट्रैक करने में अधिक संवेदनशील हो गया।
अनुकूलन शून्य अंतराल ईएमए रणनीति में, हम ZLEMA के अवधि पैरामीटर को अनुकूलनशील रूप से अनुकूलित करने के लिए तत्काल आवृत्ति माप विधियों का उपयोग करते हैं। आईएफएम में दो तकनीकें शामिल हैं - कोसिन विधि और इनफेज-क्वाड्रेटर विधि, जो मूल्य दोलन के प्रमुख चक्र को माप सकती है। इन दो मापों द्वारा गणना की गई इष्टतम अवधि के वास्तविक समय ट्रैकिंग द्वारा, हम गतिशील रूप से ZLEMA के अवधि पैरामीटर को मौजूदा बाजार की स्थिति के अनुकूल सेट करते हैं।
जब तेज ईएमए (ZLEMA) नीचे से धीमे ईएमए को पार करता है, तो एक लंबा संकेत उत्पन्न होता है। जब तेज ईएमए धीमे ईएमए से नीचे पार करता है, तो एक छोटा संकेत ट्रिगर होता है। यह चलती औसत क्रॉसओवर प्रणाली के समान एक ट्रेडिंग रणनीति बनाता है।
अनुकूली शून्य विलंब ईएमए रणनीति शून्य विलंब फ़िल्टर और अनुकूली अवधि अनुकूलन को निम्न लाभों के साथ जोड़ती हैः
इस रणनीति में कुछ जोखिम भी हैंः
इन जोखिमों को नियंत्रित करने के लिए, हमें विभिन्न बाजार स्थितियों में मापदंडों का पूरी तरह से परीक्षण करने, SL/TP को ठीक से समायोजित करने और बैकटेस्ट में लाइव ट्रेडिंग वातावरण का अनुकरण करने की आवश्यकता है।
इस रणनीति को और अधिक अनुकूलित करने के लिए अभी भी काफी जगह हैः
इन अनुकूलन साधनों के माध्यम से, रणनीति की जीत दर, लाभप्रदता, जोखिम-समायोजित मीट्रिक में और सुधार की संभावना है।
अनुकूलन शून्य विलंब ईएमए रणनीति सफलतापूर्वक शून्य विलंब फ़िल्टर और गतिशील अवधि अनुकूलन को जोड़ती है। कम मापदंडों और संचालित करने में आसान के साथ, यह विशेष रूप से प्रवृत्ति बाजारों के लिए उपयुक्त है। उचित स्टॉप लॉस, स्थिति आकार और अन्य जोखिम प्रबंधन तकनीकों के साथ, इसकी स्थिरता और लाभप्रदता को और बढ़ाया जा सकता है। बेहतर प्रदर्शन के लिए इस रणनीति को अनुकूलित करने के लिए पर्याप्त क्षमता बनी हुई है।
/*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)