
ডাবল মুভিং এভারেজ ট্রেন্ড ট্র্যাকিং কৌশল একটি স্টক মূল্যের ট্রেন্ড অনুসরণ করার জন্য একটি পরিমাণগত ট্রেডিং কৌশল। এই কৌশলটি দামের প্রবণতার দিক নির্ধারণের জন্য একটি ডাবল সূচকীয় মুভিং এভারেজ সিস্টেম ব্যবহার করে এবং এডিএক্স সূচকটির প্রবণতা নির্ধারণের শক্তির সাথে মিলিত হয়ে মধ্য এবং দীর্ঘ লাইনে দামের প্রবণতা ক্যাপচার করে।
এই কৌশলটি মূলত দামের প্রবণতার দিক নির্ধারণের জন্য দ্বি-সূচক চলমান গড় ব্যবস্থার উপর ভিত্তি করে। কৌশলটি দ্রুত এবং ধীরে ধীরে দুটি ভিন্ন প্যারামিটার ব্যবহার করে। দ্রুত লাইন EMA1 দামের পরিবর্তনের জন্য আরও দ্রুত প্রতিক্রিয়া জানায়, ধীর লাইন EMA2 দামের পরিবর্তনের জন্য আরও বিলম্বিত। যখন দ্রুত লাইনটি ধীর লাইনটি অতিক্রম করে তখন দাম বাড়ার সূচনা করে। যখন দ্রুত লাইনটি ধীর লাইনটি অতিক্রম করে তখন বিক্রয় সংকেত দেয়।
এছাড়াও, কৌশলটি ট্রেন্ডের শক্তি নির্ধারণের জন্য ADX সূচকটি প্রবর্তন করে। ADX প্রবণতার শক্তি নির্ধারণের জন্য মূল্যের ওঠানামা গণনা করে। যখন ADX মান বৃদ্ধি পায়, তখন প্রবণতা শক্তিশালী হয়; যখন ADX মান হ্রাস পায়, তখন প্রবণতা দুর্বল হয়। কৌশলটি ADX সূচকের মাধ্যমে ট্রেডিং ফিল্টার শর্তগুলি সেট করে, কেবলমাত্র প্রবণতা শক্তিশালী হলেই ট্রেডিং সংকেত দেয়।
বিশেষ করে, কৌশলটির ট্রেডিং সিগন্যাল জেনারেশনের নিয়মগুলি হলঃ
এটি ট্রেডিং সিস্টেমের স্থিতিশীলতা আরও বাড়ানোর জন্য দুর্বল প্রবণতার অকার্যকর সংকেতগুলিকে কার্যকরভাবে ফিল্টার করতে পারে।
এই কৌশলটির প্রধান সুবিধাগুলো হল:
মিডল ও লং লাইন মূল্যের প্রবণতা ধরা: দ্বৈত ইএমএ গড় সিস্টেমগুলি স্বল্পমেয়াদী বাজার শব্দ দ্বারা বিরক্ত হওয়া এড়াতে দামের মধ্য-দীর্ঘ প্রবণতা কার্যকরভাবে বিচার করতে পারে।
ফিল্টার ভুয়া ফাটল: ট্রেন্ডের তীব্রতা নির্ধারণের জন্য এডিএক্স সূচক ব্যবহার করুন, যাতে ট্রেন্ডের বিপর্যয়ের কাছাকাছি মিথ্যা ভাঙ্গন থেকে অপ্রয়োজনীয় ক্ষতি এড়ানো যায়।
প্যারামিটার অপ্টিমাইজেশান স্থান বড়: দ্রুত এবং ধীর লাইন প্যারামিটার সমন্বয়, ADX প্যারামিটার ইত্যাদির জন্য অপ্টিমাইজেশনের জায়গা রয়েছে, সমন্বয় প্যারামিটারগুলির মাধ্যমে আরও ভাল লেনদেনের প্রভাব অর্জন করা যায়।
অভিযোজনযোগ্য: এই কৌশলটি বেশিরভাগ স্টক এবং সময়কালের জন্য প্রযোজ্য এবং এটি বিভিন্ন বাজারে প্রমাণিত হয়েছে।
বাস্তবায়ন সহজএই কৌশলটি সহজ গড় পরিমাপের প্রয়োজন, কম সম্পদ ব্যবহার করে, সহজেই প্রোগ্রাম করা যায়, এবং বাস্তবে ব্যবহারের জন্য কম খরচ হয়।
এই কৌশলটির কিছু ঝুঁকিও রয়েছে, যার মধ্যে রয়েছেঃ
ট্রেন্ড রিভার্সাল ঝুঁকিকোন ট্রেন্ড কৌশলই সঠিকভাবে ট্রেন্ড রিভার্স পয়েন্ট নির্ধারণ করতে পারে না, এবং প্রকৃত ট্রেন্ড রিভার্স হওয়ার সময়, আপনি অবশ্যই বড় ক্ষতির সম্মুখীন হবেন।
প্যারামিটার অপ্টিমাইজেশন অতিরিক্ত ঝুঁকিপ্যারামিটার অপ্টিমাইজেশানকে চরম পর্যায়ে নিয়ে যাওয়ার ফলে কৌশলটি ঐতিহাসিক তথ্যের সাথে অতিরিক্তভাবে মিলিত হতে পারে, যা কৌশলটির স্থিতিশীলতা এবং বাস্তব যুদ্ধে কার্যকারিতা হ্রাস করে।
ঝুঁকিপূর্ণ ঘটনাবিপর্যয়ঃ বড় ধরনের ঘটনাগুলি মূল মূল্য প্রবণতা প্যাটার্নকে ভেঙে দেয়, যার ফলে মুভিং এভারেজ সূচকটি ব্যর্থ হয় এবং ক্ষতি নিয়ন্ত্রণের জন্য হস্তক্ষেপ বা স্টপ লস সেট করা প্রয়োজন।
এই ঝুঁকির জন্য, আমরা নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করতে পারিঃ
দামের পরিবর্তনের জন্য অতিরিক্ত সূচকগুলি প্রবর্তন করা। উদাহরণস্বরূপ, লেনদেনের পরিমাণ প্রবর্তন করা, যখন লেনদেনের পরিমাণ বৃদ্ধি পায় তখন লেনদেনের পরিমাণ বৃদ্ধি পায়।
ADX প্যারামিটারগুলি যথাযথভাবে শিথিল করা যাতে ট্রেন্ডের শুরুতে সুযোগগুলি নিশ্চিত করা যায়। এছাড়াও MACD এর মতো সহায়ক বিচারক সূচকগুলিও চালু করা যেতে পারে।
প্যারামিটার সমন্বয়ের জন্য একাধিক গ্রুপের প্রশিক্ষণ পরীক্ষা করুন, স্থিতিশীলতা এবং রিয়েল-টাইম কার্যকারিতা উভয়ই ভাল প্যারামিটার নির্বাচন করুন। একক প্যারামিটার সমন্বয়ের অপ্টিমাইজেশনের অত্যধিক ঝুঁকি এড়ানো উচিত।
এই কৌশলটির আরও কিছু দিক রয়েছে যা উন্নত করা যেতে পারেঃ
স্টপ লস মেকানিজম প্রবর্তন করুন: মোবাইল স্টপ বা শতাংশ স্টপ সেট করুন, প্রবণতা বিপরীত হওয়ার সময় সক্রিয়ভাবে স্টপ করতে পারেন, পজিশন হ্রাসের অত্যধিক ক্ষতি এড়াতে পারেন।
ট্রেডিং ভলিউম সূচক সহউদাহরণস্বরূপ, লেনদেনের পরিমাণ বৃদ্ধি পেলে মূল্যের বিপরীতমুখী অবস্থার ত্রুটিপূর্ণ সংকেত এড়ানো যায়।
প্যারামিটার স্বনির্ধারণ অপ্টিমাইজেশন: সূচকগুলির প্যারামিটারগুলিকে স্থির স্ট্যাটিক প্যারামিটারগুলির পরিবর্তে রিয়েল-টাইম মার্কেট পরিবর্তনের সাথে সামঞ্জস্যপূর্ণ করার অনুমতি দেওয়া, যা কৌশলগুলির স্থায়িত্বকে ব্যাপকভাবে উন্নত করতে পারে।
মেশিন লার্নিং: মেশিন লার্নিং অ্যালগরিদম ব্যবহার করে প্রচুর পরিমাণে ঐতিহাসিক তথ্য বিশ্লেষণ করা হয়, চলমান গড় এবং ADX এর প্যারামিটারগুলি নির্ধারণ করা হয়, এমনকি দামের ভবিষ্যতের গতিপথের পূর্বাভাস দেওয়া যায়। এটি চলমান গড় কৌশলগুলির বিবর্তনের একটি দিক।
ক্রস-চক্র অপ্টিমাইজেশান: বিভিন্ন ট্রেডিং চক্রের জন্য প্যারামিটার সেটিং ভিন্ন হতে পারে, যা প্রতিটি চক্রের জন্য প্যারামিটারগুলির সর্বোত্তম কনফিগারেশন পরীক্ষা করতে পারে।
ডাবল মুভিং এভারেজ ট্রেন্ড ট্র্যাকিং কৌশলটি সামগ্রিকভাবে একটি পরিপক্ক স্থিতিশীল কৌশলগত চিন্তাভাবনা। এই কৌশলটি ডাবল ইএমএ গড় ব্যবস্থার মাধ্যমে দামের মধ্য-লম্বা প্রবণতা ক্যাপচার করে এবং এডিএক্স সূচকগুলি সংকেতগুলি ফিল্টার করে, যা স্টক মূল্যের প্রবণতাকে কার্যকরভাবে ধরে রাখতে পারে এবং স্বল্পমেয়াদী বাজার শব্দ দ্বারা বিরক্ত হওয়া এড়াতে পারে। একই সাথে, এই কৌশলটির কিছু ঝুঁকি রয়েছে, যার জন্য প্যারামিটার সমন্বয় এবং স্টপ লস পদ্ধতির অপ্টিমাইজেশন প্রয়োজন, এমনকি কৌশলটির স্থিতিশীলতা বাড়ানোর জন্য আরও সহায়ক সূচক এবং মেশিন লার্নিং অ্যালগরিদম প্রবর্তন করা যেতে পারে। সামগ্রিকভাবে, ডাবল মুভিং এভারেজ ট্রেন্ড ট্র্যাকিং কৌশলটি ভাল ভারসাম্য রয়েছে এবং এটি একটি পরিমাণগত কৌশলগত চিন্তাভাবনা যা মধ্য-লম্বা বিনিয়োগকারীদের জন্য উপযুক্ত।
/*backtest
start: 2022-12-14 00:00:00
end: 2023-11-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Kitaec Strategy4", shorttitle = "Kitaec str4", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(14, defval=14, minval=1, maxval=1000, title="Smoothing")
len2 = input(14, defval=14, minval=1, maxval=1000, title="Smoothing2")
len3=input(550)
src = close
ema1=ema(src, len)
ema2=ema(ema1, len2)
d=ema1-ema2
zlema=ema1+d
ema21=ema(src, (len/3)*2)
ema22=ema(ema21, (len2/3)*2)
d2=ema21-ema22
zlema2=ema21+d2
ema31=ema(src, len3)
ema32=ema(ema21, len3)
d3=ema31-ema32
zlema3=ema31+d2
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//MAs
//ma1 = security(tickerid, "60", vwma(src, len)[1])
//ma2 = security(tickerid, "120", vwma(src, len)[1])
//plot(ma1, linewidth = 2, color = blue, title = "MA")
//plot(ma2, linewidth = 2, color = red, title = "MA2")
// ADX
lenadx = 14
lensig = 14
limadx = 18
up = change(high)
down = -change(low)
trur = rma(tr, lenadx)
plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, lenadx) / trur)
minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, lenadx) / trur)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)
adx2 = ema(adx, 14)
adx2i = ema(adx2,14)
dadx2 = adx2 - adx2i
zladx2 = adx2 + dadx2
plus2 = ema(plus, 14)
plus2i = ema (plus2, 14)
dplus2 = plus2 - plus2i
zlplus2 = plus2 + dplus2
minus2 = ema(minus, 14)
minus2i = ema (minus2, 14)
dminus2 = minus2 - minus2i
zlminus2 = minus2 + dminus2
vwma = vwma(close, 150)
vwma2 = ema(vwma, 9)
vwma2i = ema(vwma2, 9)
dvwma2 = vwma2 - vwma2i
zlvwma2 = vwma2 + dvwma2
rmax=rma(src, len)
rmax2=rma(rmax, len2)
rmd=rmax-rmax2
zlrmax=rmax+rmd
rmaxz=rma(src, (len/3)*2)
rmaxz2=rma(rmaxz, (len2/3)*2)
rmzd=rmaxz-rmaxz2
zlrmaxz=rmaxz+rmzd
rmaxcol2=zlrmaxz[1] > zlema2[1] ? red:lime
rmaxcol= zlrmax[1] > zlema[1] ? red:lime
rmazlema3=rma(zlema3, 100)
plot(rmazlema3, color=gray, linewidth=2)
plot(zlema, color=green)
plot(zlema2, color=yellow)
plot(zlema3, color=teal, linewidth=2)
plot(ema2, color=na)
plot(rmax, color=rmaxcol2, linewidth=3)
plot(zlrmax, color=rmaxcol, linewidth=3)
//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if zlrmax[1] < zlema[1]
strategy.entry("Buy", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if zlrmax[1] > zlema[1]
strategy.entry("Sell", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))