یہ حکمت عملی ایک خودکار تجارتی حکمت عملی ہے جو آر ایس آئی اشارے کا استعمال کرتے ہوئے رجحان کی نشاندہی کرتی ہے اور چلتی اوسط کے ساتھ رجحان کی تصدیق کرتی ہے ، اسٹاپ نقصان اور منافع کی ترتیبات کے ساتھ۔ جب آر ایس آئی 68 سے اوپر جاتا ہے اور موجودہ چلتی اوسط پچھلی چلتی اوسط سے تجاوز کرتی ہے تو یہ لمبا ہوجاتا ہے ، اور جب آر ایس آئی 28 سے نیچے آجاتا ہے اور موجودہ چلتی اوسط پچھلی چلتی اوسط سے تجاوز کرتی ہے۔ اسٹاپ نقصان اور منافع لینے کے نکات بھی تشکیل دیئے جاتے ہیں۔
حکمت عملی بنیادی طور پر رجحان کا تعین کرنے کے لئے زیادہ سے زیادہ خریدنے اور زیادہ فروخت ہونے والے حالات کی نشاندہی کرنے کے لئے آر ایس آئی اشارے کا استعمال کرتی ہے۔ آر ایس آئی کے لئے 70 سے اوپر کی اقدار زیادہ خریدنے کی حالت کی نشاندہی کرتی ہیں اور 30 سے نیچے کی اقدار زیادہ فروخت ہونے کی حالت کی نشاندہی کرتی ہیں۔ رجحان کی تصدیق حرکت پذیر اوسط سے سنہری کراس اور موت کے کراس سگنلز کا استعمال کرتے ہوئے کی جاتی ہے۔ مخصوص تجارتی سگنل یہ ہیں:
لانگ سگنل: آر ایس آئی 68 سے اوپر جاتا ہے اور موجودہ حرکت پذیر اوسط پچھلے حرکت پذیر اوسط سے تجاوز کرتا ہے ، طویل ہوجاتا ہے۔
شارٹ سگنل: آر ایس آئی 28 سے نیچے جاتا ہے اور موجودہ حرکت پذیر اوسط پچھلے حرکت پذیر اوسط سے نیچے گزرتا ہے ، مختصر ہوجاتا ہے۔
سٹاپ نقصان اور منافع لینے کی ترتیبات کو زیادہ سے زیادہ لچکدار سے زیادہ سخت تک منتقل کیا جاتا ہے:
طویل منافع لیں: اعلی سے 1.4 فیصد اوپر پوزیشن کا 50 فیصد منافع لیں، اعلی سے 0.8 فیصد اوپر 100 فیصد منافع لیں.
لانگ سٹاپ نقصان: اسٹاپ نقصان کو انٹری قیمت سے 2 فیصد کم کریں۔
مختصر منافع: کم سے کم 0.4 فیصد پر پوزیشن کا 50 فیصد منافع لیں، کم سے کم 0.8 فیصد پر 100 فیصد منافع لیں. مختصر سٹاپ نقصان: اسٹاپ نقصان کو انٹری قیمت سے 2 فیصد زیادہ مقرر کریں۔
اس کے علاوہ، جب رجحان الٹ جاتا ہے، جیسے کہ RSI 30 سے نیچے ٹوٹ جاتا ہے جب طویل ہو، تو مارکیٹ میں پوری طویل پوزیشن بند کر دیں؛ جب RSI 60 سے اوپر ٹوٹ جاتا ہے جب مختصر ہو، تو مارکیٹ میں پوری مختصر پوزیشن بند کر دیں.
مذکورہ بالا خطرات سے نمٹنے کے لئے ، پیرامیٹرز کو وسیع پیمانے پر ایڈجسٹ کرنا چاہئے۔ مارکیٹ کی اتار چڑھاؤ کی بنیاد پر اسٹاپ نقصان اور منافع حاصل کرنا بھی مناسب طریقے سے طے کیا جانا چاہئے۔ غیر ضروری نقصانات سے بچنے کے لئے ریورس سگنل کو احتیاط سے استعمال کیا جانا چاہئے۔
اسٹریٹیجی کو مزید بہتر بنایا جا سکتا ہے:
مجموعی طور پر یہ ایک پختہ اور قابل اعتماد رجحان کی پیروی کرنے والی حکمت عملی ہے۔ یہ آر ایس آئی کا استعمال کرتے ہوئے رجحان کی اچھی طرح سے نشاندہی کرتا ہے اور حرکت پذیر اوسط کے ساتھ مزید فلٹر کرتا ہے۔ یہ معقول اسٹاپ نقصان اور اسٹیگرڈ لے منافع کی ترتیبات کو بھی نافذ کرتا ہے۔ اگر مناسب طریقے سے ٹونڈ کیا جائے تو یہ رجحان کی مارکیٹوں میں بہت اچھی کارکردگی کا مظاہرہ کرسکتا ہے۔ مزید اصلاحات سے اس سے بھی بہتر کارکردگی کا مظاہرہ ہوسکتا ہے۔
// © 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)