এই কৌশলটি বিভিন্ন প্যারামিটার সেটিংসের সাথে RSI সূচকগুলির তিনটি গ্রুপ এবং তাদের সংশ্লিষ্ট ছয়টি চলমান গড় রেখা গণনা করে তিনটি চলমান গড় ব্যান্ড গঠন করে এবং দীর্ঘমেয়াদী ক্রিয়াকলাপের জন্য বাজারের প্রবণতার দিকনির্দেশকে বিচার করে।
RSI সূচকগুলির তিনটি গ্রুপ গণনা করুনঃ দ্রুত RSI সময়কাল=50, স্বাভাবিক RSI সময়কাল=75, ধীর RSI সময়কাল=100।
RSI সূচকগুলির প্রতিটি গ্রুপের জন্য, যথাক্রমে 5, 30, 50, 70, 90, 100 পিরিয়ডের সহজ বা এক্সপোনেনশিয়াল চলমান গড়গুলি গণনা করুন যা চলমান গড় ব্যান্ড গঠন করে।
যখন দ্রুত RSI চলমান গড়ের সমস্ত লাইন বৃদ্ধি পায়, এটি একটি দীর্ঘ সংকেত হিসাবে বিচার করা হয়; যখন দ্রুত RSI চলমান গড়ের সমস্ত লাইন হ্রাস পায়, এটি একটি সংক্ষিপ্ত সংকেত হিসাবে বিচার করা হয়।
স্বাভাবিক আরএসআই এবং ধীর আরএসআই-এর সাথে সামঞ্জস্যপূর্ণ চলমান গড় ব্যান্ড দ্বারা প্রদত্ত ট্রেডিং সংকেতগুলি একই।
প্রদত্ত ট্রেডিং সময়কালে, 100% পজিশনের সাথে লং পজিশনে যান যখন একটি ক্রয় সংকেত প্রদর্শিত হয়; বিক্রয় সংকেত প্রদর্শিত হলে পূর্ববর্তী লং পজিশনটি বন্ধ করুন।
কৌশলটি আরএসআই সূচক এবং চলমান গড়ের সুবিধাগুলি একত্রিত করে। এটি বিভিন্ন চক্রের স্তরে প্রবণতা পরিবর্তনগুলি ক্যাপচার করতে বিভিন্ন পরামিতি সেটিং সহ তিনটি গ্রুপের আরএসআই ব্যবহার করে। একই সাথে, এটি কিছু গোলমাল ফিল্টার করতে এবং সংকেতের নির্ভরযোগ্যতা উন্নত করতে ছয়টি চলমান গড় লাইন ব্যবহার করে।
একক আরএসআই এবং চলমান গড়ের তুলনায়, এই সমন্বয়টি পরামিতি অপ্টিমাইজেশান উপর নির্ভর না করে একটি পদ্ধতিগত পদ্ধতি ব্যবহার করে বিচার করার ভিত্তি গঠন করে। অ্যাপ্লিকেশনটি বৈজ্ঞানিক, কঠোর এবং সহজেই বোঝা যায়।
আরএসআই চলমান গড় সংমিশ্রণ কৌশলটি প্যারামিটার সেটিংসের উপর নির্ভর করে। যদি প্যারামিটারগুলি ভুলভাবে সেট করা হয় তবে ভুল সংকেতগুলি ঘটতে পারে। এছাড়াও, দ্রুত বাজারে ওঠানামাও মিথ্যা সংকেতগুলি ট্রিগার করতে পারে।
মিথ্যা সংকেতগুলির ঝুঁকি হ্রাস করার জন্য, RSI চক্রের পরামিতিগুলি যথাযথভাবে সামঞ্জস্য করা উচিত, অথবা সর্বোত্তম প্যারামিটার সমন্বয় খুঁজে পেতে চলমান গড়ের চক্র সংখ্যাটি সামঞ্জস্য করা উচিত।
কৌশলটি নিম্নলিখিত দিকগুলিতে আরও অনুকূলিত করা যেতে পারেঃ
স্টপ লস লজিক যোগ করুন। বর্তমান কৌশলটি স্টপ লস সেট করে না, যা বাজারের নাটকীয় ওঠানামা দ্বারা সহজেই প্রভাবিত হয়।
প্যারামিটার সেটিংস অপ্টিমাইজ করুন। সেরা প্যারামিটার খুঁজে পেতে আরও সংমিশ্রণ পরীক্ষা করা যেতে পারে।
অন্যান্য সূচক ফিল্টারিং বৃদ্ধি করুন। সিগন্যাল নিশ্চিত করার জন্য MACD এবং Bollinger Bands এর মতো অন্যান্য সূচক চালু করা যেতে পারে।
সময় এবং ভলিউম ফিল্টারিং যোগ করুন। অস্বাভাবিক সময় এবং ভলিউমের সময় মিথ্যা সংকেত এড়ান।
তিনটি আরএসআই চলমান গড় ব্যান্ড কৌশল বহু সূচকগুলির সুবিধাগুলিকে একীভূত করে এবং দীর্ঘমেয়াদী প্রবণতা নির্ধারণের জন্য কঠোর যৌক্তিক বিচারের মাধ্যমে ট্রেডিং সংকেতগুলি গঠন করে। কৌশলটি সরলতা, সহজ বোঝার বৈশিষ্ট্যযুক্ত এবং চলমান গড় ব্যান্ড ট্রেডিং কৌশলগুলি শেখার এবং অনুশীলনের জন্য উপযুক্ত। পরামিতি এবং সংমিশ্রণের অবিচ্ছিন্ন অপ্টিমাইজেশনের সাথে কৌশল প্রভাব আরও উন্নত হওয়ার আশা করা হচ্ছে।
/*backtest start: 2024-01-21 00:00:00 end: 2024-02-20 00:00:00 period: 1h 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/ // © exlux99 //@version=4 strategy(title="3 RSI MA movement crypto strategy", overlay=true, initial_capital = 100, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.03, pyramiding=1 ) /////////////// fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2019, title = "From Year", minval = 1970) //monday and session // To Date Inputs toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2021, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true source = input(ohlc4) RSIFast = rsi(source, 50) RSINorm = rsi(source, 75) RSISlow = rsi(source, 100) // plot(RSIFast, color=color.silver, style=plot.style_area, histbase=50) // plot(RSINorm, color=#98b8be, style=plot.style_area, histbase=50) // plot(RSISlow, color=#be9e98, style=plot.style_area, histbase=50) // plot(RSIFast, color=color.gray, style=plot.style_line, linewidth=1) // plot(RSINorm, color=color.purple, style=plot.style_line, linewidth=2) // plot(RSISlow, color=color.black, style=plot.style_line, linewidth=3) exponential = false//input(false, title="Exponential MA") src = (RSIFast) ma05 = exponential ? ema(src, 05) : sma(src, 05) ma30 = exponential ? ema(src, 30) : sma(src, 30) ma50 = exponential ? ema(src, 50) : sma(src, 50) ma70 = exponential ? ema(src, 70) : sma(src, 70) ma90 = exponential ? ema(src, 90) : sma(src, 90) ma100 = exponential ? ema(src, 100) : sma(src, 100) leadMAColor = change(ma30)>=0 and ma30>ma100 ? color.lime : change(ma30)<0 and ma30>ma100 ? color.red : change(ma30)<=0 and ma30<ma100 ? color.maroon : change(ma30)>=0 and ma30<ma100 ? color.green : color.gray maColor(ma, maRef) => change(ma)>=0 and ma30>maRef ? color.lime : change(ma)<0 and ma30>maRef ? color.red : change(ma)<=0 and ma30<maRef ? color.maroon : change(ma)>=0 and ma30<maRef ? color.green : color.gray // plot( ma30, color=maColor(ma30,ma100), style=plot.style_line, title="MMA30", linewidth=2) // plot( ma50, color=maColor(ma50,ma100), style=plot.style_line, title="MMA50", linewidth=2) // plot( ma70, color=maColor(ma70,ma100), style=plot.style_line, title="MMA70", linewidth=2) // plot( ma90, color=maColor(ma90,ma100), style=plot.style_line, title="MMA90", linewidth=2) long0=(leadMAColor==color.lime and maColor(ma30,ma100)==color.lime and maColor(ma50,ma100)==color.lime and maColor(ma70,ma100)==color.lime and maColor(ma90,ma100)==color.lime ) or (leadMAColor==color.green and maColor(ma30,ma100)==color.green and maColor(ma50,ma100)==color.green and maColor(ma70,ma100)==color.green and maColor(ma90,ma100)==color.green ) exit0=leadMAColor==color.maroon and maColor(ma30,ma100)==color.maroon and maColor(ma50,ma100)==color.maroon and maColor(ma70,ma100)==color.maroon and maColor(ma90,ma100)==color.maroon exponential1 = false//input(false, title="Exponential MA") src1 = (RSINorm) ma051 = exponential1 ? ema(src1, 05) : sma(src1, 05) ma301 = exponential1 ? ema(src1, 30) : sma(src1, 30) ma501 = exponential1 ? ema(src1, 50) : sma(src1, 50) ma701 = exponential1 ? ema(src1, 70) : sma(src1, 70) ma901 = exponential1 ? ema(src1, 90) : sma(src1, 90) ma1001 = exponential1 ? ema(src1, 100) : sma(src1, 100) leadMAColor1 = change(ma051)>=0 and ma051>ma1001 ? color.lime : change(ma051)<0 and ma051>ma1001 ? color.red : change(ma051)<=0 and ma051<ma1001 ? color.maroon : change(ma051)>=0 and ma051<ma1001 ? color.green : color.gray maColor1(ma, maRef) => change(ma)>=0 and ma05>maRef ? color.lime : change(ma)<0 and ma05>maRef ? color.red : change(ma)<=0 and ma05<maRef ? color.maroon : change(ma)>=0 and ma05<maRef ? color.green : color.gray // plot( ma051, color=leadMAColor1, style=plot.style_line, title="MMA05", linewidth=1) // plot( ma301, color=maColor1(ma301,ma1001), style=plot.style_line, title="MMA30", linewidth=3) // plot( ma501, color=maColor1(ma501,ma1001), style=plot.style_line, title="MMA50", linewidth=3) // plot( ma701, color=maColor1(ma701,ma1001), style=plot.style_line, title="MMA70", linewidth=3) // plot( ma901, color=maColor1(ma901,ma1001), style=plot.style_line, title="MMA90", linewidth=3) long1=(leadMAColor1==color.lime and maColor1(ma301,ma1001)==color.lime and maColor1(ma501,ma1001)==color.lime and maColor1(ma701,ma1001)==color.lime and maColor1(ma901,ma1001)==color.lime ) or (leadMAColor1==color.green and maColor1(ma301,ma1001)==color.green and maColor1(ma501,ma1001)==color.green and maColor1(ma701,ma1001)==color.green and maColor1(ma901,ma100)==color.green ) exit1=leadMAColor1==color.maroon and maColor1(ma301,ma1001)==color.maroon and maColor1(ma501,ma1001)==color.maroon and maColor1(ma701,ma1001)==color.maroon and maColor1(ma901,ma1001)==color.maroon exponential2 = false//input(false, title="Exponential MA") src2 = (RSISlow) ma052 = exponential2 ? ema(src2, 05) : sma(src2, 05) ma302 = exponential2 ? ema(src2, 30) : sma(src2, 30) ma502 = exponential2 ? ema(src2, 50) : sma(src2, 50) ma702 = exponential2 ? ema(src2, 70) : sma(src2, 70) ma902 = exponential2 ? ema(src2, 90) : sma(src2, 90) ma1002 = exponential2 ? ema(src2, 100) : sma(src2, 100) leadMAColor2 = change(ma052)>=0 and ma052>ma1002 ? color.lime : change(ma052)<0 and ma052>ma1002 ? color.red : change(ma052)<=0 and ma052<ma1002 ? color.maroon : change(ma052)>=0 and ma052<ma1002 ? color.green : color.gray maColor2(ma, maRef) => change(ma)>=0 and ma05>maRef ? color.lime : change(ma)<0 and ma05>maRef ? color.red : change(ma)<=0 and ma05<maRef ? color.maroon : change(ma)>=0 and ma05<maRef ? color.green : color.gray // plot( ma052, color=leadMAColor2, style=plot.style_line, title="MMA05", linewidth=1) // plot( ma302, color=maColor2(ma302,ma1001), style=plot.style_line, title="MMA30", linewidth=4) // plot( ma502, color=maColor2(ma502,ma1001), style=plot.style_line, title="MMA50", linewidth=4) // plot( ma702, color=maColor2(ma701,ma1001), style=plot.style_line, title="MMA70", linewidth=4) // plot( ma902, color=maColor2(ma901,ma1001), style=plot.style_line, title="MMA90", linewidth=4) long2=(leadMAColor2==color.lime and maColor2(ma302,ma1002)==color.lime and maColor2(ma502,ma1002)==color.lime and maColor2(ma702,ma1002)==color.lime and maColor2(ma902,ma1002)==color.lime ) or (leadMAColor2==color.green and maColor2(ma302,ma1002)==color.green and maColor2(ma502,ma1002)==color.green and maColor2(ma701,ma1002)==color.green and maColor2(ma901,ma1002)==color.green ) exit2=leadMAColor2==color.maroon and maColor2(ma302,ma1002)==color.maroon and maColor2(ma502,ma1002)==color.maroon and maColor2(ma702,ma1002)==color.maroon and maColor2(ma902,ma1002)==color.maroon long= long1 or long2 exit= exit1 or exit2 // ------------------------- Strategy Logic --------------------------------- // var longOpened = false var shortOpened = false var int timeOfBuy = na longConditionLongOnly= long and not longOpened if longConditionLongOnly longOpened := true timeOfBuy := time longExitSignal = exit exitLongConditionLongOnly = longOpened[1] and longExitSignal if exitLongConditionLongOnly longOpened := false timeOfBuy := na //plotshape(longConditionLongOnly, color=color.green, text= "Buy", location= location.belowbar,style= shape.labelup, textcolor=color.white, size = size.tiny, title="Buy Alert",editable=false, transp=60) //plotshape(exitLongConditionLongOnly, color=color.red, text= "exit", location= location.abovebar,style= shape.labeldown, textcolor=color.white, size = size.tiny, title="Sell Alert", editable=false, transp=60) //alertcondition(longConditionLongOnly ,title='Buy Alert', message='Buy Alert') //alertcondition(exitLongConditionLongOnly , title='exit Alert', message='exit Alert') if(time_cond) strategy.entry("long",1,when=longConditionLongOnly) strategy.entry("short",0,when=exitLongConditionLongOnly)