مقداری تجارتی نظام جو ملٹی فیکٹر ریگریشن اور ڈائنامک پرائس بینڈ حکمت عملی پر مبنی ہے۔

RSI ATR BETA SMA
تخلیق کی تاریخ: 2025-01-17 15:57:53 آخر میں ترمیم کریں: 2025-01-17 15:57:53
کاپی: 0 کلکس کی تعداد: 373
1
پر توجہ دیں
1617
پیروکار

مقداری تجارتی نظام جو ملٹی فیکٹر ریگریشن اور ڈائنامک پرائس بینڈ حکمت عملی پر مبنی ہے۔

جائزہ

یہ حکمت عملی ایک مقداری تجارتی نظام ہے جو ملٹی فیکٹر ریگریشن اور ڈائنامک پرائس بینڈ پر مبنی ہے۔ بنیادی منطق یہ ہے کہ ایک ملٹی فیکٹر ریگریشن ماڈل کے ذریعے قیمت کے رجحانات کی پیشین گوئی کی جائے، جس میں متعدد مارکیٹ عوامل جیسے کہ BTC غلبہ، تجارتی حجم، اور سستی قیمتوں کو ملا کر سگنل جنریشن کے لیے اوپری اور نچلی قیمت کے بینڈز کی تعمیر کی جائے۔ یہ حکمت عملی ایک سے زیادہ رسک مینجمنٹ ماڈیولز کو مربوط کرتی ہے جیسے آؤٹ لیئر فلٹرنگ، ڈائنامک پوزیشن مینجمنٹ، اور موونگ سٹاپ نقصان یہ ایک جامع اور مضبوط تجارتی نظام ہے۔

حکمت عملی کا اصول

حکمت عملی میں بنیادی طور پر درج ذیل بنیادی اجزاء شامل ہیں:

  1. ریگریشن پیشن گوئی ماڈیول: قیمتوں کی پیشن گوئی کرنے کے لیے ملٹی فیکٹر لکیری ریگریشن ماڈل استعمال کریں۔ عوامل میں بی ٹی سی کا غلبہ، تجارتی حجم، قیمت میں وقفہ کی شرائط، تعامل کی شرائط وغیرہ شامل ہیں۔ قیمت پر اس کے اثرات کی پیمائش کرنے کے لیے ہر فیکٹر کے بیٹا کوفیینٹ کا حساب لگایا جاتا ہے۔
  2. ڈائنامک پرائس بینڈز: زیادہ خریدی ہوئی اور زیادہ فروخت ہونے والی قیمتوں کی نشاندہی کرنے کے لیے پیش گوئی شدہ قیمتوں اور بقایا معیاری انحراف کی بنیاد پر اوپری اور نچلے قیمت کے بینڈز بنائیں۔
  3. سگنل جنریشن: جب قیمت نچلے بینڈ سے ٹوٹ جاتی ہے اور RSI زیادہ فروخت ہوتی ہے تو ایک مختصر سگنل پیدا ہوتا ہے جب قیمت اوپری بینڈ سے ٹوٹ جاتی ہے اور RSI زیادہ خریدی جاتی ہے۔
  4. رسک مینجمنٹ: بشمول آؤٹ لیئر فلٹرنگ (Z سکور کا طریقہ)، سٹاپ نقصان اور ٹیک پرافٹ، اے ٹی آر موونگ سٹاپ نقصان اور دیگر متعدد تحفظ کے طریقہ کار۔
  5. متحرک پوزیشن: ATR اور پیشگی خطرے کے تناسب کی بنیاد پر ابتدائی پوزیشن کے سائز کو متحرک طور پر ایڈجسٹ کریں۔

اسٹریٹجک فوائد

  1. ملٹی فیکٹر انٹیگریشن: ایک جامع مارکیٹ کا تناظر فراہم کرنے کے لیے مارکیٹ کے متعدد عوامل پر جامع غور کریں۔
  2. مضبوط موافقت: پرائس بینڈ کو مارکیٹ کے اتار چڑھاو کے مطابق متحرک طور پر ایڈجسٹ کیا جائے گا تاکہ مارکیٹ کے مختلف ماحول کے مطابق ہو سکے۔
  3. کامل رسک کنٹرول: ملٹی لیول رسک مینجمنٹ فنڈز کی حفاظت کو یقینی بناتا ہے۔
  4. لچکدار اور قابل ترتیب: پیرامیٹرز کی ایک بڑی تعداد سایڈست ہے، مارکیٹ کی مختلف خصوصیات کے مطابق بہتر بنانا آسان ہے۔
  5. اعلی سگنل کی وشوسنییتا: متعدد فلٹرنگ میکانزم سگنل کے معیار کو بہتر بناتے ہیں۔

