Ehlers MESA অভিযোজিত চলমান গড় ট্রেডিং কৌশল

লেখক:চাওঝাং, তারিখ: ২০২৩-০৯-২৮ ১৫ঃ৩৭ঃ১৩
ট্যাগঃ

সারসংক্ষেপ

এই কৌশলটি এহেলার্স এমইএসএ অ্যাডাপ্টিভ মুভিং এভারেজের উপর ভিত্তি করে এবং একটি ট্রেন্ড ট্রেডিং কৌশল ডিজাইন করেছে যা দুটি চলমান গড়ের মধ্যে ক্রসওভারগুলি ট্র্যাক করে। যখন দ্রুত লাইনটি ধীর লাইনের উপরে অতিক্রম করে তখন এটি দীর্ঘ হয় এবং যখন দ্রুত লাইনটি ধীর লাইনের নীচে অতিক্রম করে তখন এটি সংক্ষিপ্ত হয়। এটি একটি সাধারণ দ্বৈত চলমান গড় ক্রসওভার কৌশল।

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

এই কৌশলটির মূল বিষয় হল দুটি অভিযোজনশীল চলমান গড় গণনা করাঃ এমএএমএ লাইন এবং এফএএমএ লাইন। এমএএমএ লাইনটি গণনা করা হয়ঃ

alpha = fl / dphase
alpha = iff(alpha < sl, sl, iff(alpha > fl, fl, alpha))  
mama = alpha*src + (1 - alpha)*nz(mama[1])

যেখানে fl হল দ্রুত সীমা, sl হল ধীর সীমা, এবং dphase হল ফেজ পার্থক্য। আলফা অভিযোজিত মসৃণতা অর্জনের জন্য ফেজ পার্থক্যের উপর ভিত্তি করে অভিযোজিতভাবে সামঞ্জস্য করে।

FAMA রেখা গণনা করা হয়ঃ

fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1])

FAMA লাইনটি MAMA লাইনের একটি নিম্ন পাস ফিল্টারযুক্ত মসৃণকরণ।

কৌশলটি MAMA এবং FAMA লাইনের মধ্যে পরিমাণ সম্পর্ক তুলনা করে নির্ধারণ করে যে বাজারটি বর্তমানে একটি আপট্রেন্ড বা ডাউনট্রেন্ডে রয়েছে এবং এর উপর ভিত্তি করে ট্রেডিং সংকেত তৈরি করে।

সুবিধা বিশ্লেষণ

এই কৌশলটির নিম্নলিখিত সুবিধা রয়েছে:

  1. স্বনির্ধারিত মুভিং মিডিয়ার ব্যবহার করে যেখানে ম্যানুয়ালি সেট করা নির্দিষ্ট প্যারামিটারগুলির প্রয়োজন ছাড়াই বাজারের পরিবর্তনের উপর ভিত্তি করে পরামিতিগুলি স্বয়ংক্রিয়ভাবে সামঞ্জস্য করে।

  2. নিম্ন পাস ফিল্টার FAMA লাইন মিথ্যা breakouts ফিল্টার করতে পারেন।

  3. একটি দ্বৈত চলমান গড় নকশা ব্যবহার করে মাঝারি থেকে দীর্ঘমেয়াদী প্রবণতা ট্র্যাক করতে পারেন।

  4. সহজ এবং স্পষ্ট কৌশল যুক্তি যা সহজেই বোঝা যায় এবং সংশোধন করা যায়।

  5. ভিজ্যুয়াল ইন্ডিকেটর যা স্পষ্টভাবে ট্রেডিং সিগন্যাল দেখায়।

ঝুঁকি বিশ্লেষণ

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

  1. ডাবল লাইন ক্রসওভার কৌশলগুলি অত্যধিক ট্রেডিং সংকেত তৈরি করতে পারে, যথাযথ ড্রাউনডাউন এবং ব্যবধান নিয়ন্ত্রণের পরামর্শ দেওয়া হয়।

  2. জটিল MAMA এবং FAMA গণনা, অনুপযুক্ত পরামিতি সেটিংগুলি বক্ররেখা বিকৃতির কারণ হতে পারে।

  3. অনুকূলিতকরণ পরামিতিগুলি অতিরিক্ত ফিটিংয়ের দিকে পরিচালিত করতে পারে, অন্যান্য প্রযুক্তিগত সূচকগুলির সাথে যাচাইকরণ প্রয়োজন।

  4. ডাবল লাইন ক্রসওভারে সময় বিলম্ব আছে, ট্রেন্ড টার্নিং পয়েন্ট মিস করতে পারে।

  5. মিথ্যা ব্রেকআউট থেকে স্টপ লস ঝুঁকি সম্পর্কে সতর্ক থাকতে হবে।

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

