এই কৌশলটি দামের ডেটা মসৃণ করতে এবং মসৃণ দামের ভিত্তিতে উপরের এবং নীচের ব্যান্ডগুলি গণনা করার জন্য নাদারায়া-ওয়াটসন এনভেলপ ব্যবহার করে। এটি তারপরে প্রবণতা শক্তি এবং দিক নির্ধারণের জন্য এডিএক্স এবং ডিআই সূচক এবং প্রবণতা গতি নিশ্চিত করার জন্য আরএসআই সূচক ব্যবহার করে। সম্ভাব্য ব্রেকআউটগুলি চিহ্নিত করা হয় যখন দাম এনভেলপ ব্যান্ডের উপরে বা নীচে অতিক্রম করে। অবশেষে, এটি ঝুঁকি পরিচালনার জন্য গতিশীল স্টপ-লস ব্যবহার করার সময় প্রবণতা, ব্রেকআউট এবং গতির সংমিশ্রিত সংকেতের উপর ভিত্তি করে বাণিজ্য সম্পাদন করে।
এই কৌশলটি একটি বিস্তৃত ট্রেডিং সিস্টেম তৈরির জন্য ADX এবং DI, RSI গতির সূচক এবং মূল্য ব্রেকআউট পয়েন্টগুলির মতো ট্রেন্ড সূচকগুলির সাথে মূল্য মসৃণকরণের জন্য নাদারায়া-ওয়াটসন এনভেলপকে একত্রিত করে। গতিশীল স্টপ-লস ম্যানেজমেন্ট বাজারের পরিবর্তন এবং একটি নির্দিষ্ট পরিমাণে ঝুঁকি নিয়ন্ত্রণের সাথে খাপ খাইয়ে নিতে সহায়তা করে। যাইহোক, ব্যবহারিক প্রয়োগে, কৌশলটির দৃust়তা এবং লাভজনকতা উন্নত করতে প্রবণতা সনাক্তকরণ, গতিশীল স্টপ-লস এবং পরামিতি সেটিংস অপ্টিমাইজ করার দিকে মনোযোগ দেওয়া উচিত।
/*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")