অ্যাডাপ্টিভ জিরো লেগ এক্সপোনেনশিয়াল মুভিং এভারেজ কোন্টিটেটিভ ট্রেডিং স্ট্র্যাটেজি

লেখক:চাওঝাং, তারিখঃ ২০২৪-০২-১৯ 15:38:02
ট্যাগঃ

img

সারসংক্ষেপ

অ্যাডাপ্টিভ জিরো লেগ এক্সপোনেনশিয়াল মুভিং এভারেজ কুইন্টিটিভ ট্রেডিং কৌশল হল জন এহলার্সের জিরো লেগ এক্সপোনেনশিয়াল মুভিং এভারেজ (জেডএলইএমএ) এর ধারণার উপর ভিত্তি করে তৈরি একটি পরিমাণগত ট্রেডিং কৌশল। এই কৌশলটি একটি বেসলাইন সূচক হিসাবে এক্সপোনেনশিয়াল মুভিং এভারেজ ব্যবহার করে এবং এক্সপোনেনশিয়াল মুভিং এভারেজের সময়ের পরামিতিকে গতিশীলভাবে অনুকূল করার জন্য তাত্ক্ষণিক ফ্রিকোয়েন্সি পরিমাপের (আইএফএম) একটি অভিযোজিত পদ্ধতি অন্তর্ভুক্ত করে।

কৌশলগত যুক্তি

এই কৌশলটির মূল ধারণাটি জন এহেলার্স এর শূন্য বিলম্ব ফিল্টার তত্ত্ব থেকে উদ্ভূত। যদিও এক্সপোনেনশিয়াল মুভিং এভারেজ একটি ব্যাপকভাবে পরিচিত প্রযুক্তিগত সূচক, তবে এর অন্তর্নিহিতভাবে বিলম্বের সমস্যা রয়েছে। এহেলার্স বিলম্বের ঘটনা কার্যকরভাবে দূর করার জন্য এক্সপোনেনশিয়াল মুভিং এভারেজের গণনার সূত্রটিতে একটি ত্রুটি সংশোধন ফ্যাক্টর প্রবর্তন করে, যা শূন্য বিলম্ব ইএমএকে মূল্য পরিবর্তনের ট্র্যাকিংয়ে আরও সংবেদনশীল করে তোলে।

অ্যাডাপ্টিভ জিরো লেগ ইএমএ কৌশলটিতে, আমরা ZLEMA এর পিরিয়ড প্যারামিটারকে অভিযোজিতভাবে অপ্টিমাইজ করার জন্য তাত্ক্ষণিক ফ্রিকোয়েন্সি পরিমাপ পদ্ধতিগুলি ব্যবহার করি। আইএফএম দুটি কৌশল নিয়ে গঠিত - কোসিন পদ্ধতি এবং ইনফেজ-চতুর্ভুজ পদ্ধতি, যা দামের দোলনের প্রভাবশালী চক্র পরিমাপ করতে পারে। এই দুটি পরিমাপের মাধ্যমে গণনা করা সর্বোত্তম সময়কালের রিয়েল-টাইম ট্র্যাকিংয়ের মাধ্যমে, আমরা বর্তমান বাজারের অবস্থার সাথে আরও ভালভাবে খাপ খাইয়ে নেওয়ার জন্য ডায়নামিকভাবে ZLEMA এর পিরিয়ড প্যারামিটার সেট করি।

যখন দ্রুত EMA (ZLEMA) নীচে থেকে ধীর EMA অতিক্রম করে, তখন একটি দীর্ঘ সংকেত উৎপন্ন হয়। যখন দ্রুত EMA ধীর EMA এর নীচে অতিক্রম করে, তখন একটি সংক্ষিপ্ত সংকেত ট্রিগার হয়। এটি চলমান গড় ক্রসওভার সিস্টেমের অনুরূপ একটি ট্রেডিং কৌশল গঠন করে।

সুবিধা

অ্যাডাপ্টিভ জিরো লেগ ইএমএ কৌশলটি জিরো লেগ ফিল্টার এবং অ্যাডাপ্টিভ পিরিয়ড অপ্টিমাইজেশানকে নিম্নলিখিত সুবিধাগুলির সাথে একত্রিত করেঃ

  1. বিলম্ব দূর করে এবং আরও সংবেদনশীল সংকেত তৈরি করে
  2. একটি বিস্তৃত বাজারের জন্য অভিযোজিত সময়ের পরামিতি
  3. কম প্যারামিটার পরীক্ষা এবং অপ্টিমাইজেশান জন্য সহজ
  4. আরও ভাল ঝুঁকি নিয়ন্ত্রণের জন্য কনফিগারযোগ্য স্থির SL/TP

ঝুঁকি

এই কৌশলের কিছু ঝুঁকিও রয়েছেঃ

  1. নির্দিষ্ট বাজারের পরিবেশে অভিযোজনমূলক অপ্টিমাইজড সময় ব্যর্থ হতে পারে
  2. ভুল স্থির SL/TP সেটিংস অত্যধিক ক্ষতি বা মিসড মুনাফা হতে পারে
  3. অপর্যাপ্ত পরামিতি অপ্টিমাইজেশান পরীক্ষা খারাপ লাইভ কর্মক্ষমতা হতে পারে

এই ঝুঁকিগুলি নিয়ন্ত্রণের জন্য, আমাদের বিভিন্ন বাজারের অবস্থার উপর প্যারামিটারগুলি সম্পূর্ণরূপে পরীক্ষা করতে হবে, এসএল / টিপি যথাযথভাবে সামঞ্জস্য করতে হবে এবং ব্যাকটেস্টে লাইভ ট্রেডিং পরিবেশকে সিমুলেট করতে হবে।

অপ্টিমাইজেশান নির্দেশাবলী

এই কৌশলকে আরও উন্নত করার জন্য এখনও অনেক জায়গা আছে:

  1. বিকল্প অভিযোজিত সময়কালের পরিমাপ পদ্ধতি, উদাহরণস্বরূপ, অস্থিরতা সংশোধিত এমএ
  2. অতিরিক্ত ফিল্টার শর্ত যেমন ভলিউম, এমএ জোড়া ইত্যাদি
  3. উন্নত এসএল/টিপি কৌশল, যেমন ট্রেলিং স্টপ বা চ্যান্ডেলিয়ার এক্সট
  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)


আরো