কৌশলটি নিম্নলিখিত ক্ষেত্রে অপ্টিমাইজ করা যেতে পারেঃ

  1. সর্বোত্তম দ্রুত সীমা এবং ধীর সীমা সমন্বয় খুঁজে পেতে প্যারামিটার সেটিংস অপ্টিমাইজ করুন।

  2. ট্রেডিং স্টপ লস নিয়ন্ত্রণে স্টপ লস কৌশল যুক্ত করুন।

  3. মিথ্যা ব্রেকআউট এড়ানোর জন্য সিগন্যাল ফিল্টার করার জন্য অন্যান্য সূচক যোগ করুন, যেমন MACD, RSI ইত্যাদি।

  4. প্রতি-প্রবণতা ট্রেড এড়ানোর জন্য প্রবণতা মূল্যায়নকারী সূচক যোগ করুন।

  5. অত্যধিক ঘন ঘন ট্রেডিং হ্রাস করার জন্য ক্রসওভার প্রয়োজনীয়তা সামঞ্জস্য করে প্রবেশের গতি অনুকূল করা।

  6. প্রবণতা শক্তি অনুযায়ী মুনাফা গ্রহণ কৌশল অপ্টিমাইজ করুন।

  7. সর্বোত্তম প্যারামিটার সমন্বয় খুঁজে পেতে বিভিন্ন পণ্যের মধ্যে পরামিতি পার্থক্য পরীক্ষা করুন।

সংক্ষিপ্তসার

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


/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-27 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// @author LazyBear 
// 
// List of my public indicators: http://bit.ly/1LQaPK8 
// List of my app-store indicators: http://blog.tradingview.com/?p=970 
//
strategy("Ehlers MESA Adaptive Moving Average [LazyBear with ekoronin fix]", shorttitle="EMAMA_LB (ekoronin fix)", overlay=false, calc_on_every_tick=true, precision=0)
src=input(close, title="Source")
fl=input(.4, title="Fast Limit")
sl=input(.04, title="Slow Limit")
pi = 3.1415926
sp = (4*src + 3*src[1] + 2*src[2] + src[3]) / 10.0
dt = (.0962*sp + .5769*nz(sp[2]) - .5769*nz(sp[4])- .0962*nz(sp[6]))*(.075*nz(p[1]) + .54)
q1 = (.0962*dt + .5769*nz(dt[2]) - .5769*nz(dt[4])- .0962*nz(dt[6]))*(.075*nz(p[1]) + .54)
i1 = nz(dt[3])
jI = (.0962*i1 + .5769*nz(i1[2]) - .5769*nz(i1[4])- .0962*nz(i1[6]))*(.075*nz(p[1]) + .54)
jq = (.0962*q1 + .5769*nz(q1[2]) - .5769*nz(q1[4])- .0962*nz(q1[6]))*(.075*nz(p[1]) + .54)
i2_ = i1 - jq
q2_ = q1 + jI
i2 = .2*i2_ + .8*nz(i2[1])
q2 = .2*q2_ + .8*nz(q2[1])
re_ = i2*nz(i2[1]) + q2*nz(q2[1])
im_ = i2*nz(q2[1]) - q2*nz(i2[1])
re = .2*re_ + .8*nz(re[1])
im = .2*im_ + .8*nz(im[1])
//p1 = iff(im!=0 and re!=0, 360/atan(im/re), nz(p[1]))
p1 = iff(im!=0 and re!=0, 2*pi/atan(im/re), nz(p[1]))
p2 = iff(p1 > 1.5*nz(p1[1]), 1.5*nz(p1[1]), iff(p1 < 0.67*nz(p1[1]), 0.67*nz(p1[1]), p1))
p3 = iff(p2<6, 6, iff (p2 > 50, 50, p2))
p = .2*p3 + .8*nz(p3[1])
spp = .33*p + .67*nz(spp[1])
//phase = atan(q1 / i1)
phase = 180/pi * atan(q1 / i1) 
dphase_ = nz(phase[1]) - phase
dphase = iff(dphase_< 1, 1, dphase_)
alpha_ = fl / dphase
alpha = iff(alpha_ < sl, sl, iff(alpha_ > fl, fl, alpha_))
mama = alpha*src + (1 - alpha)*nz(mama[1])
fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1])
//pa=input(false, title="Mark crossover points")
//plotarrow(pa?(cross(mama, fama)?mama<fama?-1:1:na):na, title="Crossover Markers")
//fr=input(false, title="Fill MAMA/FAMA Region")
//duml=plot(fr?(mama>fama?mama:fama):na, style=circles, color=gray, linewidth=0, title="DummyL")
//mamal=plot(mama, title="MAMA", color=red, linewidth=2)
//famal=plot(fama, title="FAMA", color=green, linewidth=2)
//fill(duml, mamal, red, transp=70, title="NegativeFill")
//fill(duml, famal, green, transp=70, title="PositiveFill")
//ebc=input(false, title="Enable Bar colors")
//bc=mama>fama?lime:red
//barcolor(ebc?bc:na)

longSpike=mama>fama? 1:0
shortSpike=mama<fama? 1:0

plot(longSpike, title = "Mama Long", style=line, linewidth=1, color=yellow)
plot(shortSpike, title = "Mama Short", style=line, linewidth=1, color=red)

//possig = iff(reverse and pos == 1, -1,
//          iff(reverse and pos == -1, 1, pos))	   
if (longSpike) 
    strategy.entry("Long", strategy.long)
if (shortSpike)
    strategy.entry("Short", strategy.short)	


আরো