এই কৌশলটি প্রবণতা দিক সনাক্ত করতে এবং ট্রেডিং সিদ্ধান্ত নিতে ইএমএ এবং আরএসআই সূচকগুলিকে একত্রিত করে। যখন দাম ইএমএর উপরে থাকে এবং আরএসআই কেনার পয়েন্টের নীচে থাকে তখন এটি দীর্ঘ হয় এবং যখন দাম ইএমএর নীচে থাকে এবং আরএসআই বিক্রয় পয়েন্টের উপরে থাকে তখন এটি সংক্ষিপ্ত হয়। এটি প্রবণতা ট্রেডিংয়ের জন্য প্রবণতা দিক নির্ধারণের জন্য শেষ দুটি মোমবাতি বন্ধের মধ্যে সম্পর্কও ব্যবহার করে।
প্রবণতা রেখা সূচক হিসাবে 200 দিনের ইএমএ গণনা করুন। ইএমএ দ্রুত মূল্য পরিবর্তনের প্রতিক্রিয়া জানায় এবং কার্যকরভাবে প্রবণতা দিক নির্ধারণ করে।
অতিরিক্ত ক্রয় এবং অতিরিক্ত বিক্রয় শর্তগুলি বিচার করার জন্য 14 দিনের আরএসআই গণনা করুন। 50 এর নীচে আরএসআইকে অতিরিক্ত বিক্রয় বলে মনে করা হয়, যখন 50 এর উপরে ওভারকপ হিসাবে বিবেচনা করা হয়। প্রবেশ এবং প্রস্থান সময় নির্ধারণের জন্য আরএসআইয়ের আপ বা ডাউন প্রবণতাও ব্যবহার করুন।
প্রবণতা দিক নির্ধারণের জন্য শেষ দুটি মোমবাতি বন্ধের মধ্যে আকারের সম্পর্ক তুলনা করুন। ক্রমবর্ধমান শেষ দুটি বন্ধ একটি আপট্রেন্ডের সংকেত দেয়, যখন হ্রাসকারী শেষ দুটি বন্ধ একটি ডাউনট্রেন্ডের সংকেত দেয়।
যখন একটি আপট্রেন্ড, মূল্য 200 দিনের EMA এর উপরে, এবং RSI 50 এর নিচে এবং বাড়ছে, তখন একটি ক্রয় সংকেত উৎপন্ন হয়।
যখন একটি নিম্নমুখী প্রবণতা থাকে, 200 দিনের EMA এর নীচে মূল্য এবং RSI 50 এর উপরে এবং হ্রাস পায়, তখন একটি বিক্রয় সংকেত উৎপন্ন হয়।
ATR এবং সর্বশেষ 14টি মোমবাতি সর্বোচ্চ/নিম্ন মূল্যের জন্য স্টপ লস এবং লাভের হিসাব করতে ব্যবহৃত হয়।
ঝুঁকি ব্যবস্থাপনার জন্য একটি ট্রেলিং স্টপ কৌশল গ্রহণ করুন।
দুটি সূচকের সংমিশ্রণ প্রবণতা দিক নির্ধারণে নির্ভুলতা উন্নত করে। ইএমএ প্রধান প্রবণতা এবং আরএসআই এবং ক্যান্ডেল সম্পর্ক স্থানীয় প্রবণতা এবং প্রবেশ / প্রস্থান সময় নির্ধারণ করে।
আরএসআই কার্যকরভাবে মিথ্যা ব্রেকআউট এড়ায়। আরএসআই ওভারকুপ/ওভারসোল্ড স্ট্যাটাস EMA এর বিলম্বের কারণে অপ্রয়োজনীয় লেনদেন এড়ায়।
ট্রেইলিং স্টপ কার্যকরভাবে মাঝে মাঝে বড় অ্যাম্প্লিচুডের ওঠানামা দ্বারা সৃষ্ট ক্ষতি নিয়ন্ত্রণ করে।
অপ্টিমাইজড প্যারামিটার সংমিশ্রণ স্থিতিশীলতা বৃদ্ধি করে।
ইএমএ এবং আরএসআই বড় আকারের পার্শ্বীয় বাজারে ভুল সংকেত তৈরি করতে পারে, যা এড়ানো উচিত।
একটি খুব সংকীর্ণ স্টপ ক্ষতি ঘন ঘন স্টপগুলির কারণ হয় যখন একটি খুব প্রশস্ত স্টপ ক্ষতি ক্ষতি নিয়ন্ত্রণ করতে ব্যর্থ হয়। এটিআর পরামিতি সঠিকভাবে সামঞ্জস্য করা উচিত।
বিভাজনের পরে প্রত্যাহারের সম্ভাবনা বেশি। ট্রেন্ড মিস করা এড়াতে আরএসআই পরামিতি শিথিল করা উচিত।
এটিআর প্যারামিটার এবং স্টপ দূরত্ব সামঞ্জস্য করুন যাতে আরও ভাল স্টপ লস পয়েন্ট পাওয়া যায়।
আরও ভাল প্যারামিটার সমন্বয় খুঁজে পেতে EMA এবং RSI পরামিতিগুলি অপ্টিমাইজ করুন।
সিগন্যালের নির্ভুলতা বাড়াতে MACD, Bollinger Bands ইত্যাদির মতো ফিল্টারিংয়ের জন্য অন্যান্য সূচক যুক্ত করুন।
বিভিন্ন পণ্যের মধ্যে পরীক্ষার পরামিতির পার্থক্য আরও দৃঢ়তা বাড়ানোর জন্য।
ভুল সিগন্যাল প্রবণতা ঘন্টা এড়াতে নির্দিষ্ট সময়সীমার মধ্যে কৌশল নিষ্ক্রিয় করার চেষ্টা করুন।
সামগ্রিক কৌশলটি স্থিতিশীল রিটার্ন, সর্বাধিক ড্রাউনডাউন এবং শার্প অনুপাতের সাথে বেশ স্থিতিশীল। এটি পরামিতি অপ্টিমাইজেশন এবং স্টপ লস সমন্বয় দ্বারা আরও উন্নত করা যেতে পারে। নির্দিষ্ট বাজারের অবস্থার সময় ভুল সংকেতগুলিও নজর রাখতে হবে এবং সহায়ক সূচক বা সময় ফিল্টারগুলির মাধ্যমে এগুলি এড়াতে হবে। এই কৌশলটির ক্রমাগত অপ্টিমাইজেশনের মাধ্যমে দীর্ঘমেয়াদী স্থিতিশীল কৌশল হওয়ার সম্ভাবনা রয়েছে।
/*backtest start: 2023-01-01 00:00:00 end: 2023-08-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // strategy("EMA RSI Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Author : AJ Rupasinghege // Date : 06/11/2022 // Release : v6.0 // Description : If the last two closes are in ascending order, the rsi is below 50 and ascending, and the current candle is above 200 ema, then LONG. // If the last two closes are in descending order, the rsi is above 50 and descending, and the current candle is below 200 ema, then SHORT. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////// INPUTS ////////////////////////////////////////////////////////////// ema_length = input(200, "EMA Length") rsi_buy_value = input(50, "RSI Buy Value") rsi_sell_value = input(50, "RSI Sell Value") show_data = input.bool(0, "Show Data") ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////// VARIABLES ////////////////////////////////////////////////////////// var stop_loss = 0.0 var last_trade_entry_price = 0.0 var low_value= 0.0 var atr = 0.0 var high_value = 0.0 var stop_loss_points = 0.0 var limit = 0.0 var bar_id_entry = 0 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////// FUNCTIONS ////////////////////////////////////////////////////////// getTradeConditionsLong() => //@function Used to calculate stop_loss, stop_loss points, limit and label values for long trades //@param direction (float) // strategy.poistion.size //@returns stop_loss, stop_loss_points, limit //@Dependancies low_value, atr, last_trade_entry_price,bar_id_entry _stop_loss = low_value - atr _stop_lossPoints = (last_trade_entry_price - _stop_loss) *100000 _limit = last_trade_entry_price + (last_trade_entry_price - low_value + atr) value = "OpenValue: " + str.tostring(last_trade_entry_price) + "\n OpenBarIndex: " + str.tostring(bar_id_entry) + "\n LowValue: " + str.tostring(low_value) + "\n atr: " + str.tostring(atr) + "\n stop_loss: " + str.tostring(_stop_loss) + "\n Limit: " + str.tostring(_limit) [_stop_loss,_stop_lossPoints,_limit, value] getTradeConditionsShort() => //@function Used to calculate stop_loss, stop_loss points, limit and label values for short trades //@param direction (float) // strategy.poistion.size //@returns stop_loss, stop_loss_points, limit //@Dependancies high_value, atr, last_trade_entry_price,bar_id_entry _stop_loss = high_value + atr _stop_lossPoints = (_stop_loss -last_trade_entry_price) * 100000 _limit = last_trade_entry_price - (high_value - last_trade_entry_price + atr) value = "OpenValue: " + str.tostring(last_trade_entry_price) + "\n OpenBarIndex: " + str.tostring(bar_id_entry) + "\n HighValue: " + str.tostring(high_value) + "\n atr: " + str.tostring(atr) + "\n stop_loss: " + str.tostring(_stop_loss) + "\n Limit: " + str.tostring(_limit) [_stop_loss,_stop_lossPoints,_limit, value] ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////// SIGNALS ////////////////////////////////////////////////////////// ema = ta.ema(close,ema_length) rsi = ta.rsi(close,14) ema_buy_signal = ema < low ema_sell_signal = ema > high rsi_buy_signal = rsi < rsi_buy_value and rsi[1] < rsi[0] rsi_sell_signal = rsi > rsi_sell_value and rsi[1] > rsi[0] trend_buy_signal = close[2] < close[1] and close[1] < close[0] trend_sell_signal = close[2] > close[1] and close[1] > close[0] ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////// TRADES ////////////////////////////////////////////////////////// long = trend_buy_signal and ema_buy_signal and rsi_buy_signal short = trend_sell_signal and ema_sell_signal and rsi_sell_signal ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////// STRATEGY ////////////////////////////////////////////////////////// if long strategy.entry("Long", strategy.long) if short strategy.entry("Short", strategy.short) // Calculate Trade Entry Variables last_trade_entry_price := strategy.opentrades.entry_price(strategy.opentrades - 1) bar_id_entry := strategy.opentrades.entry_bar_index(strategy.opentrades - 1) atr := ta.atr(14) low_value := ta.lowest(14) high_value := ta.highest(14) // Exit Strategy for Long Positions if (strategy.position_size[1] != strategy.position_size and strategy.position_size>0) [_stop_loss,_stop_loss_points, _limit, value] = getTradeConditionsLong() stop_loss := _stop_loss stop_loss_points := _stop_loss_points limit := _limit if show_data label.new(bar_id_entry,stop_loss - 0.005,str.tostring(value),xloc = xloc.bar_index,yloc = yloc.price,style = label.style_none) strategy.exit("Long Exit", "Long", trail_offset = stop_loss_points/2, trail_points = stop_loss_points/2 , stop = stop_loss , limit = limit ) // Exit Strategy for Short Positions if (strategy.position_size[1] != strategy.position_size and strategy.position_size<0) [_stop_loss,_stop_loss_points, _limit, value] = getTradeConditionsShort() stop_loss := _stop_loss stop_loss_points := _stop_loss_points limit := _limit if show_data label.new(bar_id_entry,stop_loss + 0.005,str.tostring(value),xloc = xloc.bar_index,yloc = yloc.price,style = label.style_none) strategy.exit("Short Exit", "Short", trail_offset = stop_loss_points/2, trail_points = stop_loss_points/2 , stop = stop_loss , limit = limit ) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////// PLOTS ////////////////////////////////////////////////////////// plot(ema, "SMA", color = color.blue, linewidth = 2 ) p1 = plot(strategy.position_size>0? stop_loss:na, style = plot.style_linebr , color = color.rgb(82, 240, 42) ) p2 = plot(strategy.position_size<0? stop_loss:na, style = plot.style_linebr , color = color.rgb(223, 85, 85) ) p3 = plot(strategy.position_size!=0?limit : na, style = plot.style_linebr , color = color.rgb(94, 85, 223, 100) ) fill(p1, p3, color = color.new(color.green, 90)) fill(p2, p3, color = color.new(#e98787, 90))