अनुकूली शून्य विलंब ईएमए रणनीति

लेखक:चाओझांग, दिनांक: 2023-09-08 16:24:02
टैगः

आपके द्वारा प्रदान की गई स्क्रिप्ट एडाप्टिव जीरो लैग ईएमए (एज़्लेमा) रणनीति पर आधारित है। यह स्क्रिप्ट आपके ट्रेडिंग डेटा में लगातार चक्रों में दो समान बिंदुओं के बीच की अवधि को निर्धारित करने के लिए जॉन एहलर्स के सिग्नल प्रोसेसिंग अनुसंधान के सिद्धांतों और कोसिनस इंस्टैंट फ्रीक्वेंसी माप (आईएफएम) के रूप में जानी जाने वाली विधि का उपयोग करती है।

व्यापारिक स्क्रिप्ट क्या करती है इसका संक्षिप्त अवलोकन यहां दिया गया हैः

  1. प्रारंभ में, यह अवधि, अनुकूलन मोड, लाभ सीमा, सीमा, स्टॉप लॉस बिंदुओं और लाभ बिंदुओं जैसे डिफ़ॉल्ट इनपुट के कॉन्फ़िगरेशन का उपयोग करके रणनीति स्थापित करता है। मुद्रा USD और प्रारंभिक पूंजी 1000 पर सेट है।

  2. यह तब अंतर समीकरणों और एहल्स विधि के संयोजन का उपयोग करके अनुकूली मोड के लिए गणना सेट करता है (जब अनुकूली? सेटिंग सही पर सेट होती है) ।

  3. यह चयनित अवधि के लिए चयनित डेटा स्रोत के औसत मूल्य (EMA) की गणना करता है।

  4. यह पूर्ण त्रुटि को कम करने वाले लाभ और त्रुटि सहसंबंध (ईसी) मानों को खोजने के लिए एक लूप ऑपरेशन करता है।

  5. इन मूल्यों का उपयोग करके, यह अंतिम ईसी मूल्य की गणना करता है और ईसी और ईएमए के मूल्य को चार्ट पर ग्राफ करता है।

  6. यह एक निश्चित सीमा से ऊपर ईसी और ईएमए के क्रॉसओवर और क्रॉसअंडर के आधार पर संभावित खरीद और बिक्री स्थितियां बनाता है।

  7. यह पहले निर्धारित खरीदारी और बिक्री स्थितियों के आधार पर लंबी और छोटी स्थिति में प्रवेश और बाहर निकलने के लिए नियम निर्धारित करता है। प्रत्येक स्थिति के लिए, यह बहुत आकार की गणना करता है और एक स्थिति में प्रवेश करता है जब संबंधित स्थिति (खरीद / बिक्री) सही होती है। यह प्रत्येक स्थिति के लिए एक स्टॉप लॉस और एक ट्रेलिंग ले लाभ सेट करता है।

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


/*backtest
start: 2023-08-08 00:00:00
end: 2023-09-07 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Adaptive Zero Lag EMA", shorttitle="AZLEMA", overlay = true, initial_capital=1000, currency="USD", commission_type=strategy.commission.cash_per_contract, commission_value=0.000005, slippage = 5, pyramiding=1, calc_on_every_tick=true)

src = input(title="Source",  defval=close)
Period = input(title="Period", defval = 20)
adaptive = input(title="Adaptive?", defval=true)
GainLimit = input(title="Gain Limit",  defval = 15)
Threshold = input(title="Threshold",  defval=0.03, step=0.01)
fixedSL = input(title="SL Points", defval=50)
fixedTP = input(title="TP Points", defval=10)
risk = input(title='Risk', defval=0.01, step=0.01)

PI = 3.14159265359
s2 = 0.0
s3 = 0.0
delta = 0.0
inst = 0.0
len = 0.0
v1 = 0.0
v2 = 0.0
v4 = 0.0

//IF adaptive is true, use the Cosine IFM strategy for determining the dominant
//cycle period
if(adaptive)
    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)
        delta := 2*atan(v2)
    for i = 0 to 100
        v4 := v4 + delta[i]
        if (v4 > 2*PI and inst == 0.0)
            inst := i - 1
    if (inst == 0.0)
        inst := inst[1]
    len := 0.25*inst + 0.75*nz(len[1])
    Period := round(len)

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

if buy
    strategy.entry("Enter Long", strategy.long)
else if sell
    strategy.entry("Enter Short", strategy.short)

अधिक