अनुकूलनशील ट्रेंड फॉलोइंग रणनीति एक मात्रात्मक ट्रेडिंग रणनीति है जो बोलिंगर बैंड और चलती औसत संकेतकों को संयोजित करती है ताकि गतिशील रूप से ट्रेंड स्ट्रेंथ फैक्टर को समायोजित किया जा सके और ट्रेंड फॉलोइंग और स्टॉप लॉस प्राप्त किया जा सके। यह रणनीति मूल्य अस्थिरता की गणना करने के लिए बोलिंगर बैंड का उपयोग करती है और इस प्रकार गतिशील रूप से उचित ट्रेंड स्ट्रेंथ की गणना करती है। यह तब एटीआर संकेतक का उपयोग तेजी और मंदी के रुझानों को निर्धारित करने और उनका पालन करने के लिए एक अनुकूलनशील ट्रेंड चैनल को प्लॉट करने के लिए करती है। साथ ही, रणनीति में जोखिमों को प्रभावी ढंग से नियंत्रित करने के लिए एक अंतर्निहित स्टॉप लॉस तंत्र है।
इस रणनीति का मूल सूचक बोलिंगर बैंड है। बोलिंगर बैंड में एक मध्य बैंड, एक ऊपरी बैंड और एक निचला बैंड होता है। मध्य बैंड n-दिन का सरल चलती औसत है, ऊपरी बैंड मध्य बैंड + k गुना n-दिन का मानक विचलन है, और निचला बैंड मध्य बैंड है - k गुना n-दिन का मानक विचलन। यहां हम बोलिंगर बैंड बनाने के लिए 20 दिन का मध्य बैंड और 2 गुना मानक विचलन का चयन करते हैं।
फिर हम मध्य बैंड अनुपात पर बैंडविड्थ (ऊपरी बैंड - निचला बैंड) की गणना करते हैं, जिसे
एक उचित शक्ति कारक के साथ, एटीआर संकेतक के साथ संयुक्त, ऊपरी और निचले बैंड एक अनुकूलन प्रवृत्ति चैनल बनाने के लिए क्रमशः एटीआर * शक्ति कारक दूरी द्वारा ऊपर और नीचे बढ़ते हैं। जब समापन मूल्य नीचे से ऊपर की ओर ऊपरी रेल के माध्यम से टूटता है, तो लंबा; जब यह ऊपर से नीचे की रेल के माध्यम से टूटता है, तो छोटा।
इसके अतिरिक्त, रणनीति एक स्टॉप लॉस तंत्र भी निर्धारित करती है। एक लंबी स्थिति के गठन के बाद, यदि स्थिति खोले जाने पर मूल्य सबसे कम बिंदु से नीचे गिर जाता है, तो स्टॉप लॉस एक्जिट; शॉर्ट पदों के लिए भी ऐसा ही है।
इस रणनीति के निम्नलिखित फायदे हैंः
उच्च अनुकूलन क्षमता। शक्ति कारक की गणना करने का तरीका रणनीति को बाजार की अस्थिरता के आधार पर चैनल चौड़ाई को गतिशील रूप से समायोजित करने की अनुमति देता है, विभिन्न प्रकार के बाजारों में आत्म-अनुकूलन प्राप्त करने के लिए तेजी से बाजार की प्रवृत्ति में चैनल को चौड़ा करना और दोहराने वाले बाजार में चैनल को संकुचित करना।
मध्यम परिचालन आवृत्ति सरल चलती औसत रणनीतियों की तुलना में, बोलिंगर बैंड्स रणनीतियां चैनलों को कम बार समायोजित करती हैं, अनावश्यक रूप से लगातार पदों के उद्घाटन और बंद होने से बचती हैं।
उच्च और निम्न रेल का ब्रेकआउट प्रभावी रूप से बाजार शोर को फ़िल्टर कर सकता है और रुझानों के उद्घाटन को पकड़ने की उच्च संभावना सुनिश्चित कर सकता है।
स्टॉप लॉस तंत्र। अंतर्निहित स्टॉप लॉस विधि प्रभावी रूप से एकल हानि को नियंत्रित कर सकती है, जो इस रणनीति का एक प्रमुख लाभ है।
इस रणनीति में कुछ जोखिम भी हैं:
उच्च पैरामीटर संवेदनशीलता. अवधि n और गुणक k बोलिंगर बैंड के परिणामों पर एक बड़ा प्रभाव है, इष्टतम पैरामीटर संयोजन खोजने के लिए बार-बार परीक्षण की आवश्यकता है.
बोलिंगर बैंड्स के विचलन के दौरान रुझानों को ट्रैक करने में असमर्थता। जब कीमतें हिंसक रूप से उतार-चढ़ाव करती हैं, तो बोलिंगर बैंड्स रेल तेजी से विस्तार करती हैं, जिसके परिणामस्वरूप रुझानों को ट्रैक करने में असमर्थता होती है। रणनीति को फिर से चलाने से पहले रेलों के अभिसरण की प्रतीक्षा करते हुए रोक दिया जाना चाहिए।
कभी-कभी झूठे संकेत। बोलिंगर बैंड्स रणनीतियाँ पूर्ण नहीं होती हैं, कुछ झूठे संकेत भी उत्पन्न होंगे, जिससे संबंधित नुकसान उठाने की आवश्यकता होती है।
अपेक्षाकृत सरल स्टॉप लॉस विधि. इस रणनीति का स्टॉप लॉस केवल स्थिति खोलने के बाद उच्चतम और निम्नतम कीमतों पर विचार करता है, जिसमें अस्थिरता आदि पर आधारित अधिक जटिल स्टॉप लॉस विधियों को शामिल किए बिना, जो बहुत आक्रामक या रूढ़िवादी हो सकते हैं, अनुकूलन की आवश्यकता होती है।
इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित करने की आवश्यकता हैः
विभिन्न मुद्राओं और चक्र मापदंडों के प्रभावों का परीक्षण करें। रणनीति की अनुकूलन क्षमता में सुधार के लिए रणनीति के मापदंडों को विभिन्न मुद्राओं और चक्रों के लिए अनुकूलित किया जा सकता है।
स्टॉप लॉस तंत्र को अनुकूलित करें. स्टॉप लॉस विधि को अधिक बुद्धिमान बनाने के लिए स्टॉप लॉस को स्थानांतरित करना, स्टॉप लॉस को उतार-चढ़ाव करना, स्टॉप लॉस को पीछे छोड़ना आदि पेश किया जा सकता है।
प्रवेश संकेतों को फ़िल्टर करने के लिए अन्य संकेतकों को शामिल करें। बायीं ओर दोलन करने वाले बाजारों में बोलिंगर बैंड्स से झूठे संकेतों से बचने के लिए एमएसीडी, केडीजे आदि जैसे संकेतकों को जोड़ा जा सकता है।
स्थिति प्रबंधन तंत्र जोड़ें। रणनीतियों की लाभप्रदता में सुधार के लिए ट्रैकिंग स्टॉप प्रॉफिट, पिरामिड ट्रेडिंग, फिक्स्ड अनुपात स्थिति आदि प्रबंधन विधियों को लागू करें।
बैकटेस्ट ऑप्टिमाइज़ेशन करें. बैकटेस्ट टाइमफ्रेम का विस्तार करके, पैरामीटर को समायोजित करके, बैकटेस्ट रिपोर्टों का विश्लेषण करके, आदि के माध्यम से रणनीति के परिणामों की व्यापक रूप से जांच करें ताकि इष्टतम पैरामीटर मिल सकें।
कुल मिलाकर, अनुकूलनशील प्रवृत्ति के बाद की रणनीति काफी परिपक्व मात्रात्मक रणनीति है। यह गतिशील रूप से रुझानों को पकड़ने के लिए बोलिंगर बैंड का उपयोग करता है, जो एटीआर संकेतक के साथ संयुक्त रूप से लंबी और छोटी प्रवृत्तियों का न्याय करने के लिए एक अनुकूलनशील चैनल का निर्माण करता है। इस बीच इसमें जोखिमों को नियंत्रित करने के लिए एक अंतर्निहित स्टॉप लॉस तंत्र है। इस रणनीति के फायदे उचित संचालन आवृत्ति, सटीक प्रवेश समय और अच्छे जोखिम नियंत्रण हैं। हालांकि, कुछ मुद्दे हैं जिन्हें पैरामीटर चयन, स्टॉप लॉस विधि, सिग्नल फ़िल्टरिंग जैसे क्षेत्रों में अनुकूलन की आवश्यकता होती है ताकि रणनीति अधिक मजबूत और बुद्धिमान हो सके।
/*backtest start: 2023-12-15 00:00:00 end: 2024-01-14 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("[Th] Adaptive Trend v1", shorttitle="[TH] Adaptive Trend", overlay=true) Pd=input(2, minval=1,maxval = 100, title="Period") Bw=input(50, minval=1,maxval = 100, title="Bandwidth") minFactor = input(0.5, minval=0.1, maxval=1.0, step=0.1, title="Minimum Factor") maxFactor = input(3.00, minval=0.2, maxval=5.0, step=0.1, title="Maximum Factor") plot_trend=input(true, title="Plot trend") plot_losscut = input(true, title="Plot losscut") /////////////// Calculate the BB's /////////////// basisBB = ema(close, 20) devBB = 2 * stdev(close, 20) upperBB = basisBB + devBB lowerBB = basisBB - devBB //plot(upperBB) //plot(lowerBB) ///////////// Trend //////////////////////////// rawFactor = ((upperBB-lowerBB)/basisBB)*Bw Factor = rawFactor > minFactor ? (rawFactor > maxFactor ? maxFactor : rawFactor) : minFactor Up=hl2-(Factor*atr(Pd)) Dn=hl2+(Factor*atr(Pd)) TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn TrendUpPlot=plot(plot_trend?TrendUp:na, style=line, color=green, linewidth=1) TrendDownPlot=plot(plot_trend?TrendDown:na, style=line, color=red, linewidth=1) Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1) fill(TrendUpPlot,TrendDownPlot, color=Trend == 1 ? green : red, transp=80) sig_trend_long = Trend[1] == -1 and Trend == 1 sig_trend_short = Trend[1] == 1 and Trend == -1 ///////////// Loss Cut //////////////////////////// price_cut = sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1] ? open : price_cut[1] current_trend = sig_trend_long[1] ? 1 : (sig_trend_short[1] ? -1 : current_trend[1]) sig_loss_cut = sig_trend_long or sig_trend_short ? false : ( current_trend == 1 ? (price_cut > low) : (current_trend == -1 ? (price_cut < high) : false) ) has_position = sig_loss_cut ? false : ((sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1]) ? true : has_position[1]) sig_reentry_long = not has_position and current_trend == 1 and low > price_cut sig_reentry_short = not has_position and current_trend == -1 and high < price_cut bgcolor(plot_losscut and ( not has_position or sig_loss_cut ) ? silver : white, transp=70) plotshape(plot_losscut and sig_loss_cut and current_trend == 1? 1 : na, color=green, style=shape.xcross, location=location.belowbar ,size=size.tiny) plotshape(plot_losscut and sig_loss_cut and current_trend == -1? 1 : na, color=red, style=shape.xcross, location=location.abovebar ,size=size.tiny) LossCutPlot = plot(plot_losscut ? price_cut : na, linewidth=4, color=black, transp=60) fill(TrendDownPlot, LossCutPlot, color=silver, transp=90) plotshape(sig_trend_long or sig_reentry_long ? Trend : na, title="Up Entry Arrow", color=green, style=shape.triangleup, location=location.belowbar, size=size.tiny) plotshape(sig_trend_short or sig_reentry_short ? Trend : na, title="Down Entry Arrow",color=red, style=shape.triangledown, size=size.tiny) ///////////// Strategy //////////////////////////// if true strategy.entry('long', long=strategy.long, comment='Long', when=sig_trend_long or sig_reentry_long) strategy.entry('short', long=strategy.short, comment='Short', when=sig_trend_short or sig_reentry_short) if(current_trend == 1) strategy.close('long', when=sig_loss_cut == true) //strategy.exit('lc',from_entry='long', stop=price_cut) if( current_trend == -1 ) strategy.close('short', when=sig_loss_cut == true) //strategy.exit('sc',from_entry='short', stop=price_cut)