
ZSCORE, RSI, ATR, SMA, EMA
यह कोई सामान्य प्रवृत्ति-अनुवर्ती रणनीति नहीं है। XAG/XAU सांख्यिकीय सट्टा रणनीति एक मुख्य धारणा पर आधारित हैः सोने और चांदी की कीमतों में एक दीर्घकालिक औसत मूल्य वापसी संबंध है। जब Z-स्कोर ± 2 मानक अंतर को तोड़ता है, तो कीमतें एक सांख्यिकीय अर्थ में चरम पर पहुंच जाती हैं, और फिर वापसी के अवसरों को पकड़ने के लिए खेलती हैं। रिट्रेसिंग डेटा से पता चलता है कि इस सांख्यिकीय सट्टा रणनीति के पास कीमती धातुओं के बाजार में स्पष्ट जोखिम-समायोजित लाभ लाभ है।
रणनीति का मूल यह है कि एक मानकीकृत मूल्य अनुपात मॉडल का निर्माण किया जाए। XAG और XAU को क्रमशः 20 चक्र SMA के माध्यम से मानकीकृत किया जाता है, फिर अनुपात की गणना की जाती है और 3 चक्र ईएमए के साथ चिकनी की जाती है। यह प्रक्रिया सरल मूल्य अनुपात की तुलना में अधिक स्थिर है, जो अल्पकालिक शोर को प्रभावी ढंग से फ़िल्टर करती है। जब मानकीकृत अनुपात का Z-स्कोर ± 2 के दायरे से अधिक होता है, तो यह दर्शाता है कि वर्तमान मूल्य ऐतिहासिक औसत से 2 मानक अंतर से अधिक है, जो सांख्यिकीय रूप से एक छोटी संभावना घटना है, जो औसत वापसी के लिए अवसर प्रदान करता है।
पारंपरिक आरएसआई ओवरबॉट ओवरबॉट सिग्नल के विपरीत, आरएसआई = 50 को एक बहु-हॉल फ़िल्टरिंग शर्त के रूप में उपयोग किया जाता है। आरएसआई <50 अधिक करने की अनुमति देता है, आरएसआई> 50 खाली करने की अनुमति देता है। इस डिजाइन तर्क स्पष्ट हैः जब अपेक्षाकृत कमजोर होता है तो खरीदें और पलटाव की प्रतीक्षा करें, जब अपेक्षाकृत मजबूत होता है तो बेचें और पलटाव की प्रतीक्षा करें। यह फ़िल्टरिंग तंत्र प्रभावी रूप से विपरीत व्यापार के जोखिम को कम करता है और संकेत की गुणवत्ता में सुधार करता है।
स्टॉप 3 गुना एटीआर पर सेट है, 8 गुना एटीआर पर रोक है, और लाभ-जोखिम अनुपात 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")