अनुकूली शून्य विलंब घातीय चलती औसत मात्रात्मक व्यापार रणनीति

लेखक:चाओझांग, दिनांकः 2024-02-19 15:38:02
टैगः

img

अवलोकन

अनुकूली शून्य विलंब घातीय गतिशील औसत मात्रात्मक ट्रेडिंग रणनीति जॉन एहलर्स के शून्य विलंब घातीय गतिशील औसत (ZLEMA) के विचार के आधार पर विकसित एक मात्रात्मक ट्रेडिंग रणनीति है। यह रणनीति घातीय गतिशील औसत को आधार रेखा संकेतक के रूप में उपयोग करती है और घातीय गतिशील औसत के अवधि पैरामीटर को गतिशील रूप से अनुकूलित करने के लिए तत्काल आवृत्ति माप (IFM) की एक अनुकूलन विधि को शामिल करती है।

रणनीति तर्क

इस रणनीति का मूल विचार जॉन एहलर्स के शून्य विलंब फ़िल्टर के सिद्धांत से उत्पन्न होता है। यद्यपि घातीय चलती औसत एक व्यापक रूप से ज्ञात तकनीकी संकेतक है, लेकिन इसमें स्वाभाविक रूप से विलंब की समस्या है। एहलर्स ने विलंब की घटना को प्रभावी ढंग से खत्म करने के लिए घातीय चलती औसत के गणना सूत्र में त्रुटि सुधार कारक पेश किया, जिससे शून्य विलंब ईएमए मूल्य परिवर्तनों को ट्रैक करने में अधिक संवेदनशील हो गया।

अनुकूलन शून्य अंतराल ईएमए रणनीति में, हम ZLEMA के अवधि पैरामीटर को अनुकूलनशील रूप से अनुकूलित करने के लिए तत्काल आवृत्ति माप विधियों का उपयोग करते हैं। आईएफएम में दो तकनीकें शामिल हैं - कोसिन विधि और इनफेज-क्वाड्रेटर विधि, जो मूल्य दोलन के प्रमुख चक्र को माप सकती है। इन दो मापों द्वारा गणना की गई इष्टतम अवधि के वास्तविक समय ट्रैकिंग द्वारा, हम गतिशील रूप से ZLEMA के अवधि पैरामीटर को मौजूदा बाजार की स्थिति के अनुकूल सेट करते हैं।

जब तेज ईएमए (ZLEMA) नीचे से धीमे ईएमए को पार करता है, तो एक लंबा संकेत उत्पन्न होता है। जब तेज ईएमए धीमे ईएमए से नीचे पार करता है, तो एक छोटा संकेत ट्रिगर होता है। यह चलती औसत क्रॉसओवर प्रणाली के समान एक ट्रेडिंग रणनीति बनाता है।

लाभ

अनुकूली शून्य विलंब ईएमए रणनीति शून्य विलंब फ़िल्टर और अनुकूली अवधि अनुकूलन को निम्न लाभों के साथ जोड़ती हैः

  1. विलंब को समाप्त करता है और अधिक संवेदनशील संकेत बनाता है
  2. बाजारों की एक विस्तृत श्रृंखला के लिए अनुकूलन अवधि पैरामीटर
  3. परीक्षण और अनुकूलन के लिए आसान कम मापदंड
  4. बेहतर जोखिम नियंत्रण के लिए कॉन्फ़िगर करने योग्य फिक्स्ड SL/TP

जोखिम

इस रणनीति में कुछ जोखिम भी हैंः

  1. अनुकूलन अनुकूलित अवधि कुछ बाजार वातावरण में विफल हो सकती है
  2. अनुचित फिक्स्ड SL/TP सेटिंग्स से अत्यधिक हानि या चूक लाभ हो सकता है
  3. अपर्याप्त पैरामीटर अनुकूलन परीक्षण खराब लाइव प्रदर्शन का कारण बन सकता है

इन जोखिमों को नियंत्रित करने के लिए, हमें विभिन्न बाजार स्थितियों में मापदंडों का पूरी तरह से परीक्षण करने, SL/TP को ठीक से समायोजित करने और बैकटेस्ट में लाइव ट्रेडिंग वातावरण का अनुकरण करने की आवश्यकता है।

अनुकूलन दिशाएँ

इस रणनीति को और अधिक अनुकूलित करने के लिए अभी भी काफी जगह हैः

  1. वैकल्पिक अनुकूलन अवधि माप पद्धति, उदाहरण के लिए अस्थिरता समायोजित एमए
  2. अतिरिक्त फ़िल्टर स्थितियाँ जैसे वॉल्यूम, एमए जोड़े आदि।
  3. उन्नत SL/TP तकनीकें, जैसे कि ट्रेसिंग स्टॉप या चैंडिलियर एग्जिट
  4. जोखिम प्रबंधन के साथ गतिशील स्थिति आकार
  5. सिग्नल की गुणवत्ता में सुधार के लिए कई समय सीमा की पुष्टि

इन अनुकूलन साधनों के माध्यम से, रणनीति की जीत दर, लाभप्रदता, जोखिम-समायोजित मीट्रिक में और सुधार की संभावना है।

निष्कर्ष

अनुकूलन शून्य विलंब ईएमए रणनीति सफलतापूर्वक शून्य विलंब फ़िल्टर और गतिशील अवधि अनुकूलन को जोड़ती है। कम मापदंडों और संचालित करने में आसान के साथ, यह विशेष रूप से प्रवृत्ति बाजारों के लिए उपयुक्त है। उचित स्टॉप लॉस, स्थिति आकार और अन्य जोखिम प्रबंधन तकनीकों के साथ, इसकी स्थिरता और लाभप्रदता को और बढ़ाया जा सकता है। बेहतर प्रदर्शन के लिए इस रणनीति को अनुकूलित करने के लिए पर्याप्त क्षमता बनी हुई है।


/*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)


अधिक