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

RSI اشارے طویل مختصر علیحدگی تجارتی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-02-26 13:49:25
ٹیگز:

img

جائزہ

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

حکمت عملی کے اصول

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

  1. ماخذ کے اعداد و شمار کے طور پر 13 کے RSI اشارے کے پیرامیٹرز اور قریبی قیمتوں کا استعمال کریں
  2. 14 دن کے طور پر اور 2 دن کے طور پر دائیں نظر آنے والی رینج کے طور پر تیزی سے علیحدگی کے لئے بائیں نظر آنے والی رینج کی وضاحت کریں
  3. دائیں جانب نظر آنے والی حد کو 1 دن اور بائیں جانب نظر آنے والی حد کو 47 دن کے طور پر مقرر کریں
  4. جب قیمتیں کم سے کم ہوتی ہیں لیکن آر ایس آئی زیادہ کم ہوتی ہے تو ، طویل سگنل پیدا کرنے کے لئے طویل علیحدگی کی شرط پوری ہوجاتی ہے
  5. جب قیمتیں زیادہ اونچائیوں پر پہنچتی ہیں لیکن آر ایس آئی کم اونچائیوں پر پہنچتی ہے تو ، مختصر سگنل پیدا کرنے کے لئے مختصر علیحدگی کی شرط پوری ہوجاتی ہے

قیمتوں اور آر ایس آئی کے درمیان طویل مختصر علیحدگی کی نشاندہی کرکے ، یہ تجارتی فیصلے کے لئے قیمتوں کے رجحانات کے موڑ کے مقامات کو پہلے سے پکڑ سکتا ہے۔

حکمت عملی کے فوائد

اس حکمت عملی کے اہم فوائد یہ ہیں:

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

خطرات اور حل

پھر بھی کچھ خطرات ہیں:

  1. آر ایس آئی کی انحراف کا مطلب لازمی طور پر فوری الٹ نہیں ہوتا ہے ، وقت کی تاخیر ہوسکتی ہے جس کی وجہ سے اسٹاپ نقصان کا خطرہ پیدا ہوسکتا ہے۔ حل یہ ہے کہ انحراف سگنل کی تصدیق کے لئے وقت دینے کے لئے وسیع اسٹاپ کی اجازت دی جائے۔

  2. طویل المیعاد علیحدگی بھی خطرے میں اضافہ کرتی ہے۔ حل یہ ہے کہ فلٹر حالات کے طور پر طویل مدتی روزانہ یا ہفتہ وار آر ایس آئی شامل کریں۔

  3. چھوٹا فرق رجحان کی تبدیلی کی تصدیق نہیں کرسکتا ہے، زیادہ اہم RSI فرق تلاش کرنے کے لئے نظرثانی کی مدت کو بڑھانے کی ضرورت ہے.

اصلاح کی ہدایات

اسٹریٹیجی کو مندرجہ ذیل پہلوؤں میں بہتر بنایا جاسکتا ہے:

  1. بہترین پیرامیٹر مجموعے تلاش کرنے کے لئے RSI پیرامیٹرز کو بہتر بنائیں

  2. علیحدگی کی نشاندہی کرنے کے لئے MACD، KD جیسے دیگر تکنیکی اشارے کی کوشش کریں

  3. ہلچل کے ادوار میں جھوٹے سگنل کو کم کرنے کے لئے oscillation فلٹرز شامل کریں

  4. بہترین مجموعہ سگنل تلاش کرنے کے لئے متعدد ٹائم فریم سے آر ایس آئی کو یکجا کریں

نتیجہ

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 3h
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/
// © Nextep

//@version=4
strategy(title="RSI top&bottom destroy ", overlay=false, pyramiding=4, default_qty_value=2, default_qty_type=strategy.fixed, initial_capital=10000, currency=currency.USD)







// INPUT Settings --------------------------------------------------------------------------------------------------------------------------------------------------
len = input(title="RSI Period", minval=1, defval=13)
src = input(title="RSI Source", defval=close)





// defining the lookback range for shorts
lbRshort = input(title="Short Lookback Right", defval=1)
lbLshort = input(title="Short Lookback Left", defval=47)

// defining the lookback range for longs
lbRlong = input(title="Long Lookback Right", defval=2)
lbLlong = input(title="Long Lookback Left", defval=14)


rangeUpper = input(title="Max of Lookback Range", defval=400)
rangeLower = input(title="Min of Lookback Range", defval=1)

// take profit levels
takeProfitLongRSILevel = input(title="Take Profit at RSI Level", minval=0, defval=75)
takeProfitShortRSILevel = input(title="Take Profit for Short at RSI Level", minval=0, defval=25)