اسٹریٹجک رسک

  1. ماڈل کا خطرہ: ریگریشن ماڈل تاریخی اعداد و شمار پر انحصار کرتے ہیں اور مارکیٹ میں زبردست تبدیلی آنے پر ناکام ہو سکتے ہیں۔
  2. پیرامیٹر کی حساسیت: بہت سے پیرامیٹرز کو احتیاط سے ٹیون کرنے کی ضرورت ہے، اور پیرامیٹر کی غلط ترتیب حکمت عملی کی کارکردگی کو متاثر کرے گی۔
  3. کمپیوٹیشنل پیچیدگی: ملٹی فیکٹر کیلکولیشن زیادہ پیچیدہ ہوتے ہیں اور حقیقی وقت کی کارکردگی کو متاثر کر سکتے ہیں۔
  4. مارکیٹ کے ماحول پر انحصار: غیر مستحکم مارکیٹوں میں رجحان ساز بازاروں کے مقابلے میں بہتر کارکردگی کا مظاہرہ کر سکتا ہے۔

حکمت عملی کی اصلاح کی سمت

  1. فیکٹر سلیکشن آپٹیمائزیشن: مارکیٹ کے مزید عوامل متعارف کرائے جا سکتے ہیں، جیسے مارکیٹ کے جذبات کے اشارے، آن چین ڈیٹا وغیرہ۔
  2. متحرک پیرامیٹر ایڈجسٹمنٹ: حکمت عملی کی موافقت کو بہتر بنانے کے لئے انکولی پیرامیٹر ایڈجسٹمنٹ میکانزم تیار کریں۔
  3. مشین لرننگ میں اضافہ: پیشین گوئی کے ماڈل کو بہتر بنانے کے لیے مشین لرننگ کے طریقے متعارف کروائیں۔
  4. سگنل فلٹرنگ میں اضافہ: درستگی کو بہتر بنانے کے لیے سگنل فلٹرنگ کے مزید حالات تیار کریں۔
  5. مشترکہ حکمت عملی کا انضمام: استحکام کو بہتر بنانے کے لیے دیگر حکمت عملیوں کے ساتھ مل کر استعمال کریں۔

خلاصہ کریں۔

یہ حکمت عملی ٹھوس تھیوری اور بہترین ڈیزائن کے ساتھ ایک مقداری تجارتی نظام ہے۔ ملٹی فیکٹر ریگریشن ماڈلز کے ذریعے قیمتوں کی پیشن گوئی کریں، ڈائنامک پرائس بینڈز کی بنیاد پر تجارتی سگنل تیار کریں، اور رسک مینجمنٹ کے ایک جامع طریقہ کار سے لیس ہوں۔ حکمت عملی انتہائی قابل موافق اور قابل ترتیب ہے اور مارکیٹ کے مختلف ماحول کے لیے موزوں ہے۔ مسلسل اصلاح اور بہتری کے ذریعے، اس حکمت عملی سے حقیقی تجارت میں مستحکم منافع حاصل کرنے کی امید ہے۔

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2024-12-17 00:00:00
end: 2025-01-16 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
strategy(  title           = "CorrAlgoX", overlay         = true,pyramiding      = 1, initial_capital = 10000, default_qty_type= strategy.percent_of_equity, default_qty_value=200)

//====================================================================
//=========================== GİRİŞLER ================================
//====================================================================

// --- (1) REGRESYON VE OUTLIER AYARLARI
int   lengthReg         = input.int(300, "Regression Window",   minval=50)
bool  useOutlierFilter  = input.bool(false, "Z-skoru ile Outlier Filtrele")

// --- (2) FİYAT GECİKMELERİ
bool  usePriceLag2      = input.bool(false, "2 Bar Gecikmeli Fiyatı Kullan")

// --- (3) STOP-LOSS & TAKE-PROFIT
float stopLossPerc      = input.float(3.0,  "Stop Loss (%)",   step=0.1)
float takeProfitPerc    = input.float(5.0,  "Take Profit (%)", step=0.1)

// --- (4) REZİDÜEL STD BANTI
int   lengthForStd      = input.int(50, "StdDev Length (residual)", minval=2)
float stdevFactor       = input.float(2.0, "Stdev Factor", step=0.1)

// --- (5) RSI FİLTRESİ
bool  useRsiFilter      = input.bool(true, "RSI Filtresi Kullan")
int   rsiLen            = input.int(14, "RSI Length",   minval=1)
float rsiOB             = input.float(70, "RSI Overbought", step=1)
float rsiOS             = input.float(30, "RSI Oversold",   step=1)

