
ZSCORE, RSI, ATR, SMA, EMA
এটি কোন সাধারণ ট্রেন্ড ট্র্যাকিং কৌশল নয়। XAG/XAU পরিসংখ্যানগত আরবিট্রেশন কৌশলটি একটি মূল অনুমানের উপর ভিত্তি করে তৈরি করা হয়েছেঃ স্বর্ণ ও রূপা দামের দীর্ঘমেয়াদী গড় মূল্যের রিটার্ন সম্পর্ক রয়েছে। যখন Z-Score ± 2 স্ট্যান্ডার্ড বিভাজক অতিক্রম করে, তখন দামগুলি পরিসংখ্যানগতভাবে সর্বাধিক মানের কাছাকাছি চলে যায়, তখন একটি রিটার্নের সুযোগ ধরা যায়। রিটার্নিং ডেটা দেখায় যে এই পরিসংখ্যানগত আরবিট্রেশন পদ্ধতিটি মূল্যবান ধাতব বাজারে একটি স্পষ্ট ঝুঁকি-সংশোধিত উপার্জনের সুবিধা রয়েছে।
কৌশলটির কেন্দ্রবিন্দু হল স্ট্যান্ডার্ডাইজড প্রাইস রেট মডেল তৈরি করা। XAG এবং XAU এর জন্য 20 চক্রের এসএমএ দ্বারা স্ট্যান্ডার্ডাইজড, তারপরে রেট গণনা করা হয় এবং 3 চক্রের ইএমএ দ্বারা মসৃণ করা হয়। এই পদ্ধতিটি সহজ দামের অনুপাতের চেয়ে বেশি স্থিতিশীল এবং স্বল্পমেয়াদী গোলমালকে কার্যকরভাবে ফিল্টার করে। যখন স্ট্যান্ডার্ডাইজড রেট এর জেড-স্কোর ± 2 এর বাইরে থাকে, যা দেখায় যে বর্তমান দামটি historicalতিহাসিক গড় মান থেকে 2 টিরও বেশি মানের পার্থক্যের সাথে বিভক্ত, এটি পরিসংখ্যানগতভাবে একটি ছোট সম্ভাবনা ইভেন্ট, যা গড় মানের প্রত্যাবর্তনের জন্য একটি সুযোগ দেয়।
ঐতিহ্যগত আরএসআই ওভারবই ওভারসেল সংকেতের বিপরীতে, এখানে আরএসআই = 50 ব্যবহার করা হয় একটি ফাঁকা ফিল্টার শর্ত হিসাবে। আরএসআই <50 হলে অতিরিক্ত করার অনুমতি দেওয়া হয়, আরএসআই> 50 হলে খালি করার অনুমতি দেওয়া হয়। এই নকশা লজিকটি পরিষ্কারঃ যখন তুলনামূলকভাবে দুর্বল হয় তখন কিনুন এবং প্রত্যাহারের জন্য অপেক্ষা করুন, যখন তুলনামূলকভাবে শক্তিশালী হয় তখন বিক্রি করুন। এই ফিল্টারিং প্রক্রিয়াটি কার্যকরভাবে প্রতিকূল ব্যবসায়ের ঝুঁকি হ্রাস করে এবং সংকেতের গুণমান উন্নত করে।
স্টপ-অফ সেটিংটি 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")