یہ حکمت عملی قیمت اور لفافے بینڈ کے مابین کراس اوور حالات کو ٹریک کرکے کم خریدنے اور زیادہ فروخت کرنے کے تجارتی سگنل پیدا کرنے کے لئے ناداریہ - واٹسن کیرنل رجسٹریشن کے طریقہ کار پر مبنی متحرک اتار چڑھاؤ لفافہ بناتی ہے۔ ریاضیاتی تجزیہ کے فریم ورک کے ساتھ ، حکمت عملی خود کو مارکیٹ کی تبدیلیوں کے مطابق ڈھال سکتی ہے۔
اس حکمت عملی کا بنیادی مقصد قیمت کے متحرک لفافے کا حساب لگانا ہے۔ سب سے پہلے ، اپنی مرضی کے مطابق نظرثانی ونڈو کا استعمال کرتے ہوئے ، یہ قیمت (قریب ، اعلی ، کم) کے نڈاریا واٹسن کیرنل رجعت منحنی خطوط کی تعمیر کرتا ہے تاکہ قیمت کا ہموار تخمینہ حاصل کیا جاسکے۔ پھر یہ اپنی مرضی کے مطابق اے ٹی آر لمبائی کی بنیاد پر اے ٹی آر کا حساب لگاتا ہے ، اور قریب اور دور کے عوامل کے ساتھ اوپری اور نچلے لفافے بینڈ تشکیل دیتا ہے۔ جب قیمت نیچے سے لفافے میں داخل ہوتی ہے تو ، خرید کا اشارہ پیدا ہوتا ہے۔ جب قیمت اوپر سے لفافے سے باہر نکلتی ہے تو ، فروخت کا اشارہ متحرک ہوجاتا ہے۔ قیمت اور اتار چڑھاؤ سے متعلق شماریاتی خصوصیات کے مابین متحرک تعلقات کو ٹریک کرکے ، حکمت عملی اپنے تجارتی فیصلوں کو موافقت پذیر طور پر ایڈجسٹ کرتی ہے۔
مناسب اصلاح، کافی بیک ٹسٹ، کلیدی عوامل کی تفہیم اور براہ راست تجارت میں پوزیشن کا محتاط سائزنگ ان خطرات کو کم کرنے میں مدد دے سکتا ہے۔
اسٹریٹجی میں اعدادوشمار کا تجزیہ اور تکنیکی اشارے کا تجزیہ شامل ہے تاکہ قیمت اور اتار چڑھاؤ کے مابین تعلقات کو متحرک طور پر ٹریک کرکے تجارتی سگنل تیار کیے جاسکیں۔ پیرامیٹرز کو مارکیٹ کے حالات اور ذاتی ضروریات کی بنیاد پر ایڈجسٹ کیا جاسکتا ہے۔ مجموعی طور پر ، ٹھوس نظریاتی بنیاد کے باوجود ، اس کی اصل کارکردگی کو ابھی بھی مزید تصدیق کی ضرورت ہے۔ اس سے محتاط انداز میں سلوک کیا جانا چاہئے اور محتاط تجارت کی جانی چاہئے۔
/*backtest start: 2022-12-04 00:00:00 end: 2023-12-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // © Julien_Eche //@version=5 strategy("Nadaraya-Watson Envelope Strategy", overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=20) // Helper Functions getEnvelopeBounds(_atr, _nearFactor, _farFactor, _envelope) => _upperFar = _envelope + _farFactor*_atr _upperNear = _envelope + _nearFactor*_atr _lowerNear = _envelope - _nearFactor*_atr _lowerFar = _envelope - _farFactor*_atr _upperAvg = (_upperFar + _upperNear) / 2 _lowerAvg = (_lowerFar + _lowerNear) / 2 [_upperNear, _upperFar, _upperAvg, _lowerNear, _lowerFar, _lowerAvg] customATR(length, _high, _low, _close) => trueRange = na(_high[1])? math.log(_high)-math.log(_low) : math.max(math.max(math.log(_high) - math.log(_low), math.abs(math.log(_high) - math.log(_close[1]))), math.abs(math.log(_low) - math.log(_close[1]))) ta.rma(trueRange, length) customKernel(x, h, alpha, x_0) => sumWeights = 0.0 sumXWeights = 0.0 for i = 0 to h weight = math.pow(1 + (math.pow((x_0 - i), 2) / (2 * alpha * h * h)), -alpha) sumWeights := sumWeights + weight sumXWeights := sumXWeights + weight * x[i] sumXWeights / sumWeights // Custom Settings customLookbackWindow = input.int(8, 'Lookback Window (Custom)', group='Custom Settings') customRelativeWeighting = input.float(8., 'Relative Weighting (Custom)', step=0.25, group='Custom Settings') customStartRegressionBar = input.int(25, "Start Regression at Bar (Custom)", group='Custom Settings') // Envelope Calculations customEnvelopeClose = math.exp(customKernel(math.log(close), customLookbackWindow, customRelativeWeighting, customStartRegressionBar)) customEnvelopeHigh = math.exp(customKernel(math.log(high), customLookbackWindow, customRelativeWeighting, customStartRegressionBar)) customEnvelopeLow = math.exp(customKernel(math.log(low), customLookbackWindow, customRelativeWeighting, customStartRegressionBar)) customEnvelope = customEnvelopeClose customATRLength = input.int(60, 'ATR Length (Custom)', minval=1, group='Custom Settings') customATR = customATR(customATRLength, customEnvelopeHigh, customEnvelopeLow, customEnvelopeClose) customNearATRFactor = input.float(1.5, 'Near ATR Factor (Custom)', minval=0.5, step=0.25, group='Custom Settings') customFarATRFactor = input.float(2.0, 'Far ATR Factor (Custom)', minval=1.0, step=0.25, group='Custom Settings') [customUpperNear, customUpperFar, customUpperAvg, customLowerNear, customLowerFar, customLowerAvg] = getEnvelopeBounds(customATR, customNearATRFactor, customFarATRFactor, math.log(customEnvelopeClose)) // Colors customUpperBoundaryColorFar = color.new(color.red, 60) customUpperBoundaryColorNear = color.new(color.red, 80) customBullishEstimatorColor = color.new(color.teal, 50) customBearishEstimatorColor = color.new(color.red, 50) customLowerBoundaryColorNear = color.new(color.teal, 80) customLowerBoundaryColorFar = color.new(color.teal, 60) // Plots customUpperBoundaryFar = plot(math.exp(customUpperFar), color=customUpperBoundaryColorFar, title='Upper Boundary: Far (Custom)') customUpperBoundaryAvg = plot(math.exp(customUpperAvg), color=customUpperBoundaryColorNear, title='Upper Boundary: Average (Custom)') customUpperBoundaryNear = plot(math.exp(customUpperNear), color=customUpperBoundaryColorNear, title='Upper Boundary: Near (Custom)') customEstimationPlot = plot(customEnvelopeClose, color=customEnvelope > customEnvelope[1] ? customBullishEstimatorColor : customBearishEstimatorColor, linewidth=2, title='Custom Estimation') customLowerBoundaryNear = plot(math.exp(customLowerNear), color=customLowerBoundaryColorNear, title='Lower Boundary: Near (Custom)') customLowerBoundaryAvg = plot(math.exp(customLowerAvg), color=customLowerBoundaryColorNear, title='Lower Boundary: Average (Custom)') customLowerBoundaryFar = plot(math.exp(customLowerFar), color=customLowerBoundaryColorFar, title='Lower Boundary: Far (Custom)') // Fills fill(customUpperBoundaryFar, customUpperBoundaryAvg, color=customUpperBoundaryColorFar, title='Upper Boundary: Farmost Region (Custom)') fill(customUpperBoundaryNear, customUpperBoundaryAvg, color=customUpperBoundaryColorNear, title='Upper Boundary: Nearmost Region (Custom)') fill(customLowerBoundaryNear, customLowerBoundaryAvg, color=customLowerBoundaryColorNear, title='Lower Boundary: Nearmost Region (Custom)') fill(customLowerBoundaryFar, customLowerBoundaryAvg, color=customLowerBoundaryColorFar, title='Lower Boundary: Farmost Region (Custom)') longCondition = ta.crossover(close, customEnvelopeLow) if (longCondition) strategy.entry("Buy", strategy.long) exitLongCondition = ta.crossover(customEnvelopeHigh, close) if (exitLongCondition) strategy.close("Buy")