// --- (6) TRAILING STOP
bool  useTrailingStop   = input.bool(false, "ATR Tabanlı Trailing Stop")
int   atrLen            = input.int(14, "ATR Length",   minval=1)
float trailMult         = input.float(1.0, "ATR multiplier", step=0.1)

// --- (7) DİNAMİK POZİSYON BÜYÜKLÜĞÜ (ATR tabanlı)
bool  useDynamicPos     = input.bool(false, "Dinamik Pozisyon Büyüklüğü Kullan")
float capitalRiskedPerc = input.float(1.0, "Sermaye Risk Yüzdesi", step=0.1, tooltip="Her işlemde risk alınacak sermaye yüzdesi")

// --- (8) ETKİLEŞİM VE LOG(HACİM) KULLANIMI
bool  useSynergyTerm    = input.bool(true, "BTC.D * Hacim Etkileşim Terimi")
bool  useLogVolume      = input.bool(true, "Hacmi Logaritmik Kullan")

//====================================================================
//======================= VERİLERİ AL & HAZIRLA =======================
//====================================================================

// Mevcut enstrüman fiyatı
float realClose = close

// BTC Dominance (aynı TF)
float btcDom    = request.security("SWAP", timeframe.period, close)

// Hacim
float vol       = volume

// Gecikmeli fiyatlar
float priceLag1 = close[1]
float priceLag2 = close[2]  // (isteğe bağlı)

//----------------- Outlier Filtrelemesi (Z-Skoru) ------------------//
float priceMean  = ta.sma(realClose, lengthReg)
float priceStdev = ta.stdev(realClose, lengthReg)

float zScore     = (priceStdev != 0) ? (realClose - priceMean) / priceStdev : 0
bool  isOutlier  = math.abs(zScore) > 3.0

float filteredClose = (useOutlierFilter and isOutlier) ? na : realClose

// Fiyatın stdev'i (filtrelenmiş)
float fCloseStdev = ta.stdev(filteredClose, lengthReg)

//====================================================================
//=============== ORTALAMA, STDEV, KORELASYON HESAPLARI ==============
//====================================================================

// BTC.D
float btcDomMean    = ta.sma(btcDom, lengthReg)
float btcDomStdev   = ta.stdev(btcDom, lengthReg)
float corrBtcDom    = ta.correlation(btcDom, filteredClose, lengthReg)

// Hacim
float volMean       = ta.sma(vol, lengthReg)
float volStdev      = ta.stdev(vol, lengthReg)
float corrVol       = ta.correlation(vol, filteredClose, lengthReg)

// Fiyat Lag1
float plag1Mean     = ta.sma(priceLag1, lengthReg)
float plag1Stdev    = ta.stdev(priceLag1, lengthReg)
float corrPLag1     = ta.correlation(priceLag1, filteredClose, lengthReg)

// Fiyat Lag2 (isteğe bağlı)
float plag2Mean     = ta.sma(priceLag2, lengthReg)
float plag2Stdev    = ta.stdev(priceLag2, lengthReg)
float corrPLag2     = ta.correlation(priceLag2, filteredClose, lengthReg)

// BTC.D * Hacim (synergyTerm)
float synergyTerm   = btcDom * vol
float synergyMean   = ta.sma(synergyTerm, lengthReg)
float synergyStdev  = ta.stdev(synergyTerm, lengthReg)
float corrSynergy   = ta.correlation(synergyTerm, filteredClose, lengthReg)

// Log(Hacim)
float logVolume     = math.log(vol + 1.0)
float logVolMean    = ta.sma(logVolume, lengthReg)
float logVolStdev   = ta.stdev(logVolume, lengthReg)
float corrLogVol    = ta.correlation(logVolume, filteredClose, lengthReg)

//====================================================================
//===================== FONKSIYON: BETA HESAPLAMA =====================
//====================================================================
// Pine Script'te fonksiyonlar şöyle tanımlanır (tip bildirmeyiz):
getBeta(corrVal, stdevX) =>
    (stdevX != 0 and not na(corrVal) and fCloseStdev != 0)? corrVal * (fCloseStdev / stdevX)  : 0.0

//====================================================================
//======================== BETA KATSAYILARI ===========================
//====================================================================

// BTC Dominance
float betaBtcDom  = getBeta(corrBtcDom,  btcDomStdev)
// Hacim
float betaVol     = getBeta(corrVol,     volStdev)
// Fiyat Lag1
float betaPLag1   = getBeta(corrPLag1,   plag1Stdev)
// Fiyat Lag2
float betaPLag2   = getBeta(corrPLag2,   plag2Stdev)
// synergy
float betaSynergy = getBeta(corrSynergy, synergyStdev)
// logVol
float betaLogVol  = getBeta(corrLogVol,  logVolStdev)

