وسائل لوڈ ہو رہے ہیں... لوڈنگ...

ملٹی فیکٹر رجسٹریشن اور متحرک قیمت بینڈ کوانٹیٹیٹو ٹریڈنگ سسٹم

مصنف:چاؤ ژانگ، تاریخ: 2025-01-17 15:57:53
ٹیگز:آر ایس آئیاے ٹی آربیٹاایس ایم اے

 Multi-Factor Regression and Dynamic Price Band Quantitative Trading System

جائزہ

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

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

حکمت عملی میں مندرجہ ذیل بنیادی اجزاء شامل ہیں: ریگریشن پیشن گوئی ماڈیول: قیمتوں کی پیش گوئی کے لئے کثیر عنصر لکیری رجعت کا استعمال کرتا ہے۔ عوامل میں بی ٹی سی کا تسلط ، حجم ، قیمت میں تاخیر اور تعامل کی شرائط شامل ہیں۔ بیٹا گتانک قیمت پر ہر عنصر کے اثرات کی پیمائش کرتے ہیں۔ متحرک قیمت بینڈ: اوور بک / اوور سیل حالات کی نشاندہی کرنے کے لئے پیش گوئی کی قیمت اور بقایا معیاری انحراف کی بنیاد پر اوپری اور نچلی قیمت بینڈ تشکیل دیتا ہے۔ 3. سگنل جنریشن: جب قیمت اوور بیچنے والے آر ایس آئی کے ساتھ نچلے بینڈ سے نیچے ہوتی ہے تو لمبے سگنل پیدا کرتا ہے۔ جب قیمت اوور خریدنے والے آر ایس آئی کے ساتھ اوپری بینڈ سے اوپر ہوتی ہے تو مختصر سگنل۔ رسک مینجمنٹ: متعدد حفاظتی طریقہ کار جن میں آؤٹ لیئر فلٹرنگ (زیڈ اسکور طریقہ) ، سٹاپ لوس / ٹیک منافع اور اے ٹی آر پر مبنی ٹریلنگ اسٹاپ شامل ہیں۔ متحرک پوزیشننگ: اے ٹی آر اور پیش سیٹ کردہ رسک ریشو کی بنیاد پر پوزیشن سائز کو متحرک طور پر ایڈجسٹ کرتا ہے۔

حکمت عملی کے فوائد

  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")

متعلقہ

مزید