यह रणनीति मूल्य और लिफाफा बैंड के बीच क्रॉसओवर स्थितियों को ट्रैक करके कम खरीदने और उच्च बेचने के ट्रेडिंग संकेत उत्पन्न करने के लिए नादाराया-वॉटसन कर्नेल प्रतिगमन विधि के आधार पर एक गतिशील अस्थिरता लिफाफा बनाता है। एक गणितीय विश्लेषण ढांचे के साथ, रणनीति बाजार में बदलाव के लिए खुद को अनुकूलित कर सकती है।
रणनीति का मूल मूल्य के गतिशील लिफाफे की गणना करना है। सबसे पहले, एक कस्टम लुकबैक विंडो का उपयोग करके, यह एक चिकनी मूल्य अनुमान प्राप्त करने के लिए कीमत (करीब, उच्च, निम्न) के नादाराया-वॉटसन कर्नेल प्रतिगमन वक्र का निर्माण करता है। फिर यह एक कस्टम एटीआर लंबाई के आधार पर एटीआर की गणना करता है, और निकट और दूर के कारकों के साथ ऊपरी और निचले लिफाफे बैंड बनाता है। जब कीमत नीचे से लिफाफे में टूटती है, तो एक खरीद संकेत उत्पन्न होता है। जब कीमत ऊपर से लिफाफे से बाहर निकलती है, तो एक बिक्री संकेत ट्रिगर किया जाता है। कीमत और अस्थिरता से संबंधित सांख्यिकीय गुणों के बीच गतिशील संबंध को ट्रैक करके, रणनीति अपने व्यापार निर्णयों को अनुकूलनशील रूप से समायोजित करती है।
उचित अनुकूलन, पर्याप्त बैकटेस्ट, प्रमुख कारकों को समझना और लाइव ट्रेडिंग में स्थिति का सावधानीपूर्वक आकार देने से इन जोखिमों को कम करने में मदद मिल सकती है।
रणनीति में सांख्यिकीय विश्लेषण और तकनीकी संकेतकों का विश्लेषण शामिल है ताकि मूल्य और अस्थिरता के बीच संबंधों को गतिशील रूप से ट्रैक करके ट्रेडिंग सिग्नल उत्पन्न किए जा सकें। बाजार की स्थितियों और व्यक्तिगत जरूरतों के आधार पर मापदंडों को समायोजित किया जा सकता है। कुल मिलाकर, ठोस सैद्धांतिक आधार के बावजूद, इसके वास्तविक प्रदर्शन को अभी भी आगे सत्यापन की आवश्यकता है। इसे सावधानीपूर्वक व्यवहार किया जाना चाहिए और सावधानीपूर्वक व्यापार किया जाना चाहिए।
/*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")