//====================================================================
//===================== TAHMİNİ FİYAT OLUŞTURMA ======================
//====================================================================

float alpha  = priceMean
bool canCalc = not na(filteredClose) and not na(priceMean)

float predictedPrice = na
if canCalc
    // Farklar
    float dBtcDom   = (btcDom - btcDomMean)
    float dVol      = (vol    - volMean)
    float dPLag1    = (priceLag1 - plag1Mean)
    float dPLag2    = (priceLag2 - plag2Mean)
    float dSynergy  = (synergyTerm - synergyMean)
    float dLogVol   = (logVolume   - logVolMean)

    float sumBeta   = 0.0
    sumBeta += betaBtcDom  * dBtcDom
    sumBeta += betaVol     * dVol
    sumBeta += betaPLag1   * dPLag1

    if usePriceLag2
        sumBeta += betaPLag2 * dPLag2

    if useSynergyTerm
        sumBeta += betaSynergy * dSynergy

    if useLogVolume
        sumBeta += betaLogVol * dLogVol

    predictedPrice := alpha + sumBeta

//====================================================================
//======================= REZİDÜEL & BANT ============================
//====================================================================

float residual   = filteredClose - predictedPrice
float residStdev = ta.stdev(residual, lengthForStd)

float upperBand  = predictedPrice + stdevFactor * residStdev
float lowerBand  = predictedPrice - stdevFactor * residStdev

//====================================================================
//========================= SİNYAL ÜRETİMİ ===========================
//====================================================================

bool longSignal  = (realClose < lowerBand)
bool shortSignal = (realClose > upperBand)

//------------------ RSI Filtresi (opsiyonel) -----------------------//
float rsiVal       = ta.rsi(realClose, rsiLen)
bool rsiOversold   = (rsiVal < rsiOS)
bool rsiOverbought = (rsiVal > rsiOB)

if useRsiFilter
    longSignal  := longSignal  and rsiOversold
    shortSignal := shortSignal and rsiOverbought

//====================================================================
//=============== DİNAMİK POZİSYON & GİRİŞ/ÇIKIŞ EMİRLERİ ============
//====================================================================

float myAtr      = ta.atr(atrLen)
float positionSize = na

if useDynamicPos
    float capitalRisked   = strategy.equity * (capitalRiskedPerc / 100.0)
    float riskPerUnit     = (stopLossPerc/100.0) * myAtr
    positionSize          := (riskPerUnit != 0.0) ? (capitalRisked / riskPerUnit) : na

// Long
if longSignal
    if useDynamicPos and not na(positionSize)
        strategy.entry("Long", strategy.long, qty=positionSize)
    else
        strategy.entry("Long", strategy.long)

// Short
if shortSignal
    if useDynamicPos and not na(positionSize)
        strategy.entry("Short", strategy.short, qty=positionSize)
    else
        strategy.entry("Short", strategy.short)

// Stop-Loss & Take-Profit
if strategy.position_size > 0
    strategy.exit( "Long Exit", "Long",stop  = strategy.position_avg_price * (1 - stopLossPerc/100),  limit = strategy.position_avg_price * (1 + takeProfitPerc/100))

if strategy.position_size < 0
    strategy.exit("Short Exit", "Short", stop  = strategy.position_avg_price * (1 + stopLossPerc/100),limit = strategy.position_avg_price * (1 - takeProfitPerc/100))

//------------------ TRAILING STOP (opsiyonel) ----------------------//
if useTrailingStop
    if strategy.position_size > 0
        strategy.exit(  "Long Exit TS", "Long",  trail_points = myAtr * trailMult,  trail_offset = myAtr * trailMult )
    if strategy.position_size < 0
        strategy.exit( "Short Exit TS", "Short", trail_points = myAtr * trailMult, trail_offset = myAtr * trailMult)

//====================================================================
//======================== GRAFİK ÇİZİMLER ===========================
//====================================================================
plot(realClose,      color=color.white,  linewidth=1, title="Fiyat")
plot(predictedPrice, color=color.yellow, linewidth=2, title="PredictedPrice")
plot(upperBand,      color=color.red,    linewidth=1, title="Üst Band")
plot(lowerBand,      color=color.lime,   linewidth=1, title="Alt Band")

plotshape( useOutlierFilter and isOutlier, style=shape.circle, color=color.red, size=size.tiny, location=location.abovebar, title="Outlier", text="Outlier")