// Stop loss settings
longStopLossType = input("PERC", title="Long Stop Loss Type", options=['ATR','PERC', 'FIB', 'NONE'])
shortStopLossType = input("PERC", title="Short Stop Loss Type", options=['ATR','PERC', 'FIB', 'NONE'])
longStopLossValue = input(title="Long Stop Loss Value", defval=14, minval=0)
shortStopLossValue = input(title="Short Stop Loss Value", defval=5, minval=-10)








// PLOTTING THE CHARTS --------------------------------------------------------------------------------------------------------------------------------------------------
// Plotting the Divergence
plotBull = input(title="Plot Bullish", defval=true)
plotBear = input(title="Plot Bearish", defval=true)
bearColor = color.orange
bullColor = color.green
textColor = color.white
noneColor = color.new(color.white, 100)

// Adding the RSI oscillator
osc = rsi(src, len)
ma_len = 14 // Length for the moving average
rsi_ma = sma(osc, ma_len) // Calculate the moving average of RSI
plot(osc, title="RSI", linewidth=1, color=color.purple)
plot(rsi_ma, color=color.blue, title="RSI MA") // Plot the RSI MA

// Adding the lines of the RSI oscillator
plot(osc, title="RSI", linewidth=1, color=color.purple)
hline(50, title="Middle Line", linestyle=hline.style_dotted)
obLevel = hline(75, title="Overbought", linestyle=hline.style_dotted)
osLevel = hline(25, title="Oversold", linestyle=hline.style_dotted)
fill(obLevel, osLevel, title="Background", color=color.purple, transp=80)


atrLength = input(14, title="ATR Length (for Trailing stop loss)")
atrMultiplier = input(3.5, title="ATR Multiplier (for Trailing stop loss)")







// RSI PIVOTS --------------------------------------------------------------------------------------------------------------------------------------------------
// Define a condition for RSI pivot low
isFirstPivotLowlong = not na(pivotlow(osc, lbLlong, lbRlong))
// Define a condition for RSI pivot high
isFirstPivotHighlong = not na(pivothigh(osc, lbLlong, lbRlong))
// Define a condition for the first RSI value
firstPivotRSIValuelong = isFirstPivotLowlong ? osc[lbRlong] : na
// Define a condition for the second RSI value
secondPivotRSIValuelong = isFirstPivotLowlong ? valuewhen(isFirstPivotLowlong, osc[lbRlong], 1) : na


// Define a condition for RSI pivot low
isFirstPivotLowshort = not na(pivotlow(osc, lbLshort, lbRshort))
// Define a condition for RSI pivot high
isFirstPivotHighshort = not na(pivothigh(osc, lbLshort, lbRshort))
// Define a condition for the first RSI value
firstPivotRSIValueshort = isFirstPivotLowshort ? osc[lbRshort] : na
// Define a condition for the second RSI value
secondPivotRSIValueshort = isFirstPivotLowshort ? valuewhen(isFirstPivotLowshort, osc[lbRshort], 1) : na

_inRange(cond) =>
    bars = barssince(cond == true)
    rangeLower <= bars and bars <= rangeUpper









// ADDITIONAL ENTRY CRITERIA --------------------------------------------------------------------------------------------------------------------------------------------------
// RSI crosses RSI MA up by more than 2 points and subsequently down
rsiUpCross = crossover(osc, rsi_ma + 1)
rsiDownCross = crossunder(osc, rsi_ma - 1)

// Calculate the daily RSI
rsiDaily = security(syminfo.ticker, "D", rsi(src, 14))





// BULLISH CONDITIONS --------------------------------------------------------------------------------------------------------------------------------------------------

// LOWER LOW PRICE & HIGHER LOW OSC

// Price: Lower Low
priceLL = na(isFirstPivotLowlong[1]) ? false : (low[lbRlong] < valuewhen(isFirstPivotLowlong, low[lbRlong], 1))
// Osc: Higher Low
oscHL = na(isFirstPivotLowlong[1]) ? false : (osc[lbRlong] > valuewhen(isFirstPivotLowlong, osc[lbRlong], 1) and _inRange(isFirstPivotLowlong[1]))



// BULLISH PLOT
bullCond = plotBull and priceLL and oscHL and isFirstPivotLowlong
plot(
     isFirstPivotLowlong ? osc[lbRlong] : na,
     offset=-lbRlong,
     title="Regular Bullish",
     linewidth=2,
     color=(bullCond ? bullColor : noneColor),
     transp=0
     )

plotshape(
     bullCond ? osc[lbRlong] : na,
     offset=-lbRlong,
     title="Regular Bullish Label",
     text=" Bull ",
     style=shape.labelup,
     location=location.absolute,
     color=bullColor,
     textcolor=textColor,
     transp=0
     )









