یہ حکمت عملی قیمت کے اعداد و شمار کو ہموار کرنے اور ہموار قیمت کی بنیاد پر اوپری اور نچلے بینڈ کا حساب لگانے کے لئے نادرایا واٹسن لفافے کا استعمال کرتی ہے۔ اس کے بعد یہ رجحان کی طاقت اور سمت کا تعین کرنے کے لئے ADX اور DI اشارے کا استعمال کرتی ہے ، اور رجحان کی رفتار کی تصدیق کے لئے RSI اشارے کا استعمال کرتی ہے۔ جب قیمت لفافے کے بینڈ سے اوپر یا نیچے گزرتی ہے تو ممکنہ بریک آؤٹ کی نشاندہی کی جاتی ہے۔ آخر میں ، یہ خطرہ کو سنبھالنے کے لئے متحرک اسٹاپ نقصان کا استعمال کرتے ہوئے ، رجحان ، بریک آؤٹ اور رفتار کے مشترکہ اشاروں کی بنیاد پر تجارت انجام دیتی ہے۔
یہ حکمت عملی ایک جامع تجارتی نظام بنانے کے لئے ADX اور DI جیسے رجحان اشارے ، RSI رفتار اشارے ، اور قیمت بریک آؤٹ پوائنٹس کے ساتھ قیمت کو ہموار کرنے کے لئے ناداریہ واٹسن لفافے کو جوڑتی ہے۔ متحرک اسٹاپ نقصان کا انتظام مارکیٹ میں ہونے والی تبدیلیوں کو اپنانے اور کسی حد تک خطرے کو کنٹرول کرنے میں مدد کرتا ہے۔ تاہم ، عملی درخواست میں ، حکمت عملی کی استحکام اور منافع بخش بنانے کے لئے رجحان کی نشاندہی ، متحرک اسٹاپ نقصان ، اور پیرامیٹر کی ترتیبات کو بہتر بنانے پر توجہ دی جانی چاہئے۔
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-18 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Nadaraya-Watson Envelope with Multi-Confirmation and Dynamic Stop-Loss", overlay=true) // Input parameters h = input.float(7.2, "Bandwidth", minval=0) mult = input.float(2.1, minval=0) src = input(close, "Source") // ADX and DI Input Parameters adxLength = input.int(14, "ADX Length") adxThreshold = input.float(25, "ADX Threshold") adxSmoothing = input.int(14, "ADX Smoothing") // Calculate ADX and DI [dmiPlus, dmiMinus, adx] = ta.dmi(adxLength, adxSmoothing) strongTrendUp = dmiPlus > dmiMinus and adx > adxThreshold strongTrendDown = dmiMinus > dmiPlus and adx > adxThreshold // Nadaraya-Watson Envelope Calculation gauss(x, h) => math.exp(-(math.pow(x, 2) / (h * h * 2))) coefs = array.new_float(0) den = 0.0 for i = 0 to 100 w = gauss(i, h) array.push(coefs, w) den := array.sum(coefs) out = 0.0 for i = 0 to 100 out += src[i] * array.get(coefs, i) out /= den mae = ta.sma(math.abs(src - out), 100) * mult upper = ta.sma(out + mae, 10) lower = ta.sma(out - mae, 10) // Confirmations breakoutUp = ta.crossover(src, upper) breakoutDown = ta.crossunder(src, lower) // Original RSI period and thresholds rsiPeriod = input.int(14, "RSI Period") rsi = ta.rsi(src, rsiPeriod) momentumUp = rsi > 70 and adx > adxThreshold momentumDown = rsi < 30 and adx > adxThreshold // // Plot ADX-based Trend Confirmation Lines // if (strongTrendUp) // line.new(bar_index, low, bar_index + 1, low, color=color.new(color.blue, 50), width=2, style=line.style_dashed) // if (strongTrendDown) // line.new(bar_index, high, bar_index + 1, high, color=color.new(color.red, 50), width=2, style=line.style_dashed) // Plot Breakout Confirmation Dots plotshape(series=breakoutUp, style=shape.circle, location=location.abovebar, color=color.blue, size=size.tiny, title="Breakout Up") plotshape(series=breakoutDown, style=shape.circle, location=location.belowbar, color=color.orange, size=size.tiny, title="Breakout Down") // Plot Momentum Confirmation Arrows plotshape(series=momentumUp, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny, title="Momentum Up") plotshape(series=momentumDown, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, title="Momentum Down") // Strategy Entry and Exit var float stopLossLevel = na var float highestPrice = na potentialBuy = strongTrendUp and breakoutUp potentialSell = strongTrendDown and breakoutDown momentumConfirmUp = potentialBuy and momentumUp momentumConfirmDown = potentialSell and momentumDown if (momentumConfirmUp) strategy.entry("Buy", strategy.long) stopLossLevel := close * 0.90 highestPrice := close if (momentumConfirmDown) strategy.entry("Sell", strategy.short) stopLossLevel := close * 1.10 highestPrice := close if (strategy.position_size > 0) highestPrice := math.max(highestPrice, close) stopLossLevel := math.max(highestPrice * 0.85, close * 0.90) if (strategy.position_size < 0) highestPrice := math.min(highestPrice, close) stopLossLevel := math.min(highestPrice * 1.15, close * 1.10) // Close position if stop loss is hit if (strategy.position_size > 0 and close < stopLossLevel) strategy.close("Buy") if (strategy.position_size < 0 and close > stopLossLevel) strategy.close("Sell")