وسائل لوڈ ہو رہے ہیں... لوڈنگ...

RSI رجحان ٹریلنگ سٹاپ نقصان کے ساتھ حکمت عملی کے بعد

مصنف:چاؤ ژانگ، تاریخ: 2023-12-08 11:41:31
ٹیگز:

img

جائزہ

یہ حکمت عملی ایک خودکار تجارتی حکمت عملی ہے جو آر ایس آئی اشارے کا استعمال کرتے ہوئے رجحان کی نشاندہی کرتی ہے اور چلتی اوسط کے ساتھ رجحان کی تصدیق کرتی ہے ، اسٹاپ نقصان اور منافع کی ترتیبات کے ساتھ۔ جب آر ایس آئی 68 سے اوپر جاتا ہے اور موجودہ چلتی اوسط پچھلی چلتی اوسط سے تجاوز کرتی ہے تو یہ لمبا ہوجاتا ہے ، اور جب آر ایس آئی 28 سے نیچے آجاتا ہے اور موجودہ چلتی اوسط پچھلی چلتی اوسط سے تجاوز کرتی ہے۔ اسٹاپ نقصان اور منافع لینے کے نکات بھی تشکیل دیئے جاتے ہیں۔

حکمت عملی منطق

حکمت عملی بنیادی طور پر رجحان کا تعین کرنے کے لئے زیادہ سے زیادہ خریدنے اور زیادہ فروخت ہونے والے حالات کی نشاندہی کرنے کے لئے آر ایس آئی اشارے کا استعمال کرتی ہے۔ آر ایس آئی کے لئے 70 سے اوپر کی اقدار زیادہ خریدنے کی حالت کی نشاندہی کرتی ہیں اور 30 سے نیچے کی اقدار زیادہ فروخت ہونے کی حالت کی نشاندہی کرتی ہیں۔ رجحان کی تصدیق حرکت پذیر اوسط سے سنہری کراس اور موت کے کراس سگنلز کا استعمال کرتے ہوئے کی جاتی ہے۔ مخصوص تجارتی سگنل یہ ہیں:

لانگ سگنل: آر ایس آئی 68 سے اوپر جاتا ہے اور موجودہ حرکت پذیر اوسط پچھلے حرکت پذیر اوسط سے تجاوز کرتا ہے ، طویل ہوجاتا ہے۔
شارٹ سگنل: آر ایس آئی 28 سے نیچے جاتا ہے اور موجودہ حرکت پذیر اوسط پچھلے حرکت پذیر اوسط سے نیچے گزرتا ہے ، مختصر ہوجاتا ہے۔

سٹاپ نقصان اور منافع لینے کی ترتیبات کو زیادہ سے زیادہ لچکدار سے زیادہ سخت تک منتقل کیا جاتا ہے:

طویل منافع لیں: اعلی سے 1.4 فیصد اوپر پوزیشن کا 50 فیصد منافع لیں، اعلی سے 0.8 فیصد اوپر 100 فیصد منافع لیں.
لانگ سٹاپ نقصان: اسٹاپ نقصان کو انٹری قیمت سے 2 فیصد کم کریں۔

مختصر منافع: کم سے کم 0.4 فیصد پر پوزیشن کا 50 فیصد منافع لیں، کم سے کم 0.8 فیصد پر 100 فیصد منافع لیں. مختصر سٹاپ نقصان: اسٹاپ نقصان کو انٹری قیمت سے 2 فیصد زیادہ مقرر کریں۔

اس کے علاوہ، جب رجحان الٹ جاتا ہے، جیسے کہ RSI 30 سے نیچے ٹوٹ جاتا ہے جب طویل ہو، تو مارکیٹ میں پوری طویل پوزیشن بند کر دیں؛ جب RSI 60 سے اوپر ٹوٹ جاتا ہے جب مختصر ہو، تو مارکیٹ میں پوری مختصر پوزیشن بند کر دیں.

فوائد

  1. زیادہ خریدنے اور کم فروخت سے بچنے کے لئے زیادہ خریدنے / زیادہ فروخت کا تعین کرنے کے لئے RSI کا استعمال کریں.
  2. اہم رجحان کے خلاف تجارت کو کم کرنے کے لئے چلتی اوسط کے ساتھ فلٹرز.
  3. منافع کو زیادہ سے زیادہ کرنے کے لئے منافع کے اہداف کو لے کر.
  4. وسیع سٹاپ نقصان کچھ retracement کے لئے اجازت دیتا ہے.
  5. رجحان کی تبدیلی کی بنیاد پر پوزیشن بند کرنا اچانک واقعات پر تیزی سے رد عمل ظاہر کرتا ہے۔

خطرات

  1. RSI پیرامیٹر کی خراب ترتیب غلط سگنل کی طرف جاتا ہے.
  2. ناقص حرکت پذیر اوسط پیرامیٹر کی ترتیب کمزور فلٹرنگ کی طرف جاتا ہے.
  3. سٹاپ نقصان بہت وسیع بڑے نقصانات کی طرف جاتا ہے.
  4. منافع کو بہت تنگ کرتے ہیں اور منافع کو میز پر چھوڑ دیتے ہیں۔
  5. غیر ضروری طور پر پوزیشنوں کو بند کرنے کے لئے غلط ریورس سگنل.

مذکورہ بالا خطرات سے نمٹنے کے لئے ، پیرامیٹرز کو وسیع پیمانے پر ایڈجسٹ کرنا چاہئے۔ مارکیٹ کی اتار چڑھاؤ کی بنیاد پر اسٹاپ نقصان اور منافع حاصل کرنا بھی مناسب طریقے سے طے کیا جانا چاہئے۔ غیر ضروری نقصانات سے بچنے کے لئے ریورس سگنل کو احتیاط سے استعمال کیا جانا چاہئے۔

بہتر مواقع

اسٹریٹیجی کو مزید بہتر بنایا جا سکتا ہے:

  1. سگنل کی درستگی کو بہتر بنانے کے لیے حجم جیسے مزید فلٹرز شامل کریں۔
  2. منافع میں تالا لگانے کے لئے ٹریلنگ سٹاپ نقصان کو نافذ کریں۔
  3. منافع کو زیادہ سے زیادہ کرنے کے لئے کچھ باہر نکلنے کے لئے منافع حاصل کرنے کے لئے استعمال کریں.
  4. بہترین پیرامیٹرز کا استعمال کرنے کے لئے آلہ سوئچنگ شامل کریں.
  5. متحرک طور پر رکنے کو ایڈجسٹ کرنے کے لئے فیوچر کے لئے لے جانے کی لاگت شامل کریں.

نتیجہ

مجموعی طور پر یہ ایک پختہ اور قابل اعتماد رجحان کی پیروی کرنے والی حکمت عملی ہے۔ یہ آر ایس آئی کا استعمال کرتے ہوئے رجحان کی اچھی طرح سے نشاندہی کرتا ہے اور حرکت پذیر اوسط کے ساتھ مزید فلٹر کرتا ہے۔ یہ معقول اسٹاپ نقصان اور اسٹیگرڈ لے منافع کی ترتیبات کو بھی نافذ کرتا ہے۔ اگر مناسب طریقے سے ٹونڈ کیا جائے تو یہ رجحان کی مارکیٹوں میں بہت اچھی کارکردگی کا مظاہرہ کرسکتا ہے۔ مزید اصلاحات سے اس سے بھی بہتر کارکردگی کا مظاہرہ ہوسکتا ہے۔


// © 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)      


مزید