এই কৌশলটি একটি প্রবণতা অনুসরণকারী সিস্টেম যা একাধিক প্রযুক্তিগত সূচককে একত্রিত করে, মূলত বিভিন্ন সময়ের পাঁচটি এক্সপোনেনশিয়াল মুভিং এভারেজ (ইএমএ), আপেক্ষিক শক্তি সূচক (আরএসআই) এবং বিভিন্ন সময়ের দুটি ডোনচিয়ান চ্যানেলকে একীভূত করে। সিস্টেমটি একাধিক সূচক সমন্বয় করে বাজারের প্রবণতা ক্যাপচার করে এবং গতিশীল স্টপ-লস এবং মুনাফা লক্ষ্যমাত্রা ব্যবহার করে ঝুঁকি এবং রিটার্ন পরিচালনা করে।
কৌশলটি সংকেত নিশ্চিতকরণের জন্য একাধিক প্রযুক্তিগত সূচক ব্যবহার করেঃ প্রথমত, এটি একটি প্রবণতা কাঠামো তৈরি করতে 5 টি ইএমএ (9, 21, 55, 89, 144 পিরিয়ড) ব্যবহার করে, দ্রুত এবং ধীর ইএমএগুলির মধ্যে ক্রসওভারের মাধ্যমে প্রাথমিক প্রবণতার দিক নির্ধারণ করে। দ্বিতীয়ত, এটি একটি প্রবণতা ফিল্টার হিসাবে আরএসআই (14 পিরিয়ড) ব্যবহার করে, লং পজিশনের জন্য আরএসআইকে ওভারকোপড জোনে (60 এর উপরে) এবং শর্ট পজিশনের জন্য ওভারসোল্ড জোনে (40 এর নীচে) থাকতে হবে, যার ফলে ব্যাপ্তি বাজারে ঘন ঘন ট্রেডিং এড়ানো যায়। অবশেষে, এটি 21-পরিয়ড এবং 74-পরিয়ড ডনচিয়ান চ্যানেলগুলি ব্যবহার করে মূল্য আন্দোলনের ব্যাপ্তিগুলি সংজ্ঞায়িত করে, ট্রেডিংয়ের জন্য অতিরিক্ত বাজার কাঠামোর রেফারেন্স সরবরাহ করে।
কৌশলটি একাধিক প্রযুক্তিগত সূচকগুলির সংমিশ্রণের মাধ্যমে একটি অপেক্ষাকৃত সম্পূর্ণ ট্রেডিং সিস্টেম তৈরি করে। যদিও এর কিছুটা বিলম্ব রয়েছে, তবে এটি কঠোর সংকেত ফিল্টারিং এবং ঝুঁকি ব্যবস্থাপনার মাধ্যমে ট্রেন্ডিং মার্কেটে স্থিতিশীল রিটার্ন অর্জন করতে পারে। ব্যবসায়ীদের নির্দিষ্ট বাজারের বৈশিষ্ট্য এবং তাদের ঝুঁকি সহনশীলতা অনুযায়ী প্যারামিটারগুলি সামঞ্জস্য করার পরামর্শ দেওয়া হয়। এদিকে, সিস্টেমের পারফরম্যান্সের ক্রমাগত পর্যবেক্ষণ এবং অপ্টিমাইজেশান দিকগুলির নিয়মিত মূল্যায়ন নিশ্চিত করার জন্য কৌশলটি বাজারের পরিবর্তনের সাথে খাপ খাইয়ে নেওয়ার জন্য প্রয়োজনীয়।
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-04 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA RSI Donchian Strategy", overlay=true) // Input parameters fastEmaLength = input(9, title="Fast EMA Length") midEmaLength = input(21, title="Mid EMA Length") slowEmaLength = input(55, title="Slow EMA Length") ema89Length = input(89, title="89 EMA Length") ema144Length = input(144, title="144 EMA Length") rsiPeriod = input(14, title="RSI Period") rsiOverbought = input(60, title="RSI Overbought Level") rsiOversold = input(40, title="RSI Oversold Level") donchianLength1 = input(21, title="Donchian Channel Length 1") donchianLength2 = input(74, title="Donchian Channel Length 2") // EMA calculations fastEma = ta.ema(close, fastEmaLength) midEma = ta.ema(close, midEmaLength) slowEma = ta.ema(close, slowEmaLength) ema89 = ta.ema(close, ema89Length) ema144 = ta.ema(close, ema144Length) // RSI calculation rsi = ta.rsi(close, rsiPeriod) // Donchian Channel calculations donchianUpper1 = ta.highest(high, donchianLength1) donchianLower1 = ta.lowest(low, donchianLength1) donchianUpper2 = ta.highest(high, donchianLength2) donchianLower2 = ta.lowest(low, donchianLength2) donchianMid1 = (donchianUpper1 + donchianLower1) / 2 donchianMid2 = (donchianUpper2 + donchianLower2) / 2 // Plot EMAs plot(fastEma, color=color.green, linewidth=2, title="Fast EMA") plot(midEma, color=color.blue, linewidth=2, title="Mid EMA") plot(slowEma, color=color.orange, linewidth=2, title="Slow EMA") plot(ema89, color=color.red, linewidth=2, title="89 EMA") plot(ema144, color=color.purple, linewidth=2, title="144 EMA") // Plot Donchian Channels plot(donchianUpper1, color=color.new(color.blue, 0), title="Donchian Upper 1") plot(donchianLower1, color=color.new(color.blue, 0), title="Donchian Lower 1") plot(donchianMid1, color=color.new(color.blue, 80), title="Donchian Mid 1") plot(donchianUpper2, color=color.new(color.red, 0), title="Donchian Upper 2") plot(donchianLower2, color=color.new(color.red, 0), title="Donchian Lower 2") plot(donchianMid2, color=color.new(color.red, 80), title="Donchian Mid 2") // Entry Conditions longCondition = ta.crossover(fastEma, slowEma) and rsi > rsiOverbought shortCondition = ta.crossunder(fastEma, slowEma) and rsi < rsiOversold // Stop Loss and Take Profit var float longStopLoss = na var float longTakeProfit1 = na var float longTakeProfit2 = na var float shortStopLoss = na var float shortTakeProfit1 = na var float shortTakeProfit2 = na if longCondition longStopLoss := high * 0.99 longTakeProfit1 := longStopLoss * 1.02618 longTakeProfit2 := longStopLoss * 1.036185 strategy.entry("Long", strategy.long) if shortCondition shortStopLoss := low * 1.01 shortTakeProfit1 := shortStopLoss * 0.97382 shortTakeProfit2 := shortTakeProfit1 * 0.96381 strategy.entry("Short", strategy.short) // Exit Conditions if not na(longStopLoss) strategy.exit("Take Profit 1", "Long", limit=longTakeProfit1) strategy.exit("Take Profit 2", "Long", limit=longTakeProfit2) strategy.exit("Stop Loss", "Long", stop=longStopLoss) if not na(shortStopLoss) strategy.exit("Take Profit 1", "Short", limit= shortTakeProfit1) strategy.exit("Take Profit 2", "Short", limit=shortTakeProfit2) strategy.exit("Stop Loss", "Short", stop=shortStopLoss) // Labels for buy and sell signals if longCondition label.new(bar_index, low, "Buy", color=color.green, style=label.style_label_up, textcolor=color.white) if shortCondition label.new(bar_index, high, "Sell", color=color.red, style=label.style_label_down, textcolor=color.white) // Alerts alertcondition(longCondition, title="Long Entry Alert", message="Long entry signal") alertcondition(shortCondition, title="Short Entry Alert", message="Short entry signal")