মাল্টি-ফ্যাক্টর রিগ্রেশন এবং গতিশীল মূল্য কৌশল সহ পরিমাণগত ট্রেডিং সিস্টেম

RSI ATR BETA SMA
সৃষ্টির তারিখ: 2025-01-17 15:57:53 অবশেষে সংশোধন করুন: 2025-01-17 15:57:53
অনুলিপি: 0 ক্লিকের সংখ্যা: 373
1
ফোকাস
1617
অনুসারী

মাল্টি-ফ্যাক্টর রিগ্রেশন এবং গতিশীল মূল্য কৌশল সহ পরিমাণগত ট্রেডিং সিস্টেম

ওভারভিউ

এই কৌশলটি একটি পরিমাণগত ট্রেডিং সিস্টেম যা বহু-ফ্যাক্টর রিগ্রেশন এবং গতিশীল মূল্য ব্যান্ডের উপর ভিত্তি করে। মূল যুক্তি হল একটি বহু-ফ্যাক্টর রিগ্রেশন মডেলের মাধ্যমে মূল্য প্রবণতা পূর্বাভাস দেওয়া, যার মাধ্যমে বিটিসি আধিপত্য, ট্রেডিং ভলিউম এবং পিছিয়ে থাকা দামের মতো একাধিক বাজার কারণকে একত্রিত করে সংকেত উৎপাদনের জন্য উচ্চ এবং নিম্ন মূল্য ব্যান্ড তৈরি করা হয়। এই কৌশলটি আউটলায়ার ফিল্টারিং, ডাইনামিক পজিশন ম্যানেজমেন্ট এবং মুভিং স্টপ লস এর মতো একাধিক ঝুঁকি ব্যবস্থাপনা মডিউলকে একীভূত করে। এটি একটি ব্যাপক এবং শক্তিশালী ট্রেডিং সিস্টেম।

কৌশল নীতি

কৌশলটি প্রধানত নিম্নলিখিত মূল উপাদানগুলি অন্তর্ভুক্ত করে:

  1. রিগ্রেশন পূর্বাভাস মডিউল: দামের পূর্বাভাস দিতে মাল্টি-ফ্যাক্টর লিনিয়ার রিগ্রেশন মডেল ব্যবহার করুন। কারণগুলির মধ্যে রয়েছে BTC আধিপত্য, লেনদেনের পরিমাণ, দামের ব্যবধানের শর্তাবলী, মিথস্ক্রিয়া শর্তাবলী ইত্যাদি। মূল্যের উপর এর প্রভাব পরিমাপ করতে প্রতিটি ফ্যাক্টরের বিটা সহগ গণনা করুন।
  2. ডায়নামিক প্রাইস ব্যান্ড: অতিরিক্ত কেনা এবং বেশি বিক্রি হওয়া শনাক্ত করতে পূর্বাভাসিত মূল্য এবং অবশিষ্ট মান বিচ্যুতির উপর ভিত্তি করে উপরের এবং নিম্ন মূল্যের ব্যান্ডগুলি তৈরি করুন।
  3. সিগন্যাল জেনারেশন: যখন দাম নিচের ব্যান্ডের মাধ্যমে ভেঙ্গে যায় এবং RSI বেশি বিক্রি হয়, তখন একটা লম্বা সিগন্যাল তৈরি হয় যখন দাম উপরের ব্যান্ডের মধ্য দিয়ে ভেঙ্গে যায় এবং RSI বেশি কেনা হয়, একটি ছোট সংকেত তৈরি হয়।
  4. ঝুঁকি ব্যবস্থাপনা: একাধিক সুরক্ষা ব্যবস্থা অন্তর্ভুক্ত করে যেমন আউটলিয়ার ফিল্টারিং (জেড স্কোর পদ্ধতি), স্টপ লস এবং টেক প্রফিট, এটিআর ট্রেলিং স্টপ লস ইত্যাদি।
  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")