ডুয়াল মুভিং এভারেজ ট্রেন্ড ট্র্যাকিং কৌশল একটি পরিমাণগত ট্রেডিং কৌশল যা স্টক মূল্যের প্রবণতা ট্র্যাক করে। এই কৌশলটি মূল্যের প্রবণতার দিক নির্ধারণের জন্য একটি দ্বৈত এক্সপোনেনশিয়াল মুভিং এভারেজ সিস্টেম ব্যবহার করে এবং ADX সূচককে সমন্বয় করে প্রবণতার শক্তি বিচার করে, মাঝারি থেকে দীর্ঘমেয়াদে মূল্যের প্রবণতা ক্যাপচার করে।
এই কৌশলটি মূলত দামের প্রবণতার দিক নির্ধারণের জন্য দ্বৈত এক্সপোনেনশিয়াল চলমান গড় ব্যবস্থার উপর ভিত্তি করে। কৌশলটি বিভিন্ন পরামিতি সহ দ্রুত এবং ধীর দুটি ইএমএ ব্যবহার করে, দ্রুত ইএমএ 1 দামের পরিবর্তনে আরও দ্রুত প্রতিক্রিয়া জানায় এবং ধীর ইএমএ 2 দামের পরিবর্তনে আরও ধীর প্রতিক্রিয়া জানায়। যখন দ্রুত লাইনটি ধীর লাইনের উপরে অতিক্রম করে, এটি একটি ক্রয় সংকেত যা মূল্য বাড়তে শুরু করেছে; যখন দ্রুত লাইনটি ধীর লাইনের নীচে অতিক্রম করে, এটি একটি বিক্রয় সংকেত যা মূল্য হ্রাস শুরু করেছে।
এডিএক্স ট্রেন্ডের শক্তি নির্ধারণের জন্য ADX সূচকও প্রবর্তন করে। ADX প্রবণতার শক্তি নির্ধারণের জন্য মূল্যের ওঠানামা গণনা করে। যখন ADX বৃদ্ধি পায়, এর অর্থ হল প্রবণতা শক্তিশালী হচ্ছে; যখন ADX কমে যায়, এর অর্থ হল প্রবণতা দুর্বল হচ্ছে। কৌশলটি ADX সূচকের মাধ্যমে ট্রেডিং ফিল্টার শর্তগুলি সেট করে, যখন প্রবণতা শক্তি তুলনামূলকভাবে শক্তিশালী হয় তখনই ট্রেডিং সংকেত জারি করে।
বিশেষ করে, কৌশলটির সংকেত উত্পাদন নিয়মগুলি হলঃ
এটি কার্যকরভাবে দুর্বল প্রবণতা শক্তি সহ অবৈধ সংকেতগুলি ফিল্টার করতে পারে, ট্রেডিং সিস্টেমের স্থিতিশীলতা আরও উন্নত করে।
এই কৌশল নিম্নলিখিত প্রধান সুবিধা আছেঃ
মাঝারি থেকে দীর্ঘমেয়াদী মূল্যের প্রবণতা ধরা: দ্বৈত EMA সিস্টেম কার্যকরভাবে মাঝারি থেকে দীর্ঘমেয়াদী মূল্যের প্রবণতা নির্ধারণ করতে পারে এবং স্বল্পমেয়াদী বাজারের গোলমাল থেকে হস্তক্ষেপ এড়াতে পারে।
মিথ্যা ব্রেকআউট ফিল্টার করে: ADX সূচকের মাধ্যমে প্রবণতা শক্তি বিচার করে, এটি প্রবণতা পাল্টা পয়েন্টের আশেপাশে মিথ্যা ব্রেকআউটের কারণে অপ্রয়োজনীয় ক্ষতি এড়ায়।
বড় প্যারামিটার অপ্টিমাইজেশান স্পেস: দ্রুত এবং ধীর লাইন পরামিতি, ADX পরামিতি এবং আরও অনেক কিছুতে অপ্টিমাইজেশনের সুযোগ রয়েছে যা পরামিতি সংমিশ্রণের মাধ্যমে আরও ভাল ট্রেডিং ফলাফল দিতে পারে।
উচ্চ অভিযোজনযোগ্যতা: এই কৌশলটি বেশিরভাগ স্টক এবং সময়সীমার জন্য উপযুক্ত এবং বিভিন্ন বাজারে এটি যাচাই করা হয়েছে।
বাস্তবায়ন করা সহজ: এই কৌশলটির জন্য কেবল সরল চলমান গড়ের সূচক প্রয়োজন, এটি কম সংস্থান ব্যবহার করে, প্রোগ্রাম করা সহজ এবং এর ব্যবহারিক প্রয়োগের খরচ কম।
এই কৌশলটির কিছু ঝুঁকিও রয়েছে, যা প্রধানত নিম্নলিখিত ক্ষেত্রে কেন্দ্রীভূতঃ
প্রবণতা বিপরীত হওয়ার ঝুঁকি: কোন প্রবণতা কৌশল প্রবণতা বিপরীত পয়েন্ট নিখুঁতভাবে নির্ধারণ করতে পারে না, এবং বাস্তব প্রবণতা আসলে বিপরীত যখন বৃহত্তর ক্ষতি ভোগ করতে বাধ্য হয়।
অপ্টিমাইজেশনের ঝুঁকি বেশি: পরামিতিগুলিকে চূড়ান্তভাবে অপ্টিমাইজ করাও কৌশলটিকে ঐতিহাসিক তথ্যের সাথে অতিরিক্ত ফিট করে তুলতে পারে, যা কৌশলটির স্থিতিশীলতা এবং ব্যবহারিক প্রভাব হ্রাস করবে।
ব্ল্যাক সোয়ান ইভেন্টের ঝুঁকি: বড় অপ্রত্যাশিত ঘটনা মূল মূল্য প্রবণতা মডেল ভেঙে যাবে, যার ফলে চলমান গড় সূচক ব্যর্থ হবে, যা হ্রাস নিয়ন্ত্রণের জন্য ম্যানুয়াল হস্তক্ষেপ বা স্টপ লস সেটিং প্রয়োজন।
উপরের ঝুঁকিগুলি মোকাবেলা করার জন্য, আমরা নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করতে পারিঃ
দামের টার্নিং পয়েন্টগুলি নির্ধারণের জন্য অতিরিক্ত সূচকগুলি প্রবর্তন করুন। উদাহরণস্বরূপ, ট্রেডিং ভলিউম প্রবর্তন করুন, যা মূল্যের টার্নিং পয়েন্টগুলি প্রদর্শিত হলে প্রসারিত হবে।
প্রবণতার প্রাথমিক পর্যায়ে সুযোগগুলি ক্যাপচার করা যায় তা নিশ্চিত করার জন্য ADX পরামিতিগুলি যথাযথভাবে শিথিল করুন। MACD এবং অন্যান্য সহায়ক বিচার সূচকগুলিও চালু করা যেতে পারে।
প্যারামিটার সংমিশ্রণের জন্য মাল্টি-গ্রুপ প্রশিক্ষণ এবং পরীক্ষা পরিচালনা করুন এবং ভাল স্থিতিশীলতা এবং ব্যবহারিক প্রভাব সহ সংমিশ্রণগুলি নির্বাচন করুন। এটি একক প্যারামিটার গোষ্ঠীর অতিরিক্ত অপ্টিমাইজেশনের ঝুঁকি এড়ায়।
এই কৌশলটি আরও কিছু দিক দিয়ে অপ্টিমাইজ করা যেতে পারে:
স্টপ লস মেকানিজম চালু করুন: মুভিং স্টপ লস বা শতাংশ স্টপ লস সেট করুন, যা প্রবণতা বিপরীত হলে অত্যধিক ক্ষতি এড়াতে সক্রিয়ভাবে ক্ষতি বন্ধ করতে পারে।
ট্রেডিং ভলিউম সূচক একত্রিত করা: উদাহরণস্বরূপ, ট্রেডিং ভলিউম, যা মূল্যের পাল্টা পয়েন্টগুলিতে ট্রেডিং ভলিউম প্রসারিত হলে ভুল সংকেত এড়াতে পারে।
প্যারামিটার স্ব-অ্যাডাপ্টিভ অপ্টিমাইজেশন: স্থির স্ট্যাটিক পরামিতিগুলির পরিবর্তে ইন্ডিকেটর প্যারামিটারগুলিকে রিয়েল-টাইম বাজারের পরিবর্তনের সাথে সামঞ্জস্যপূর্ণভাবে সামঞ্জস্য করার অনুমতি দেয়, যা কৌশলগুলির স্থিতিশীলতাকে ব্যাপকভাবে উন্নত করতে পারে।
মেশিন লার্নিং চালু করুন: চলমান গড় এবং এডিএক্সের পরামিতিগুলি নির্ধারণ করতে এবং এমনকি ভবিষ্যতের মূল্য চলাচলের পূর্বাভাস দেওয়ার জন্য প্রচুর পরিমাণে historicalতিহাসিক ডেটা বিশ্লেষণ করতে মেশিন লার্নিং অ্যালগরিদম ব্যবহার করুন। এটি চলমান গড় কৌশলগুলির বিবর্তনের জন্য একটি দিক।
ক্রস-সাইকেল অপ্টিমাইজেশন: বিভিন্ন ট্রেডিং চক্রের পরামিতিগুলি ভিন্নভাবে সেট করা যেতে পারে এবং প্রতিটি চক্রের অধীনে সর্বোত্তম কনফিগারেশন পরীক্ষা করা যেতে পারে।
সাধারণভাবে, ডুয়াল মুভিং এভারেজ ট্রেন্ড ট্র্যাকিং কৌশলটি একটি পরিপক্ক এবং স্থিতিশীল কৌশল ধারণা। এই কৌশলটি দ্বৈত ইএমএ সিস্টেমের মাধ্যমে মাঝারি থেকে দীর্ঘমেয়াদী মূল্য প্রবণতা ক্যাপচার করে এবং সিগন্যালগুলি ফিল্টার করার জন্য এডিএক্স সূচক রয়েছে, যা কার্যকরভাবে স্টক মূল্যের প্রবণতা ক্যাপচার করতে পারে এবং স্বল্পমেয়াদী বাজারের গোলমাল থেকে হস্তক্ষেপ এড়াতে পারে। একই সাথে, এই কৌশলটির কিছু ঝুঁকিও রয়েছে, যা পরামিতি সংমিশ্রণ এবং স্টপ লস পদ্ধতিগুলির অনুকূলকরণের প্রয়োজন, এবং এমনকি কৌশল স্থিতিশীলতা বাড়ানোর জন্য আরও সহায়ক সূচক এবং মেশিন লার্নিং অ্যালগরিদম প্রবর্তন করতে পারে। সংক্ষেপে, ডুয়াল মুভিং এভারেজ ট্রেন্ড ট্র্যাকিং কৌশলটি ভাল ভারসাম্য রয়েছে এবং মধ্যম থেকে দীর্ঘমেয়াদী বিনিয়োগকারীদের জন্য উপযুক্ত একটি পরিমাণগত কৌশল ধারণা।
/*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)))