
এই কৌশলটি একটি স্বয়ংক্রিয় ট্রেডিং কৌশল যা RSI সূচকটি ট্রেন্ড সনাক্তকরণের জন্য ব্যবহার করে এবং চলমান গড়ের সাথে মিলিত হয়, একটি স্টপ লস সেট করে। যখন RSI 68 এর চেয়ে বড় হয় এবং চলমান গড়ের উপরে চলমান গড়টি অতিক্রম করার আগে চলমান গড়টি অতিক্রম করে, তখন আরও বেশি করে; যখন RSI 28 এর চেয়ে কম হয় এবং চলমান চলমান গড়ের নীচে চলমান গড়টি অতিক্রম করার আগে চলমান গড়টি খালি করে। একই সাথে একটি স্টপ লস সেট করুন।
এই কৌশলটি মূলত আরএসআই সূচক ব্যবহার করে ওভার-বই ওভার-সোল্ডের ট্রেন্ড সনাক্ত করে। আরএসআই 70 এর চেয়ে বড় হলে এটি ওভার-বই অঞ্চল এবং 30 এর চেয়ে ছোট হলে এটি ওভার-সোল্ড অঞ্চল। মুভিং এভারেজের সাথে গোল্ডেন ক্রস এবং ডেথ ক্রস যুক্ত করে ট্রেন্ড নিশ্চিতকরণ। নির্দিষ্ট ট্রেডিং সিগন্যালগুলি হ’লঃ
মাল্টি হেড সিগন্যালঃ আরএসআই ৬৮ এর চেয়ে বড় এবং বর্তমান চলমান গড়ের উপরে চলমান গড় অতিক্রম করার আগে, আরও বেশি করুন। খালি মাথা সংকেতঃ আরএসআই ২৮ এর চেয়ে কম এবং বর্তমান চলমান গড়ের নীচে পেরিয়ে যাওয়ার আগে চলমান গড়, খালি।
স্টপস্টপ সেটিং প্রতিটি পয়েন্টের জন্য বিভিন্ন স্টপস্টপ অনুপাত সেট করে, আরও শিথিল থেকে আরও কঠোর, যথাঃ
মাল্টি-হেড স্টপঃ শীর্ষস্থানীয় ১.৪% অর্ধেক পজিশন বন্ধ করে, শীর্ষস্থানীয় ০.৮% পুরো পজিশন বন্ধ করে দেয় মাল্টি হেড স্টপঃ এন্ট্রি মূল্যের ২% সেট স্টপ।
খালি মাথা বন্ধঃ নিম্নতম 0.4% অর্ধেক পজিশন বন্ধ, নিম্নতম 0.8% পুরো পজিশন বন্ধ।
খালি মাথা থামানোঃ প্রবেশ মূল্যের ২% সেট থামানো।
একই সময়ে, যখন প্রবণতা বিপরীত হয়, উদাহরণস্বরূপ, যখন RSI 30 অতিক্রম করে, তখন বাজার মূল্য সম্পূর্ণভাবে বন্ধ হয়ে যায়; যখন RSI 60 অতিক্রম করে, তখন বাজার মূল্য সম্পূর্ণভাবে বন্ধ হয়ে যায়।
উপরোক্ত ঝুঁকির জন্য, প্যারামিটারগুলিকে একাধিকবার পরীক্ষার জন্য অনুকূলিতকরণ করা উচিত। স্টপ লস স্টপ সেটিংটি যথাযথ হওয়া উচিত, নির্দিষ্ট ব্যাপ্তি শিথিল করা উচিত এবং বাজারের ওঠানামা অনুযায়ী প্যারামিটারগুলিকে সামঞ্জস্য করা উচিত। পরিসমাপ্তি কৌশলটি সতর্ক হওয়া উচিত যাতে সূচকের ভুল বিচার থেকে ক্ষতির কারণ না হয়।
এই ক্ষেত্রে, নিম্নলিখিত দিকগুলি আরও উন্নত করা যেতে পারেঃ
এই কৌশলটি সামগ্রিকভাবে একটি পরিপক্ক এবং নির্ভরযোগ্য ট্রেন্ড ট্র্যাকিং কৌশল। RSI বিচার ব্যবহার করে ওভারবাইট ওভারসোলের ঘটনাটি ট্রেডিংয়ের দিকনির্দেশনা নির্ধারণ করে। চলমান গড় ব্যবহার করে তরঙ্গ নিশ্চিতকরণ। একই সাথে যথাযথ স্টপ লস এবং প্রগতিশীল স্টপ বন্ধ সেট করে। ট্রেন্ডের মধ্যে আরও ভাল আয় করতে সক্ষম। যদি প্যারামিটারগুলি যথাযথভাবে অনুকূলিত করা হয় তবে ট্রেন্ডের পরিস্থিতিতে দুর্দান্ত পারফরম্যান্স করা যায়। আরও অপ্টিমাইজেশনের পরে আরও ভাল পারফরম্যান্স পাওয়া যায়।
// © CRabbit
//@version=5
// Starting with $100 and using 10% of the account per trade
strategy("RSI Template", shorttitle="RSI", overlay=false, initial_capital=100, default_qty_value=10, default_qty_type=strategy.percent_of_equity)
// RSI Indicator
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"Bollinger Bands" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
rsiLengthInput = input.int(4, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(23, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")
up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"
plot(rsi, "RSI", color=#7E57C2)
plot(rsiMA, "RSI-based MA", color=color.green)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
// Configure backtest start date with inputs
startDate = input.int(title="Start Date", defval=1, minval=1, maxval=31)
startMonth = input.int(title="Start Month", defval=6, minval=1, maxval=12)
startYear = input.int(title="Start Year", defval=2022, minval=1800, maxval=2100)
// See if this bar's time happened on/after start date
afterStartDate = (time >= timestamp(syminfo.timezone,
startYear, startMonth, startDate, 0, 0))
// Long and Short buy strategy
// Submit a market open/ close Long order, but only on/after start date
if (afterStartDate)
if rsi > 68 and (rsiMA > rsiMA[1])
strategy.entry("Long Order", strategy.long, comment="ENTER-LONG")
if rsi < 30
strategy.close("Long Order", alert_message="L-CL")
strategy.exit("L-TP1", from_entry="Long Order", limit=high * 1.004, qty_percent=50, alert_message="L-TP1" + str.tostring(high * 1.004))
strategy.exit("L-TP2", from_entry="Long Order", limit=high * 1.008, qty_percent=100, alert_message="L-TP2" + str.tostring(high * 1.008))
strategy.exit("Exit Long", from_entry="Long Order", stop=low * 0.98, alert_message="L-SL" + str.tostring(low * 0.98))
// Submit a market Open/ Close Short order, but only on/after start date
if (afterStartDate)
if rsi < 28 and (rsiMA < rsiMA[1])
strategy.entry("Short Order", strategy.short, comment="ENTER-SHORT")
if rsi > 60
strategy.close("Short Order", alert_message="S-CL")
strategy.exit("S-TP1", from_entry="Short Order", limit=low * 0.996, qty_percent=50, alert_message="S-TP1" + str.tostring(low * 0.996))
strategy.exit("S-TP2", from_entry="Short Order", limit=low * 0.992, qty_percent=100, alert_message="S-TP2" + str.tostring(low * 0.992))
strategy.exit("Exit Short", from_entry="Short Order", stop=high * 1.02, alert_message="S-SL" + str.tostring(high * 1.02))
// MONTHLY TABLE //
prec = input(2, title = "Return Precision")
new_month = month(time) != month(time[1])
new_year = year(time) != year(time[1])
eq = strategy.equity
bar_pnl = eq / eq[1] - 1
cur_month_pnl = 0.0
cur_year_pnl = 0.0
// Current Monthly P&L
cur_month_pnl := new_month ? 0.0 :
(1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1
// Current Yearly P&L
cur_year_pnl := new_year ? 0.0 :
(1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1
// Arrays to store Yearly and Monthly P&Ls
var month_pnl = array.new_float(0)
var month_time = array.new_int(0)
var year_pnl = array.new_float(0)
var year_time = array.new_int(0)
if (not na(cur_month_pnl[1]) and (new_month or barstate.islast))
array.push(month_pnl , cur_month_pnl[1])
array.push(month_time, time[1])
if (not na(cur_year_pnl[1]) and (new_year or barstate.islast))
array.push(year_pnl , cur_year_pnl[1])
array.push(year_time, time[1])
// Monthly P&L Table
var monthly_table = table(na)
if (barstate.islast)
monthly_table := table.new(position.bottom_right, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1)
table.cell(monthly_table, 0, 0, "", bgcolor = #cccccc)
table.cell(monthly_table, 1, 0, "Jan", bgcolor = #cccccc)
table.cell(monthly_table, 2, 0, "Feb", bgcolor = #cccccc)
table.cell(monthly_table, 3, 0, "Mar", bgcolor = #cccccc)
table.cell(monthly_table, 4, 0, "Apr", bgcolor = #cccccc)
table.cell(monthly_table, 5, 0, "May", bgcolor = #cccccc)
table.cell(monthly_table, 6, 0, "Jun", bgcolor = #cccccc)
table.cell(monthly_table, 7, 0, "Jul", bgcolor = #cccccc)
table.cell(monthly_table, 8, 0, "Aug", bgcolor = #cccccc)
table.cell(monthly_table, 9, 0, "Sep", bgcolor = #cccccc)
table.cell(monthly_table, 10, 0, "Oct", bgcolor = #cccccc)
table.cell(monthly_table, 11, 0, "Nov", bgcolor = #cccccc)
table.cell(monthly_table, 12, 0, "Dec", bgcolor = #cccccc)
table.cell(monthly_table, 13, 0, "Year", bgcolor = #999999)
for yi = 0 to array.size(year_pnl) - 1
table.cell(monthly_table, 0, yi + 1, str.tostring(year(array.get(year_time, yi))), bgcolor = #cccccc)
y_color = array.get(year_pnl, yi) > 0 ? color.new(color.green, transp = 50) : color.new(color.red, transp = 50)
table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100, prec)), bgcolor = y_color)
for mi = 0 to array.size(month_time) - 1
m_row = year(array.get(month_time, mi)) - year(array.get(year_time, 0)) + 1
m_col = month(array.get(month_time, mi))
m_color = array.get(month_pnl, mi) > 0 ? color.new(color.green, transp = 70) : color.new(color.red, transp = 70)
table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100, prec)), bgcolor = m_color)