// BEARISH CONDITIONS --------------------------------------------------------------------------------------------------------------------------------------------------

// HIGHER HIGH PRICE & LOWER LOW OSC
// Osc: Lower High
oscLH = na(isFirstPivotHighshort[1]) ? false : (osc[lbRshort] < valuewhen(isFirstPivotHighshort, osc[lbRshort], 1) and _inRange(isFirstPivotHighshort[1]))
// Price: Higher High
priceHH = na(isFirstPivotHighshort[1]) ? false : (high[lbRshort] > valuewhen(isFirstPivotHighshort, high[lbRshort], 1))


// BEARISH PLOT
bearCond = plotBear and priceHH and oscLH and isFirstPivotHighshort

plot(
     isFirstPivotHighshort ? osc[lbRshort] : na,
     offset=-lbRshort,
     title="Regular Bearish",
     linewidth=2,
     color=(bearCond ? bearColor : noneColor),
     transp=0
     )

plotshape(
     bearCond ? osc[lbRshort] : na,
     offset=-lbRshort,
     title="Regular Bearish Label",
     text=" Bear ",
     style=shape.labeldown,
     location=location.absolute,
     color=bearColor,
     textcolor=textColor,
     transp=0
     )




// ENTRY CONDITIONS --------------------------------------------------------------------------------------------------------------------------------------------------

longCondition = false
shortCondition = false

// Entry Conditions
longCondition := bullCond
shortCondition := bearCond

// Conditions to prevent entering trades based on daily RSI
longCondition := longCondition and rsiDaily >= 23
shortCondition := shortCondition and rsiDaily <= 80




// STOPLOSS CONDITIONS --------------------------------------------------------------------------------------------------------------------------------------------------
// Stoploss Conditions
long_sl_val = 
      longStopLossType == "ATR" ? longStopLossValue * atr(atrLength) 
      : longStopLossType == "PERC" ? close * longStopLossValue / 100 : 0.00
long_trailing_sl = 0.0
long_trailing_sl := strategy.position_size >= 1 ? max(low - long_sl_val, nz(long_trailing_sl[1])) : na

// Calculate Trailing Stop Loss for Short Entries
short_sl_val = 
      shortStopLossType == "ATR" ? 1 - shortStopLossValue * atr(atrLength) 
      : shortStopLossType == "PERC" ? close * (shortStopLossValue / 100) : 0.00 //PERC = shortstoplossvalue = -21300 * 5 / 100 = -1065
short_trailing_sl = 0.0
short_trailing_sl := strategy.position_size <= -1 ? max(high + short_sl_val, nz(short_trailing_sl[1])) : na






// RSI STOP CONDITION
 
rsiStopShort = (strategy.position_avg_price != 0.0 and close <= strategy.position_avg_price * 0.90) or (strategy.position_avg_price != 0.0 and rsi(src, 14) >= 75)
 
rsiStopLong = (strategy.position_avg_price != 0.0 and close >= strategy.position_avg_price * 1.10) or (strategy.position_avg_price != 0.0 and rsi(src, 14) <= 25)


// LONG CONDITIONS --------------------------------------------------------------------------------------------------------------------------------------------------
strategy.entry(id="RSIDivLELong", long=true, when=longCondition)

strategy.entry(id="RSIDivLEShort", long=false, when=shortCondition)







// Close Conditions
shortCloseCondition = bullCond // or cross(osc, takeProfitShortRSILevel)
strategy.close(id="RSIDivLEShort", comment="Close All="+tostring(-close + strategy.position_avg_price, "####.##"), when=abs(strategy.position_size) <= -1 and shortStopLossType == "NONE" and shortCloseCondition )
strategy.close(id="RSIDivLEShort", comment="TSL="+tostring(-close + strategy.position_avg_price, "####.##"), when=abs(strategy.position_size) >= -1 and ((shortStopLossType == "PERC" or shortStopLossType == "ATR") and cross(short_trailing_sl,high))) // or rsiStopShort)// or rsiStopShort)


longCloseCondition = bearCond
strategy.close(id="RSIDivLELong", comment="Close All="+tostring(close - strategy.position_avg_price, "####.##"), when=abs(strategy.position_size) >= 1 and longStopLossType == "NONE" and longCloseCondition)
strategy.close(id="RSIDivLELong", comment="TSL="+tostring(close - strategy.position_avg_price, "####.##"), when=abs(strategy.position_size) >= 1 and ((longStopLossType == "PERC" or longStopLossType == "ATR") and cross(long_trailing_sl,low)))  //or rsiStopLong


مزید