
ZSCORE, RSI, ATR, SMA, EMA
یہ کوئی عام رجحان کی پیروی کرنے والی حکمت عملی نہیں ہے۔ XAG / XAU اسٹیٹسٹک اراریجنگ حکمت عملی ایک بنیادی مفروضے پر مبنی ہے: سونے اور چاندی کی قیمتوں میں ایک طویل مدتی اوسط قیمت واپسی کا رشتہ ہے۔ جب زیڈ اسکور ± 2 معیاری فرق کو توڑتا ہے تو ، قیمت اسٹیٹسٹک معنوں میں انتہائی حد تک پہنچ جاتی ہے ، اس وقت واپسی کے مواقع پر قبضہ کرنے کا موقع آتا ہے۔ ریٹرننگ کے اعداد و شمار سے پتہ چلتا ہے کہ اسٹیٹسٹک اراریجنگ کا یہ طریقہ قیمتی دھاتوں کی مارکیٹ میں واضح خطرہ ایڈجسٹ آمدنی کے بعد فائدہ مند ہے۔
اس حکمت عملی کا بنیادی مقصد معیاری قیمت تناسب ماڈل کی تعمیر کرنا ہے۔ XAG اور XAU کو 20 سائیکل SMA کے ذریعہ معیاری بنائیں ، پھر تناسب کا حساب لگائیں اور 3 سائیکل EMA کے ساتھ ہموار کریں۔ یہ طریقہ کار سادہ قیمت تناسب سے زیادہ مستحکم ہے ، جو مختصر مدت کے شور کو مؤثر طریقے سے فلٹر کرتا ہے۔ جب معیاری تناسب کا Z-Score ± 2 کی حد سے تجاوز کرتا ہے ، جس سے ظاہر ہوتا ہے کہ موجودہ قیمت تاریخی اوسط سے 2 معیاری سے زیادہ ہے ، تو یہ اعدادوشمار کے لحاظ سے ایک چھوٹا امکان واقعہ ہے ، جس میں اوسط کی واپسی کے لئے موقع فراہم کیا گیا ہے۔
روایتی آر ایس آئی اوور خرید اوور فروخت سگنل کے برعکس ، آر ایس آئی = 50 کو ایک فاریکس فلٹرنگ شرط کے طور پر استعمال کیا جاتا ہے۔ آر ایس آئی <50 کے ساتھ زیادہ کرنے کی اجازت ہے ، آر ایس آئی> 50 کے ساتھ خالی کرنے کی اجازت ہے۔ اس ڈیزائن کی منطق واضح ہے: جب نسبتا weak کمزوری ہو تو خریدیں اور ردوبدل کا انتظار کریں ، جب نسبتا strong مضبوط ہو تو بیچیں اور ریڈیکشن کا انتظار کریں۔ اس فلٹرنگ میکانزم نے مخالف تجارت کے خطرے کو مؤثر طریقے سے کم کیا ہے ، سگنل کے معیار کو بہتر بنایا ہے۔
اسٹاپ 3x اے ٹی آر ، اسٹاپ 8x اے ٹی آر پر سیٹ کیا گیا ہے ، اور اس کا خطرہ منافع کا تناسب 1: 2.67 تک پہنچ گیا ہے۔ یہ ڈیزائن اعداد و شمار کے اراریج کی خصوصیات پر مبنی ہے: اوسط کی واپسی کا امکان زیادہ ہے ، لیکن اس کے لئے کافی غلطی کی گنجائش دی جانی چاہئے۔ 14 دورانیہ اے ٹی آر اس بات کو یقینی بناتا ہے کہ اسٹاپ نقصان کی سطح مارکیٹ میں اتار چڑھاؤ کی تبدیلیوں کے مطابق ڈھال سکے۔ تاریخی جائزہ سے پتہ چلتا ہے کہ یہ تناسب قیمتی دھات کے جوڑے کی تجارت میں مثبت متوقع منافع حاصل کرنے کے قابل ہے۔
اعدادوشمار کی ارورائزنگ کی حکمت عملی کا بہترین مظاہرہ افقی بورڈ کے اتار چڑھاؤ کے حالات میں ہوتا ہے ، کیونکہ اس وقت اوسط قیمت کی واپسی کی خصوصیت زیادہ نمایاں ہوتی ہے۔ ایک طرفہ رجحان کی مارکیٹ میں ، قیمتیں طویل عرصے تک اوسط سے ہٹ سکتی ہیں ، جس کی وجہ سے حکمت عملی کو واپسی کا زیادہ خطرہ درپیش ہوتا ہے۔ مارکیٹ میں اتار چڑھاؤ کی شرح معتدل ہے ، جب کوئی واضح یکطرفہ رجحان نہیں ہے۔ یہ بھی نوٹ کرنا ضروری ہے کہ قیمتی دھاتوں کی مارکیٹ میکرو معاشی عوامل سے زیادہ متاثر ہوتی ہے ، اور اہم واقعات کے دوران احتیاط سے استعمال کیا جانا چاہئے۔
تاریخی اعدادوشمار کے تعلقات مستقبل میں جاری رہنے کی ضمانت نہیں دیتے ہیں۔ سونے اور چاندی کی قیمتوں میں اضافے کی وجہ سے طلب اور رسد کی ساخت میں تبدیلی ، مانیٹری پالیسی میں اختلافات اور دیگر عوامل کی وجہ سے طویل مدتی انحراف ہوسکتا ہے۔ حکمت عملی میں مسلسل نقصان کا خطرہ موجود ہے ، خاص طور پر مارکیٹ کی ساخت میں تبدیلی کے دوران۔ خطرے کے انتظام کو سختی سے نافذ کرنے کی سفارش کی جاتی ہے ، ایک ہی تجارت کے خطرے کو اکاؤنٹ میں فنڈز کے 2٪ سے زیادہ نہیں کنٹرول کیا جاتا ہے ، اور حکمت عملی کی افادیت کی باقاعدگی سے جانچ پڑتال کی جاتی ہے۔
//@version=6
strategy("Stat Arb(xag & xau)")
// ══════════════════════════════════════════════════════════════
// BENCHMARK DATA
// ══════════════════════════════════════════════════════════════
float benchClose = request.security("XAG_USDT.swap", timeframe.period, close)
// ══════════════════════════════════════════════════════════════
// HELPER FUNCTIONS
// ══════════════════════════════════════════════════════════════
f_cov(float src1, float src2, int len) =>
ta.sma(src1 * src2, len) - ta.sma(src1, len) * ta.sma(src2, len)
f_var(float src, int len) =>
ta.sma(src * src, len) - math.pow(ta.sma(src, len), 2)
// ══════════════════════════════════════════════════════════════
// SPREAD ENGINE — NORMALIZED RATIO
// ══════════════════════════════════════════════════════════════
int lookback = 20
float pairSma = ta.sma(close, lookback)
float benchSma = ta.sma(benchClose, lookback)
float pairNorm = pairSma != 0 ? close / pairSma * 100.0 : 100.0
float benchNorm = benchSma != 0 ? benchClose / benchSma * 100.0 : 100.0
float modelRaw = benchNorm != 0 ? pairNorm / benchNorm : 1.0
float model = ta.ema(modelRaw, 3)
float zMean = ta.sma(model, lookback)
float zStd = ta.stdev(model, lookback)
float zScore = zStd != 0 ? (model - zMean) / zStd : 0.0
// ══════════════════════════════════════════════════════════════
// RSI FILTER — BELOW / ABOVE 50
// ══════════════════════════════════════════════════════════════
float rsiVal = ta.rsi(close, 14)
bool rsiLongOk = rsiVal < 50.0
bool rsiShortOk = rsiVal > 50.0
// ══════════════════════════════════════════════════════════════
// ENTRY SIGNALS
// Z crosses below -2 = long, above +2 = short
// ══════════════════════════════════════════════════════════════
bool enterLong = ta.crossunder(zScore, -2.0) and rsiLongOk
bool enterShort = ta.crossover(zScore, 2.0) and rsiShortOk
// ══════════════════════════════════════════════════════════════
// ATR STOP + TAKE PROFIT
// Stop: 8x ATR from entry (hardcoded)
// TP: 3x ATR from entry (hardcoded), stamped at entry
// ══════════════════════════════════════════════════════════════
float atrVal = ta.atr(14)
var float tpLevel = na
var float slLevel = na
var float entryPrice = na
bool isNewEntry = strategy.position_size != 0 and strategy.position_size[1] == 0
if isNewEntry
entryPrice := strategy.position_avg_price
if strategy.position_size > 0
tpLevel := entryPrice + atrVal * 3.0
slLevel := entryPrice - atrVal * 8.0
else
tpLevel := entryPrice - atrVal * 3.0
slLevel := entryPrice + atrVal * 8.0
if strategy.position_size == 0
tpLevel := na
slLevel := na
entryPrice := na
// ══════════════════════════════════════════════════════════════
// EXIT CONDITIONS — high/low for intrabar touch
// ══════════════════════════════════════════════════════════════
bool tpHitLong = strategy.position_size > 0 and not na(tpLevel) and high >= tpLevel
bool tpHitShort = strategy.position_size < 0 and not na(tpLevel) and low <= tpLevel
bool slHitLong = strategy.position_size > 0 and not na(slLevel) and low < slLevel
bool slHitShort = strategy.position_size < 0 and not na(slLevel) and high > slLevel
// ══════════════════════════════════════════════════════════════
// EXECUTION
// ══════════════════════════════════════════════════════════════
if enterLong
strategy.close("Short", comment="Flip")
strategy.entry("Long", strategy.long)
if enterShort
strategy.close("Long", comment="Flip")
strategy.entry("Short", strategy.short)
if tpHitLong
strategy.close("Long", comment="TP")
if tpHitShort
strategy.close("Short", comment="TP")
if slHitLong
strategy.close("Long", comment="SL")
if slHitShort
strategy.close("Short", comment="SL")
// ══════════════════════════════════════════════════════════════
// VISUALS
// ══════════════════════════════════════════════════════════════
hline( 2.0, "+2", color=color.new(color.red, 20), linestyle=hline.style_dashed)
hline(-2.0, "-2", color=color.new(color.teal, 20), linestyle=hline.style_dashed)
hline( 0.0, "Mid", color=color.gray, linestyle=hline.style_solid)
color zCol = zScore >= 0 ? color.new(color.red, 10) : color.new(color.teal, 10)
plot(zScore, title="Z Score", color=zCol, linewidth=3)
bgcolor(zScore > 2.0 ? color.new(color.red, 90) : na, title="Overbought Zone")
bgcolor(zScore < -2.0 ? color.new(color.teal, 90) : na, title="Oversold Zone")
bgcolor(strategy.position_size > 0 ? color.new(color.teal, 93) : na, title="In Long")
bgcolor(strategy.position_size < 0 ? color.new(color.red, 93) : na, title="In Short")
plotshape(enterLong, style=shape.triangleup, location=location.bottom, color=color.teal, size=size.small)
plotshape(enterShort, style=shape.triangledown, location=location.top, color=color.red, size=size.small)
plotshape(tpHitLong or tpHitShort, style=shape.flag, location=location.top, color=color.yellow, size=size.tiny, text="TP")
plotshape(slHitLong or slHitShort, style=shape.xcross, location=location.top, color=color.orange, size=size.tiny, text="SL")