এই কৌশলটি প্রবণতা নির্ধারণ এবং বাণিজ্য সংকেতগুলির জন্য অভিযোজিত জিরো লেগ ইএমএ সূচক ব্যবহার করে। অভিযোজিত ইএমএ গতিশীলভাবে প্যারামিটারগুলিকে বিলম্ব দূর করতে সামঞ্জস্য করে। এটি প্রবণতা অনুসরণ করার লক্ষ্যে।
কৌশলগত যুক্তি:
কোসিনস এবং আই-কিউ অভিযোজিত অ্যালগরিদম দিয়ে অ্যাডাপ্টিভ জিরো লেগ ইএমএ গণনা করুন।
ইএমএ হল স্বাভাবিক ইএমএ, ইসি হল অভিযোজিত শূন্য বিলম্ব ইএমএ।
যখন ইসি ইএমএ এর উপরে অতিক্রম করে তখন লম্বা এবং যখন এর নীচে অতিক্রম করে তখন সংক্ষিপ্ত।
ভুল সংকেত ফিল্টার করার জন্য ত্রুটি বক্ররেখা গণনা করুন এবং সীমা নির্ধারণ করুন।
স্টপ লসের জন্য নির্দিষ্ট পয়েন্ট ব্যবহার করুন এবং ঝুঁকি নিয়ন্ত্রণের জন্য মুনাফা নিন।
উপকারিতা:
এডাপ্টিভ ইএমএ সূচক বিলম্বকে উল্লেখযোগ্যভাবে হ্রাস করে।
থ্রেশহোল্ড ফিল্টারিং সিগন্যালের গুণমান উন্নত করে এবং মিথ্যা ব্রেকআউট এড়ায়।
সহজ স্টপ এবং লক্ষ্য বাস্তবায়ন করা সহজ।
ঝুঁকি:
এডাপ্টিভ ইএমএ প্যারামিটার অস্থির হয়ে উঠতে পারে।
স্থির স্টপ/টার্গেট পরিবর্তনশীল বাজারের অবস্থার সাথে মানিয়ে নিতে ব্যর্থ হয়।
ক্ষতির আকারের কোন সীমা নেই, বড় ক্ষতির ঝুঁকি রয়েছে।
সংক্ষেপে, এই কৌশলটি প্রবণতা অনুসরণ করার জন্য অভিযোজিত ইএমএ ব্যবহার করে, কিছুটা লেগ হ্রাস করে। তবে ঝুঁকি নিয়ন্ত্রণের জন্য পরামিতি স্থিতিশীলতা এবং অনুকূলিত স্টপ প্রয়োজন।
/*backtest start: 2023-09-05 00:00:00 end: 2023-09-12 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title="Adaptive Zero Lag EMA v2 (w/ Backtest Date Range)", shorttitle="AZLEMA", overlay = true, commission_type=strategy.commission.cash_per_contract, slippage = 5, pyramiding=1, calc_on_every_tick=true) src = input(title="Source", defval=close) secType = input(title="Security Type", options=["Forex", "Metal Spot", "Cryptocurrency","Custom"], defval="Forex") contracts = input(title="Custom # of Contracts", defval=1, step=1) limit = input(title="Max Lots", defval=100) Period = input(title="Period", defval = 20) adaptive = input(title="Adaptive Method", options=["Off", "Cos IFM", "I-Q IFM", "Average"], defval="Cos IFM") GainLimit = input(title="Gain Limit", defval = 8) Threshold = input(title="Threshold", defval=0.05, step=0.01) fixedSL = input(title="SL Points", defval=70) fixedTP = input(title="TP Points", defval=10) risk = input(title='Risk', defval=0.01, step=0.01) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2019, title = "From Year", minval = 2015) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2015) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true range = 50 //input(title="Max Period", defval=60, minval=8, maxval=100) PI = 3.14159265359 lenIQ = 0.0 lenC = 0.0 //############################################################################## //I-Q IFM //############################################################################## if(adaptive=="I-Q IFM" or adaptive=="Average") imult = 0.635 qmult = 0.338 inphase = 0.0 quadrature = 0.0 re = 0.0 im = 0.0 deltaIQ = 0.0 instIQ = 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 //############################################################################## if(adaptive == "Cos IFM" or adaptive == "Average") s2 = 0.0 s3 = 0.0 deltaC = 0.0 instC = 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) //############################################################################## //Trade Logic & Risk Management //############################################################################## buy = crossover(EC,EMA) and 100*LeastError/src > Threshold sell = crossunder(EC,EMA) and 100*LeastError/src > Threshold secScaler = secType == "Forex" ? 100000 : secType == "Metal Spot" ? 100 : secType == "Cryptocurrency" ? 10000 : secType == "Custom" ? contracts : 0 strategy.initial_capital = 50000 balance = strategy.initial_capital + strategy.netprofit if (time>timestamp(2016, 1, 1 , 0, 0) and balance > 0) //LONG lots = ((risk * balance)/fixedSL)*secScaler lots := lots > limit * secScaler ? limit * secScaler : lots strategy.entry("BUY", strategy.long, oca_name="BUY", when=buy and window()) strategy.exit("B.Exit", "BUY", qty_percent = 100, loss=fixedSL, trail_offset=15, trail_points=fixedTP) //SHORT strategy.entry("SELL", strategy.short, oca_name="SELL",when=sell and window()) strategy.exit("S.Exit", "SELL", qty_percent = 100, loss=fixedSL, trail_offset=15, trail_points=fixedTP)