অ্যাডাপ্টিভ জিরো লেগ এক্সপোনেনশিয়াল মুভিং এভারেজ কুইন্টিটিভ ট্রেডিং কৌশল হল জন এহলার্সের জিরো লেগ এক্সপোনেনশিয়াল মুভিং এভারেজ (জেডএলইএমএ) এর ধারণার উপর ভিত্তি করে তৈরি একটি পরিমাণগত ট্রেডিং কৌশল। এই কৌশলটি একটি বেসলাইন সূচক হিসাবে এক্সপোনেনশিয়াল মুভিং এভারেজ ব্যবহার করে এবং এক্সপোনেনশিয়াল মুভিং এভারেজের সময়ের পরামিতিকে গতিশীলভাবে অনুকূল করার জন্য তাত্ক্ষণিক ফ্রিকোয়েন্সি পরিমাপের (আইএফএম) একটি অভিযোজিত পদ্ধতি অন্তর্ভুক্ত করে।
এই কৌশলটির মূল ধারণাটি জন এহেলার্স এর শূন্য বিলম্ব ফিল্টার তত্ত্ব থেকে উদ্ভূত। যদিও এক্সপোনেনশিয়াল মুভিং এভারেজ একটি ব্যাপকভাবে পরিচিত প্রযুক্তিগত সূচক, তবে এর অন্তর্নিহিতভাবে বিলম্বের সমস্যা রয়েছে। এহেলার্স বিলম্বের ঘটনা কার্যকরভাবে দূর করার জন্য এক্সপোনেনশিয়াল মুভিং এভারেজের গণনার সূত্রটিতে একটি ত্রুটি সংশোধন ফ্যাক্টর প্রবর্তন করে, যা শূন্য বিলম্ব ইএমএকে মূল্য পরিবর্তনের ট্র্যাকিংয়ে আরও সংবেদনশীল করে তোলে।
অ্যাডাপ্টিভ জিরো লেগ ইএমএ কৌশলটিতে, আমরা ZLEMA এর পিরিয়ড প্যারামিটারকে অভিযোজিতভাবে অপ্টিমাইজ করার জন্য তাত্ক্ষণিক ফ্রিকোয়েন্সি পরিমাপ পদ্ধতিগুলি ব্যবহার করি। আইএফএম দুটি কৌশল নিয়ে গঠিত - কোসিন পদ্ধতি এবং ইনফেজ-চতুর্ভুজ পদ্ধতি, যা দামের দোলনের প্রভাবশালী চক্র পরিমাপ করতে পারে। এই দুটি পরিমাপের মাধ্যমে গণনা করা সর্বোত্তম সময়কালের রিয়েল-টাইম ট্র্যাকিংয়ের মাধ্যমে, আমরা বর্তমান বাজারের অবস্থার সাথে আরও ভালভাবে খাপ খাইয়ে নেওয়ার জন্য ডায়নামিকভাবে ZLEMA এর পিরিয়ড প্যারামিটার সেট করি।
যখন দ্রুত EMA (ZLEMA) নীচে থেকে ধীর EMA অতিক্রম করে, তখন একটি দীর্ঘ সংকেত উৎপন্ন হয়। যখন দ্রুত EMA ধীর EMA এর নীচে অতিক্রম করে, তখন একটি সংক্ষিপ্ত সংকেত ট্রিগার হয়। এটি চলমান গড় ক্রসওভার সিস্টেমের অনুরূপ একটি ট্রেডিং কৌশল গঠন করে।
অ্যাডাপ্টিভ জিরো লেগ ইএমএ কৌশলটি জিরো লেগ ফিল্টার এবং অ্যাডাপ্টিভ পিরিয়ড অপ্টিমাইজেশানকে নিম্নলিখিত সুবিধাগুলির সাথে একত্রিত করেঃ
এই কৌশলের কিছু ঝুঁকিও রয়েছেঃ
এই ঝুঁকিগুলি নিয়ন্ত্রণের জন্য, আমাদের বিভিন্ন বাজারের অবস্থার উপর প্যারামিটারগুলি সম্পূর্ণরূপে পরীক্ষা করতে হবে, এসএল / টিপি যথাযথভাবে সামঞ্জস্য করতে হবে এবং ব্যাকটেস্টে লাইভ ট্রেডিং পরিবেশকে সিমুলেট করতে হবে।
এই কৌশলকে আরও উন্নত করার জন্য এখনও অনেক জায়গা আছে:
এই অপ্টিমাইজেশান পদ্ধতির মাধ্যমে, কৌশলটির জয় হার, লাভজনকতা, ঝুঁকি-সমন্বিত মেট্রিক্স আরও উন্নত করার সম্ভাবনা রয়েছে।
অ্যাডাপ্টিভ জিরো লেগ ইএমএ কৌশল সফলভাবে জিরো লেগ ফিল্টার এবং গতিশীল সময়কালের অপ্টিমাইজেশানকে একত্রিত করে। কম পরামিতি এবং পরিচালনা করা সহজ, এটি বিশেষত ট্রেন্ডিং মার্কেটের জন্য উপযুক্ত। সঠিক স্টপ লস, পজিশন সাইজিং এবং অন্যান্য ঝুঁকি ব্যবস্থাপনা কৌশলগুলির সাথে একত্রে এর স্থায়িত্ব এবং লাভজনকতা আরও বাড়ানো যেতে পারে। আরও ভাল পারফরম্যান্সের জন্য এই কৌশলটি অনুকূল করার জন্য প্রচুর সম্ভাবনা রয়েছে।
/*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)