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


সৃষ্টির তারিখ: 2024-02-19 15:38:02 অবশেষে সংশোধন করুন: 2024-02-19 15:38:02
অনুলিপি: 0 ক্লিকের সংখ্যা: 841
1
ফোকাস
1617
অনুসারী

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

ওভারভিউ

Adaptive Zero Lag Exponential Moving Average Quantitative Trading Strategy হল একটি পরিমাণগত ট্রেডিং কৌশল যা এহলার্স এর Zero Lag Exponential Moving Average চিন্তার উপর ভিত্তি করে তৈরি করা হয়েছে। এই কৌশলটি সূচকীয় চলমান গড়কে বেসলাইন সূচক হিসাবে ব্যবহার করে এবং তাত্ক্ষণিক ফ্রিকোয়েন্সি পরিমাপের একটি অভিযোজিত পদ্ধতি যুক্ত করে যা গতিশীলভাবে সূচকীয় চলমান গড়ের সময়কালের প্যারামিটারগুলিকে অনুকূলিত করে।

কৌশল নীতি

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

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

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

কৌশলগত সুবিধা

স্বনির্ধারিত শূন্য-বিরতিযুক্ত ইএমএ কৌশলটি একটি শূন্য-বিরতিযুক্ত ফিল্টার এবং স্বনির্ধারিত চক্রের অপ্টিমাইজেশনের পদ্ধতির সমন্বয় করে, যার নিম্নলিখিত সুবিধাগুলি রয়েছেঃ

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

কৌশলগত ঝুঁকি

শূন্য পিছিয়ে পড়া ইএমএ কৌশলগুলিও কিছু ঝুঁকি নিয়ে আসে, যেমনঃ

  1. নির্দিষ্ট বাজারের পরিস্থিতিতে, স্বনির্ধারিত চক্রের প্যারামিটারগুলি ব্যর্থ হতে পারে
  2. ফিক্সড স্টপ লস টার্মিনালের ভুল সেটআপের ফলে অতিরিক্ত ক্ষতি বা লাভের সম্ভাবনা থাকে
  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)