تجارتی حکمت عملی کے بعد ملٹی کور ریگریشن متحرک رجحان

DR MKR ATR SMA MA200 TP SL
تخلیق کی تاریخ: 2025-02-24 09:27:50 آخر میں ترمیم کریں: 2025-02-24 09:27:50
کاپی: 0 کلکس کی تعداد: 805
2
پر توجہ دیں
319
پیروکار

تجارتی حکمت عملی کے بعد ملٹی کور ریگریشن متحرک رجحان تجارتی حکمت عملی کے بعد ملٹی کور ریگریشن متحرک رجحان

جائزہ

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

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

اس حکمت عملی کے چار بنیادی حصے ہیں:

  1. متحرک رجحان ری ایکٹر ((DR): اے ٹی آر اور ایس ایم اے کا استعمال کرتے ہوئے متحرک سپورٹ / مزاحمتی بینڈ کی تعمیر ، قیمت کی پوزیشن کے مطابق رجحان کی سمت کا فیصلہ کریں۔ نیچے کی طرف بڑھنے والے رجحان میں حمایت کے طور پر استعمال کریں ، نیچے کی طرف بڑھنے والے رجحان میں مزاحمت کے طور پر استعمال کریں۔

  2. ملٹی کور ریگریشن ((MKR): قیمت کی واپسی کو گاسس کور اور ایپینچنیکوف کور کے ساتھ مل کر ، ایڈجسٹ وزن والے پیرامیٹرز کے ذریعہ دونوں بنیادی افعال کے ایک بہتر مجموعہ کو انجام دینا۔ اس طریقہ کار سے قیمتوں کی نقل و حرکت کی متحرک خصوصیات کو بہتر طور پر گرفت میں لیا جاسکتا ہے۔

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

  4. فنڈ مینجمنٹ سسٹم: تین گنا منافع کا ہدف ((1.5٪ ، 3.0٪ ، 4.5٪) اور 1٪ اسٹاپ نقصان کی ترتیب ، 33٪ -33٪ -34٪ تناسب پر پوزیشنوں کو تقسیم کریں ، منافع کو زیادہ سے زیادہ کرنے کے لئے خطرے کو کنٹرول کریں۔

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

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

اسٹریٹجک رسک

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

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

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

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2024-02-25 00:00:00
end: 2024-08-07 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("DR + Multi Kernel Regression + Signals + MA200 with TP/SL (Optimized)", overlay=true, shorttitle="DR+MKR+Signals+MA200_TP_SL_Opt", pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// =====================================================================
// PARTEA 1: Dynamic Reactor – linie unică colorată în funcție de trend
// =====================================================================
// Parametri pentru Dynamic Reactor
atrLength  = input.int(14, title="Lungimea ATR", minval=1)
smaLength  = input.int(20, title="Lungimea SMA", minval=1)
multiplier = input.float(1.5, title="Multiplicator ATR", minval=0.1, step=0.1)
// Calculăm ATR și SMA
atrValue = ta.atr(atrLength)
smaValue = ta.sma(close, smaLength)
// Benzile de bază
basicUpper = smaValue + atrValue * multiplier
basicLower = smaValue - atrValue * multiplier
// Calculăm benzile finale (similar cu SuperTrend)
var float finalUpper = basicUpper
var float finalLower = basicLower
if bar_index > 0
    finalUpper := close[1] > finalUpper[1] ? math.max(basicUpper, finalUpper[1]) : basicUpper
    finalLower := close[1] < finalLower[1] ? math.min(basicLower, finalLower[1]) : basicLower
// Determinăm trendul curent:
// - Dacă prețul curent este peste finalUpper din bara anterioară → uptrend (1)
// - Dacă prețul este sub finalLower din bara anterioară → downtrend (-1)
// - Altfel, păstrăm trendul precedent.
var int trend = 1
if bar_index > 0
    trend := close > finalUpper[1] ? 1 : close < finalLower[1] ? -1 : nz(trend[1], 1)
// Linia Dynamic Reactor:
// - În uptrend se utilizează finalLower (nivel de suport)
// - În downtrend se utilizează finalUpper (nivel de rezistență)
drLine = trend == 1 ? finalLower : finalUpper
// Plotăm linia Dynamic Reactor
p_dr = plot(drLine, color=trend == 1 ? color.green : color.red, title="Dynamic Reactor", linewidth=2)


// =====================================================================
// PARTEA 2: Multi Kernel Regression
// =====================================================================
// Parametri pentru regresia cu kernel
regLength = input.int(50, title="Perioada regresiei", minval=1)
h1        = input.float(10.0, title="Bandă Gaussiană (h1)", minval=0.1)
h2        = input.float(10.0, title="Bandă Epanechnikov (h2)", minval=0.1)
alpha     = input.float(0.5, title="Pondere Kernel Gaussian (0-1)", minval=0, maxval=1)
// Funcție: regresie cu kernel Gaussian
f_gaussian_regression(bw) =>
    num = 0.0
    den = 0.0
    for i = 0 to regLength - 1
        // Kernel Gaussian: K(x) = exp(-0.5 * (i/bw)^2)
        weight = math.exp(-0.5 * math.pow(i / bw, 2))
        num += close[i] * weight
        den += weight
    num / (den == 0 ? 1 : den)
// Funcție: regresie cu kernel Epanechnikov
f_epanechnikov_regression(bw) =>
    num = 0.0
    den = 0.0
    for i = 0 to regLength - 1
        ratio = i / bw
        // Kernel Epanechnikov: K(u) = 1 - u^2 pentru |u| <= 1, altfel 0
        weight = math.abs(ratio) <= 1 ? (1 - math.pow(ratio, 2)) : 0
        num += close[i] * weight
        den += weight
    num / (den == 0 ? 1 : den)
// Calculăm regresiile pentru fiecare kernel
regGauss = f_gaussian_regression(h1)
regEpan  = f_epanechnikov_regression(h2)
// Combinăm rezultatele celor două regresii
multiKernelRegression = alpha * regGauss + (1 - alpha) * regEpan
// Plotăm linia Multi Kernel Regression
p_mkr = plot(multiKernelRegression, color=trend == 1 ? color.green : color.red, title="Multi Kernel Regression", linewidth=2)

// Adăugăm ceata (fill) între Dynamic Reactor și Multi Kernel Regression
fillColor = trend == 1 ? color.new(color.green, 80) : color.new(color.red, 80)
fill(p_dr, p_mkr, color=fillColor, title="Trend Fill")


// =====================================================================
// PARTEA 2.1: MA 200 și evidențierea consolidării
// =====================================================================
// Calculăm MA 200 pentru trend pe termen lung
ma200 = ta.sma(close, 200)
p_ma200 = plot(ma200, color=color.blue, title="MA 200", linewidth=2)
// Parametru pentru detectarea consolidării (cât de aproape trebuie să fie prețul de MA200, în %)
consolidationRange = input.float(1.0, title="Consolidation Range (%)", minval=0.1, step=0.1)
// Determinăm dacă suntem într-o fază de consolidare (prețul este în interiorul unui interval mic în jurul MA200)
isConsolidation = (math.abs(close - ma200) / ma200 * 100) < consolidationRange
// Colorăm fundalul graficului cu un gri translucid atunci când e consolidare
bgcolor(isConsolidation ? color.new(color.gray, 90) : na, title="Consolidation BG")


// =====================================================================
// PARTEA 3: Semnale Buy și Sell
// =====================================================================
// Semnale de intrare:
// - Buy Signal: când linia Multi Kernel Regression trece peste linia Dynamic Reactor
// - Sell Signal: când linia Multi Kernel Regression trece sub linia Dynamic Reactor
buySignal  = ta.crossover(multiKernelRegression, drLine)
sellSignal = ta.crossunder(multiKernelRegression, drLine)

// Plotăm semnalele pe grafic
plotshape(buySignal, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny, title="Buy Signal")
plotshape(sellSignal, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, title="Sell Signal")

// Setăm condiții de alertă
alertcondition(buySignal, title="Buy Alert", message="Buy Signal: Kernel is above Dynamic Reactor")
alertcondition(sellSignal, title="Sell Alert", message="Sell Signal: Kernel is below Dynamic Reactor")


// =====================================================================
// PARTEA 4: Trade Management – Intrări, 3 TP și 1 SL
// =====================================================================
// Parametrii pentru TP și SL (valori ajustate pentru un raport risc-recompensă mai favorabil)
tp1Perc = input.float(1.5, title="TP1 (%)", minval=0.1, step=0.1)
tp2Perc = input.float(3.0, title="TP2 (%)", minval=0.1, step=0.1)
tp3Perc = input.float(4.5, title="TP3 (%)", minval=0.1, step=0.1)
slPerc  = input.float(1.0, title="Stop Loss (%)", minval=0.1, step=0.1)

// ---- Intrări de tranzacționare cu filtrare suplimentară pe baza trendului MA200 și consolidării ----
// Pentru poziții long, intrăm doar când prețul este peste MA200 și nu este în consolidare.
// Pentru poziții short, intrăm doar când prețul este sub MA200 și nu este în consolidare.
if (buySignal and close > ma200 and not isConsolidation)
    strategy.entry("Long", strategy.long)

if (sellSignal and close < ma200 and not isConsolidation)
    strategy.entry("Short", strategy.short)

// ---- Gestionarea ordinelor pentru poziții long ----
if (strategy.position_size > 0)
    entryPrice = strategy.position_avg_price
    // Calculăm nivelurile de TP și SL pentru poziția long
    long_sl = entryPrice * (1 - slPerc / 100)
    long_tp1 = entryPrice * (1 + tp1Perc / 100)
    long_tp2 = entryPrice * (1 + tp2Perc / 100)
    long_tp3 = entryPrice * (1 + tp3Perc / 100)
    
    // Plasăm TP-urile (alocări: 33%, 33% și 34%)
    strategy.exit("Long_TP1", from_entry="Long", limit=long_tp1, qty_percent=33, comment="TP1")
    strategy.exit("Long_TP2", from_entry="Long", limit=long_tp2, qty_percent=33, comment="TP2")
    strategy.exit("Long_TP3", from_entry="Long", limit=long_tp3, qty_percent=34, comment="TP3")
    
    // Plasăm ordinul de SL pentru poziția long
    strategy.exit("Long_SL", from_entry="Long", stop=long_sl, comment="SL")

// ---- Gestionarea ordinelor pentru poziții short ----
if (strategy.position_size < 0)
    entryPrice = strategy.position_avg_price
    // Calculăm nivelurile de TP și SL pentru poziția short
    short_sl = entryPrice * (1 + slPerc / 100)
    short_tp1 = entryPrice * (1 - tp1Perc / 100)
    short_tp2 = entryPrice * (1 - tp2Perc / 100)
    short_tp3 = entryPrice * (1 - tp3Perc / 100)
    
    // Plasăm TP-urile (alocări: 33%, 33% și 34%)
    strategy.exit("Short_TP1", from_entry="Short", limit=short_tp1, qty_percent=33, comment="TP1")
    strategy.exit("Short_TP2", from_entry="Short", limit=short_tp2, qty_percent=33, comment="TP2")
    strategy.exit("Short_TP3", from_entry="Short", limit=short_tp3, qty_percent=34, comment="TP3")
    
    // Plasăm ordinul de SL pentru poziția short
    strategy.exit("Short_SL", from_entry="Short", stop=short_sl, comment="SL")