
آر ایس آئی ڈبل محور الٹ مقدار کی حکمت عملی ایک اعلی درجے کی تجارتی حکمت عملی ہے جس میں قیمتوں کے رویے اور نسبتا strong مضبوط انڈیکس ((آر ایس آئی) کے مابین معمول کے باؤنس اور باؤنس الٹ کا پتہ لگانے کے ذریعہ ممکنہ الٹ مواقع کی نشاندہی کی جاتی ہے۔ اس حکمت عملی میں خودکار محور کا پتہ لگانے والے الگورتھم کا استعمال کیا گیا ہے ، جس میں دو مختلف اسٹاپ / اسٹاپ مینجمنٹ کے طریقوں کو جوڑ دیا گیا ہے ، جو الٹ کے اشارے کی تصدیق پر خود بخود پوزیشن بناتا ہے۔ اس حکمت عملی کا بنیادی مقصد قیمتوں اور آر ایس آئی اشارے کے مابین الٹ کے رجحان کی تصدیق کے لئے عین مطابق ریاضیاتی حساب کتاب کے ذریعہ ہے ، اور متحرک رسک مینجمنٹ میکانزم کا استعمال کرتے ہوئے اس بات کو یقینی بنانا ہے کہ ہر تجارت پیش گوئی شدہ رسک ریٹ کی پیروی کرتی ہے۔
RSI ڈبل محور الٹ مقدار کی حکمت عملی ایک منظم الٹ شناخت اور سخت خطرے کے انتظام کے ذریعے ایک منظم الٹ ٹریڈنگ کا طریقہ فراہم کرتی ہے۔ اس کی بنیادی قدر روایتی تکنیکی تجزیہ کے تصورات کو قابل پیمائش ٹریڈنگ قواعد میں تبدیل کرنا ہے ، اور دو ماڈل اسٹاپ نقصان کے طریقہ کار کے ذریعہ مختلف مارکیٹ کے ماحول کو اپنانا ہے۔ حکمت عملی کی عمدہ کارکردگی کے لئے تین اہم عناصر کی ضرورت ہوتی ہے: مناسب پیرامیٹرز کی اصلاح ، سخت خطرے پر قابو پانے اور مستقل عملدرآمد کی نظم و ضبط۔ یہ حکمت عملی خاص طور پر مارکیٹ کے ماحول کے لئے موزوں ہے جس میں کچھ اتار چڑھاؤ ہے لیکن رجحانات انتہائی نہیں ہیں ، اور درمیانے درجے کے تاجروں کے لئے ایک بہترین نمونہ ہے۔
/*backtest
start: 2024-04-25 00:00:00
end: 2025-04-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/
//@version=6
strategy("RSI Divergence Strategy - AliferCrypto", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === RSI Settings ===
rsiLength = input.int(14, minval=1, title="RSI Length", group="RSI Settings", tooltip="Number of periods for RSI calculation")
rsiSource = input.source(close, title="RSI Source", group="RSI Settings", tooltip="Price source used for RSI calculation")
// === Divergence Settings ===
lookLeft = input.int(5, minval=1, title="Pivot Lookback Left", group="Divergence Settings", tooltip="Bars to the left for pivot detection")
lookRight = input.int(5, minval=1, title="Pivot Lookback Right", group="Divergence Settings", tooltip="Bars to the right for pivot detection")
rangeLower = input.int(5, minval=1, title="Min Bars Between Pivots", group="Divergence Settings", tooltip="Minimum bars between pivots to validate divergence")
rangeUpper = input.int(60, minval=1, title="Max Bars Between Pivots", group="Divergence Settings", tooltip="Maximum bars between pivots to validate divergence")
// === SL/TP Method ===
method = input.string("Swing", title="SL/TP Method", options=["Swing", "ATR"], group="SL/TP Settings", tooltip="Choose between swing-based or ATR-based stop and target")
// === Swing Settings ===
swingLook = input.int(20, minval=1, title="Swing Lookback (bars)", group="Swing Settings", tooltip="Bars to look back for swing high/low")
swingMarginPct = input.float(1.0, minval=0.0, title="Swing Margin (%)", group="Swing Settings", tooltip="Margin around swing levels as percentage of price")
rrSwing = input.float(2.0, title="R/R Ratio (Swing)", group="Swing Settings", tooltip="Risk/reward ratio when using swing-based method")
// === ATR Settings ===
atrLen = input.int(14, minval=1, title="ATR Length", group="ATR Settings", tooltip="Number of periods for ATR calculation")
atrMult = input.float(1.5, minval=0.1, title="ATR SL Multiplier", group="ATR Settings", tooltip="Multiplier for ATR-based stop loss calculation")
rrAtr = input.float(2.0, title="R/R Ratio (ATR)", group="ATR Settings", tooltip="Risk/reward ratio when using ATR-based method")
// === RSI Calculation ===
_d = ta.change(rsiSource)
up = ta.rma(math.max(_d, 0), rsiLength)
down = ta.rma(-math.min(_d, 0), rsiLength)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
// === Divergence Detection ===
defPl = not na(ta.pivotlow(rsi, lookLeft, lookRight))
defPh = not na(ta.pivothigh(rsi, lookLeft, lookRight))
rsiAtRR = rsi[lookRight]
barsPl = ta.barssince(defPl)
barsPl1 = barsPl[1]
inRangePL = barsPl1 >= rangeLower and barsPl1 <= rangeUpper
barsPh = ta.barssince(defPh)
barsPh1 = barsPh[1]
inRangePH = barsPh1 >= rangeLower and barsPh1 <= rangeUpper
prevPlRsi = ta.valuewhen(defPl, rsiAtRR, 1)
prevPhRsi = ta.valuewhen(defPh, rsiAtRR, 1)
prevPlPrice = ta.valuewhen(defPl, low[lookRight], 1)
prevPhPrice = ta.valuewhen(defPh, high[lookRight], 1)
bullCond = defPl and low[lookRight] < prevPlPrice and rsiAtRR > prevPlRsi and inRangePL
bearCond = defPh and high[lookRight] > prevPhPrice and rsiAtRR < prevPhRsi and inRangePH
plotshape(bullCond, title="Bullish Divergence", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny)
plotshape(bearCond, title="Bearish Divergence", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny)
// === Entries ===
if bullCond
strategy.entry("Long", strategy.long)
if bearCond
strategy.entry("Short", strategy.short)
// === Pre-calculate SL/TP components ===
swingLow = ta.lowest(low, swingLook)
swingHigh = ta.highest(high, swingLook)
atrValue = ta.atr(atrLen)
// === SL/TP Calculation & Exits ===
var float slPrice = na
var float tpPrice = na
var float rr = na
// Long exits
if strategy.position_size > 0
entryPrice = strategy.position_avg_price
if method == "Swing"
slPrice := swingLow * (1 - swingMarginPct / 100)
rr := rrSwing
else
slPrice := entryPrice - atrValue * atrMult
rr := rrAtr
risk = entryPrice - slPrice
tpPrice := entryPrice + risk * rr
strategy.exit("Exit Long", from_entry="Long", stop=slPrice, limit=tpPrice)
// Short exits
if strategy.position_size < 0
entryPrice = strategy.position_avg_price
if method == "Swing"
slPrice := swingHigh * (1 + swingMarginPct / 100)
rr := rrSwing
else
slPrice := entryPrice + atrValue * atrMult
rr := rrAtr
risk = slPrice - entryPrice
tpPrice := entryPrice - risk * rr
strategy.exit("Exit Short", from_entry="Short", stop=slPrice, limit=tpPrice)
// === Plot SL/TP Levels ===
plot(strategy.position_size != 0 ? slPrice : na, title="Stop Loss", style=plot.style_linebr, color=color.red)
plot(strategy.position_size != 0 ? tpPrice : na, title="Take Profit", style=plot.style_linebr, color=color.green)
// === Alerts ===
alertcondition(bullCond, title="Bull RSI Divergence", message="Bullish RSI divergence detected")
alertcondition(bearCond, title="Bear RSI Divergence", message="Bearish RSI divergence detected")