ডুয়াল এক্সপোনেনশিয়াল মুভিং এভারেজ ট্রেন্ড অনুসরণকারী কৌশল হ'ল এক্সপোনেনশিয়াল মুভিং এভারেজ (ইএমএ) ক্রসওভারের উপর ভিত্তি করে একটি প্রবণতা অনুসরণকারী কৌশল। এটি দ্রুত ইএমএ লাইন এবং ধীর ইএমএ লাইন গণনা করে বর্তমান প্রবণতার দিক বিচার করে এবং তাদের ক্রসওভারে কাজ করে। যখন দ্রুত ইএমএ লাইন ধীর ইএমএ লাইনের উপরে অতিক্রম করে, এটি একটি উত্থান সংকেত হিসাবে নির্ধারিত হয়। যখন দ্রুত ইএমএ লাইন ধীর ইএমএ লাইনের নীচে অতিক্রম করে, এটি একটি হ্রাস সংকেত হিসাবে নির্ধারিত হয়। চিহ্নিত প্রবণতার দিকের উপর ভিত্তি করে, এই কৌশলটি যথাযথভাবে দীর্ঘ বা ছোট যেতে পারে।
এই কৌশলটির মূল যুক্তি হ'ল বিভিন্ন সময়ের দুটি ইএমএ লাইন গণনা করা - একটি হ্রাসকারী লাইন হিসাবে কাজ করে এবং অন্যটি বুলিশ লাইন হিসাবে কাজ করে। বিশেষত, কৌশলটি বুলিশ লাইন হিসাবে তালিব সূচক ব্যবহার করে একটি 8-অবধি দ্রুত ইএমএ লাইন গণনা করে। এবং এটি হ্রাসকারী লাইন হিসাবে একটি 21-অবধি ধীর ইএমএ লাইন গণনা করে। তারপরে এটি দ্রুত ইএমএ লাইন এবং ধীর ইএমএ লাইনের মধ্যে ক্রসওভার সম্পর্কগুলি বিচার করে। যখন দ্রুত লাইনটি ধীর লাইনের উপরে অতিক্রম করে, এটি দীর্ঘ যেতে একটি বুলিশ সংকেত নির্ধারণ করে। যখন দ্রুত লাইনটি ধীর লাইনের নীচে অতিক্রম করে, এটি একটি হ্রাসকারী সংকেত নির্ধারণ করে।
প্রকৃত ট্রেড এক্সিকিউশনের ক্ষেত্রে, এই কৌশলটি শুধুমাত্র দীর্ঘ যেতে পারে, শুধুমাত্র সংক্ষিপ্ত যেতে পারে, বা উভয় দিক যেতে পারে যখন দ্রুত এবং ধীর রেখাগুলির মধ্যে ক্রসওভার ঘটে। এছাড়াও, স্টপ লস এবং লাভের দামগুলি কৌশলটিতে কনফিগার করা হয়। পজিশন খোলার পরে, যদি দামটি অনুপযুক্ত দিকে যায় তবে স্টপ লসটি প্রস্থান পজিশনে ট্রিগার হবে। যদি দাম প্রত্যাশিত লক্ষ্যমাত্রায় পৌঁছে যায় তবে লাভ অর্জন এবং অবস্থান বন্ধ হবে।
ডুয়াল ইএমএ ট্রেন্ড ফলোিং কৌশলটির সবচেয়ে বড় সুবিধা হ'ল চলমান গড় ক্রসওভারের শক্তিশালী ট্রেন্ড সনাক্তকরণ ক্ষমতা। ট্রেন্ড বিশ্লেষণের জন্য একটি সাধারণ সরঞ্জাম হিসাবে, ইএমএ লাইনগুলি ক্রসওভারের মাধ্যমে ট্রেন্ড শিফট এবং টার্নিং পয়েন্টগুলি সনাক্ত করতে পারে, স্বল্পমেয়াদে বাজারের গোলমাল দ্বারা বিভ্রান্ত হওয়া এড়াতে এবং মূল প্রবণতার দিক ধরতে পারে।
এছাড়াও, ট্রেডিং দিকের নমনীয় সেটিংস কৌশলটিকে একমুখী প্রবণতা এবং দ্বিপাক্ষিক দোলন উভয় ক্ষেত্রেই অভিযোজিত করে তোলে, এইভাবে কৌশলটির প্রয়োগযোগ্যতা বাড়ায়। কনফিগার করা স্টপ লস এবং লাভ গ্রহণ ঝুঁকি নিয়ন্ত্রণ করে এবং আংশিক লাভে লক করে।
এই কৌশলটির সবচেয়ে বড় ঝুঁকি হ'ল পরিসীমা-সীমাবদ্ধ বাজারের অধীনে ঘন ঘন ছোট ক্রসওভারের কারণে মিথ্যা সংকেতগুলি। এটি অত্যধিক অবস্থান খোলার এবং ক্ষতির দিকে পরিচালিত করবে। এটি মোকাবেলা করার জন্য, আমরা ক্রসওভার সময় এবং মিথ্যা সংকেতের সম্ভাবনা হ্রাস করার জন্য EMA সময়কাল বাড়িয়ে তুলতে পারি।
অন্যদিকে, খুব সংকীর্ণ স্টপ লস সেটিং করা বন্ধ হওয়ার সম্ভাবনাও বাড়িয়ে তোলে। এই ক্ষেত্রে, আমাদের স্টপ লসের পরিসীমা প্রসারিত করতে হবে সাবধানে ফাঁদে পড়ার ঝুঁকি ভারসাম্য বজায় রেখে।
এই কৌশল নিম্নলিখিত দিকগুলির মধ্যে আরও অপ্টিমাইজ করা যেতে পারেঃ
বাজারের অস্থিরতা এবং ব্যাকটেস্টের ফলাফলের উপর ভিত্তি করে ইএমএ সময়কালের অভিযোজিত সমন্বয়, নির্দিষ্ট সময়ের মধ্যে অতিরিক্ত ফিটিং এড়ানো।
মিথ্যা সংকেতগুলি ফিল্টার করার জন্য ফিল্টার শর্ত যুক্ত করা, উদাহরণস্বরূপ, অপ্রয়োজনীয় ক্রসওভারগুলি ফিল্টার করার জন্য ট্রেডিং ভলিউমের সাথে একত্রিত করা; বা অনিশ্চয়তার সংকেতগুলি এড়ানোর জন্য MACD এবং KDJ এর মতো অন্যান্য সূচকগুলি একত্রিত করা।
স্টপ লস এবং লাভ নেওয়ার কৌশলগুলি অপ্টিমাইজ করা, উদাহরণস্বরূপ এসএল/টিপি-তে গতিশীল ট্রেইলিং অর্জনের জন্য এটিআর একত্রিত করা, অত্যধিক সংকীর্ণ এসএল এবং অকাল টিপি প্রতিরোধ করা।
বিভিন্ন হোল্ডিং সময় পরীক্ষা করা। খুব দীর্ঘ হোল্ডিং সময়গুলি ঘটনাগুলির দ্বারা প্রভাবিত হতে পারে, যখন খুব কম সময়গুলি উচ্চ ট্রেডিং ব্যয় এবং স্লিপিংয়ের ব্যয় নিয়ে আসে। সর্বোত্তম হোল্ডিং দিনগুলি খুঁজে পাওয়া কৌশল লাভজনকতা উন্নত করতে পারে।
সাধারণভাবে, ডুয়াল ইএমএ ট্রেন্ড অনুসরণ কৌশল একটি শক্তিশালী এবং ব্যবহারিক ট্রেন্ড ট্রেডিং সিস্টেম। এটি ইএমএ ক্রসওভার সিস্টেমের মাধ্যমে প্রবণতা দিকগুলি কার্যকরভাবে ধরতে পারে। এদিকে, বাণিজ্য দিকগুলির নমনীয় সেটিংস এটিকে অভিযোজিত করে তোলে; কনফিগার করা স্টপ লস এবং লাভ নিয়ন্ত্রণ ঝুঁকি। আরও অপ্টিমাইজেশন এবং বর্ধনের সাথে, এই কৌশলটি পরিমাণগত ট্রেডিংয়ের জন্য একটি শক্তিশালী সরঞ্জাম হয়ে উঠতে পারে।
/*backtest start: 2024-01-02 00:00:00 end: 2024-02-01 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © TradersPostInc //@version=5 strategy('TradersPost Example MOMO Strategy', overlay=true, default_qty_value=100, initial_capital=100000, default_qty_type=strategy.percent_of_equity, pyramiding=0) startTime = input(defval = timestamp('01 Jan 2021 00:00 +0000'), title = 'Start Time', group = 'Date Range') endTime = input(defval = timestamp('31 Dec 2023 23:59 +0000'), title = 'End Time', group = 'Date Range') timeCondition = true timeConditionEnd = timeCondition[1] and not timeCondition fastEmaLength = input.int(defval = 8, title = 'Fast EMA Length') slowEmaLength = input.int(defval = 21, title = 'Slow EMA Length') sides = input.string(defval = 'Both', title = 'Sides', options = ['Long', 'Short', 'Both', 'None']) fastEma = ta.ema(close, fastEmaLength) slowEma = ta.ema(close, slowEmaLength) isUptrend = fastEma >= slowEma isDowntrend = fastEma <= slowEma trendChanging = ta.cross(fastEma, slowEma) ema105 = request.security(syminfo.tickerid, '30', ta.ema(close, 105)[1], barmerge.gaps_off, barmerge.lookahead_on) ema205 = request.security(syminfo.tickerid, '30', ta.ema(close, 20)[1], barmerge.gaps_off, barmerge.lookahead_on) plot(ema105, linewidth=4, color=color.new(color.purple, 0), editable=true) plot(ema205, linewidth=2, color=color.new(color.purple, 0), editable=true) aa = plot(fastEma, linewidth=3, color=color.new(color.green, 0), editable=true) bb = plot(slowEma, linewidth=3, color=color.new(color.red, 0), editable=true) fill(aa, bb, color=isUptrend ? color.green : color.red, transp=90) tradersPostBuy = trendChanging and isUptrend and timeCondition tradersPostSell = trendChanging and isDowntrend and timeCondition pips = syminfo.pointvalue / syminfo.mintick percentOrPipsInput = input.string('Percent', title='Percent or Pips', options=['Percent', 'Pips']) stopLossLongInput = input.float(defval=0, step=0.01, title='Stop Loss Long', minval=0) stopLossShortInput = input.float(defval=0, step=0.01, title='Stop Loss Short', minval=0) takeProfitLongInput = input.float(defval=0, step=0.01, title='Target Profit Long', minval=0) takeProfitShortInput = input.float(defval=0, step=0.01, title='Target Profit Short', minval=0) stopLossPriceLong = ta.valuewhen(tradersPostBuy, close, 0) * (stopLossLongInput / 100) * pips stopLossPriceShort = ta.valuewhen(tradersPostSell, close, 0) * (stopLossShortInput / 100) * pips takeProfitPriceLong = ta.valuewhen(tradersPostBuy, close, 0) * (takeProfitLongInput / 100) * pips takeProfitPriceShort = ta.valuewhen(tradersPostSell, close, 0) * (takeProfitShortInput / 100) * pips takeProfitALong = takeProfitLongInput > 0 ? takeProfitLongInput : na takeProfitBLong = takeProfitPriceLong > 0 ? takeProfitPriceLong : na takeProfitAShort = takeProfitShortInput > 0 ? takeProfitShortInput : na takeProfitBShort = takeProfitPriceShort > 0 ? takeProfitPriceShort : na stopLossALong = stopLossLongInput > 0 ? stopLossLongInput : na stopLossBLong = stopLossPriceLong > 0 ? stopLossPriceLong : na stopLossAShort = stopLossShortInput > 0 ? stopLossShortInput : na stopLossBShort = stopLossPriceShort > 0 ? stopLossPriceShort : na takeProfitLong = percentOrPipsInput == 'Pips' ? takeProfitALong : takeProfitBLong stopLossLong = percentOrPipsInput == 'Pips' ? stopLossALong : stopLossBLong takeProfitShort = percentOrPipsInput == 'Pips' ? takeProfitAShort : takeProfitBShort stopLossShort = percentOrPipsInput == 'Pips' ? stopLossAShort : stopLossBShort buyAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "buy", "price": ' + str.tostring(close) + '}' sellAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "sell", "price": ' + str.tostring(close) + '}' exitLongAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit", "price": ' + str.tostring(close) + '}' exitShortAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit", "price": ' + str.tostring(close) + '}' if (sides != "None") if tradersPostBuy strategy.entry('Long', strategy.long, when = sides != 'Short', alert_message = buyAlertMessage) strategy.close('Short', when = sides == "Short" and timeCondition, alert_message = exitShortAlertMessage) if tradersPostSell strategy.entry('Short', strategy.short, when = sides != 'Long', alert_message = sellAlertMessage) strategy.close('Long', when = sides == 'Long', alert_message = exitLongAlertMessage) exitAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit"}' strategy.exit('Exit Long', from_entry = "Long", profit = takeProfitLong, loss = stopLossLong, alert_message = exitAlertMessage) strategy.exit('Exit Short', from_entry = "Short", profit = takeProfitShort, loss = stopLossShort, alert_message = exitAlertMessage) strategy.close_all(when = timeConditionEnd)