اس حکمت عملی کا بنیادی خیال یہ ہے کہ آر ایس آئی اشارے کے ہموار دور کو متحرک بنایا جائے ، جو قیمت اور حرکیات کے مابین وابستگی کے مطابق خود بخود ایڈجسٹ ہوجائے ، جس سے آر ایس آئی اشارے کی افادیت کو بہتر بنایا جاسکے۔
اس حکمت عملی میں پہلے قیمت کی حرکیات کا حساب لگایا جاتا ہے اور پھر قیمت اور حرکیات کے مابین ارتباط کا عنصر شمار کیا جاتا ہے۔ جب ارتباط کا عنصر 1 کے قریب ہوتا ہے تو ، قیمت اور حرکیات انتہائی مثبت طور پر منسلک ہوتے ہیں۔ جب ارتباط کا عنصر 1 کے قریب ہوتا ہے تو ، قیمت اور حرکیات کی اونچائی منفی طور پر منسلک ہوتی ہے۔
قیمت اور حرکیات کی وابستگی کے مطابق ، آر ایس آئی اشارے کے ہموار دوروں کی لمبائی کو ایڈجسٹ کیا جاسکتا ہے۔ جب وابستگی زیادہ ہو تو ، آر ایس آئی کا ایک مختصر دور استعمال کریں۔ جب وابستگی کم ہو تو ، طویل آر ایس آئی کا دور استعمال کریں۔
خاص طور پر ، اس حکمت عملی میں آر ایس آئی کے دورانیے کی لمبائی کو ایک حد کے طور پر طے کیا گیا ہے ، جو 20-50 ہے۔ قیمت اور حرکیات کے متعلقہ فیکٹرز کا حساب کتاب کرنے کے بعد ، متعلقہ فیکٹرز کو 20-50 کی حد تک ایک لکیری نقشہ سازی کے طریقہ کار کے ذریعہ نقشہ بنایا گیا ہے ، جو آر ایس آئی کی حتمی ہموار دورانیے کی لمبائی ہے۔
اس طرح ، مارکیٹ کی صورتحال کے مطابق ، آر ایس آئی اشارے کے پیرامیٹرز کو خود بخود ایڈجسٹ کیا جاسکتا ہے ، جب قیمت میں تبدیلی اور حرکیات میں تبدیلی کا مضبوط تعلق ہوتا ہے تو ، زیادہ قلیل مدتی آر ایس آئی کا استعمال کیا جاتا ہے ، تاکہ اسے زیادہ حساس بنایا جاسکے۔ جب ارتباط کم ہوتا ہے تو ، سگنل پر شور کے اثرات کو کم کرنے کے لئے زیادہ طویل مدتی آر ایس آئی کا استعمال کیا جاتا ہے۔
اس حکمت عملی کو متحرک طور پر آر ایس آئی کو ہموار کرنے کے دورانیے کو ایڈجسٹ کرکے سیکھنے کے قابل ہے ، لیکن اس کے عملی نفاذ میں بہتری کی گنجائش ہے۔ کلیدی بات یہ ہے کہ آر ایس آئی پیرامیٹرز کے انتخاب پر اثر انداز ہونے والے فیصلہ کن عوامل کو تلاش کیا جائے اور اسے قابل پیمائش اشارے میں تبدیل کیا جائے۔ اس کے ساتھ ہی ، ماڈل پر مکمل طور پر انحصار نہ کریں ، بلکہ پیرامیٹرز کی حد کو تجربے اور تاثرات کی بنیاد پر بہتر بنانے کی ضرورت ہے۔ مجموعی طور پر ، یہ ایک بہت ہی جدید خیال ہے جس میں عملی استعمال کی صلاحیت موجود ہے ، بہتر بنانے اور بہتر بنانے کے بعد۔
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Dynamic RSI Momentum", "DRM Strategy", process_orders_on_close = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 50 )
// +++++++++++++++++++++
// ++ INPUT ++
// +++++++++++++++++++++
// Momentum
len = input.int(10, "Momentum Length", 1, group = "Dynamic RSI Momentum")
src = input.source(close, "Source", group = "Dynamic RSI Momentum")
min_rsi = input.int(20, "Min RSI", group = "Dynamic RSI Momentum")
max_rsi = input.int(50, "Max RSI", group = "Dynamic RSI Momentum")
upLvl = input.float(70, "OverBought", 0, 100, group = "Dynamic RSI Momentum")
dnLvl = input.float(30, "OverSold", 0, 100, group = "Dynamic RSI Momentum")
// +++++++++++++++++++++
// ++ CALCULATION ++
// +++++++++++++++++++++
// RMA Function
rmaFun(src, len) =>
sma = ta.sma(src, len)
alpha = 1/len
sum = 0.0
sum := na(sum[1]) ? sma : alpha * src + (1 - alpha) * nz(sum[1])
// RSI Function
rsiFun(src, len) =>
100 - 100 / (1 + rmaFun(src - src[1] > 0 ? src - src[1] : 0, len) /
rmaFun(src[1] - src > 0 ? src[1] - src : 0, len))
// Momentum
momVal = src - src[len]
// Calculation Price vs Momentum
corr = ta.correlation(src, momVal, len)
corr := corr > 1 or corr < -1 ? float(na) : corr
rsiLen = 0
rsiLen := int(min_rsi + nz(math.round((1 - corr) * (max_rsi-min_rsi) / 2, 0), 0))
rsiMom = rsiFun(src, rsiLen)
// +++++++++++++++++++++
// ++ STRATEGY ++
// +++++++++++++++++++++
long = ta.crossover(rsiMom, dnLvl)
short = ta.crossunder(rsiMom, upLvl)
// +++> Long <+++++
if long and not na(rsiMom)
strategy.entry("Long", strategy.long)
// +++> Short <+++++
if short and not na(rsiMom)
strategy.entry("Short", strategy.short)
// +++++++++++++++++++++
// ++ PLOT ++
// +++++++++++++++++++++
plot(rsiMom, "Dynamic RSI Momentum", rsiMom < dnLvl ? color.green : rsiMom > upLvl ? color.red : color.yellow)
hline(50, "Mid Line", color.gray)
upperLine = hline(upLvl, "Upper Line", color.gray)
lowerLine = hline(dnLvl, "Lower Line", color.gray)
fill(upperLine, lowerLine, color.new(color.purple, 90), "Background Fill")