
स्व-अनुकूली रुझान अनुवर्ती रणनीति एक मात्रात्मक व्यापार रणनीति है जिसमें बुलिन बैंड सूचक और समानांतर सूचक शामिल हैं, जो गतिशील रूप से रुझान की ताकत को समायोजित करते हैं, जिससे रुझान का पालन और रोकथाम संभव हो जाता है। यह रणनीति बुलिन बैंड सूचक का उपयोग करती है, जो कीमतों में उतार-चढ़ाव की गणना करती है, इस गतिशीलता के आधार पर उचित रुझान की ताकत की गणना करती है, और फिर एटीआर सूचक के साथ मिलकर स्व-अनुकूली रुझान चैनल को रेखांकित करती है, जिससे बुल और बियर रुझानों का निर्णय और अनुवर्ती संभव हो जाता है। साथ ही, रणनीति में एक रोकथाम तंत्र होता है, जो जोखिम को प्रभावी ढंग से नियंत्रित कर सकता है।
इस रणनीति का मुख्य सूचक ब्रिन बैंड है। ब्रिन बैंड मध्य, ऊपरी और निचले रेल से बना है। मध्य रेल एक सरल चलती औसत है जो n दिनों का है, ऊपरी रेल एक n दिन का मानक अंतर है जो मध्य रेल + k गुना है, और निचले रेल एक n दिन का मानक अंतर है जो मध्य रेल - k गुना है। यहां ब्रिन बैंड का निर्माण करने के लिए 20 दिन का मध्य रेल और 2 गुना मानक अंतर चुना गया है।
फिर ब्रिन बैंड की बैंडविड्थ की गणना की जाती है (ऊपर-नीचे की पट्टी) और मध्य पट्टी का अनुपात, जिसे स्ट्रेचिंग इंटेंसिटी फैक्टर कहा जाता है। यह अनुपात वर्तमान बाजार में उतार-चढ़ाव की दर और प्रवृत्ति की ताकत को दर्शाता है। हम इंटेंसिटी फैक्टर के अधिकतम-न्यूनतम मूल्य को सेट करते हैं ताकि यह बहुत बड़ा या बहुत छोटा न हो।
उचित शक्ति कारक प्राप्त करने के बाद, एटीआर को ऊपर और नीचे, एटीआर को ऊपर और नीचे, एटीआर के साथ जोड़ें*शक्ति कारक की दूरी, एक अनुकूलन प्रवृत्ति चैनल का निर्माण करती है। जब समापन मूल्य नीचे से ऊपर की ओर उछाल देता है, तो अधिक करें; जब ऊपर से नीचे की ओर उछाल देता है, तो खाली करें।
इसके अलावा, रणनीति में एक स्टॉप-लॉस तंत्र भी है। जब एक बहुमुखी स्थिति का गठन किया जाता है, तो यदि कीमत शुरुआती स्थिति के निचले बिंदु से नीचे गिर जाती है, तो एक समतल स्थिति को रोक दिया जाता है; एक खाली स्थिति भी।
इस रणनीति के निम्नलिखित फायदे हैं:
मजबूत अनुकूलनशीलता। ताकत कारक की गणना के तरीके से रणनीति को बाजार में उतार-चढ़ाव की गतिशीलता के आधार पर चैनल की चौड़ाई को समायोजित करने की अनुमति मिलती है, ट्रेंडिंग बुल मार्केट में चैनल को चौड़ा करना और उतार-चढ़ाव वाले बाजार में चैनल को संकीर्ण करना, विभिन्न प्रकार के बाजारों के लिए अनुकूलन करना।
मध्यम परिचालन आवृत्ति: सरल चलती औसत रणनीतियों की तुलना में, ब्रिन बैंड रणनीति चैनल को कम आवृत्ति में समायोजित करती है, जिससे अनावश्यक रूप से बार-बार पोजीशन खोलने से बचा जाता है।
प्रवेश सटीक है. प्रवेश के इस तरीके से बाजार के शोर को प्रभावी ढंग से फ़िल्टर किया जा सकता है और यह सुनिश्चित किया जा सकता है कि प्रवृत्ति की शुरुआत को उच्च संभावना के साथ पकड़ा जाए।
एक नुकसान रोक तंत्र है. एक अंतर्निहित नुकसान रोक विधि एक एकल नुकसान को प्रभावी ढंग से नियंत्रित कर सकती है, जो इस रणनीति का एक बड़ा लाभ है.
इस रणनीति के कुछ जोखिम भी हैं:
पैरामीटर संवेदनशीलता अधिक होती है। ब्रिन बैंड की अवधि n और गुणांक k परिणामों पर बहुत प्रभाव डालते हैं, और सर्वोत्तम पैरामीटर संयोजन खोजने के लिए बार-बार परीक्षण की आवश्यकता होती है।
जब कीमतों में भारी उतार-चढ़ाव होता है, तो ब्रिन बैंड्स ट्रेंड को ट्रैक करने में असमर्थ हो जाते हैं, जिससे ट्रेंड को ट्रैक करने में असमर्थता होती है। इस समय रणनीति को रोकना आवश्यक है, और ट्रेंड के समापन के बाद फिर से चलाने की प्रतीक्षा करें।
कभी-कभी एक गलत सिग्नल उत्पन्न होता है। ब्रिन बेल्ट रणनीति सही नहीं है, और कुछ गलत सिग्नल उत्पन्न होते हैं, जिसके लिए उचित नुकसान उठाना पड़ता है।
स्टॉप-लॉस का तरीका सरल है। इस रणनीति के लिए स्टॉप-लॉस केवल उच्चतम और निम्नतम कीमतों को ध्यान में रखता है, जो कि अधिक जटिल स्टॉप-लॉस जैसे कि अस्थिरता के बिना है, जो बहुत अधिक कट्टरपंथी या रूढ़िवादी हो सकता है और इसे अनुकूलित करने की आवश्यकता है।
इस रणनीति में निम्नलिखित पहलुओं में सुधार की आवश्यकता है:
विभिन्न मुद्राओं और विभिन्न चक्रों के पैरामीटर की प्रभावशीलता का परीक्षण करना। रणनीति के पैरामीटर को विभिन्न मुद्राओं और चक्रों के लिए अनुकूलित किया जा सकता है, जिससे रणनीति की अनुकूलनशीलता बढ़ जाती है।
अनुकूलित रोकथाम तंत्र. आप चलती रोकथाम, दोलन रोकथाम, रोकथाम ट्रैक आदि को पेश कर सकते हैं, जिससे रोकथाम अधिक बुद्धिमान हो सके।
अन्य संकेतकों के साथ संयोजन में, MACD, KDJ जैसे संकेतकों को शामिल किया जा सकता है, ताकि ब्रीनिंग बैंड को गलत संकेतों से बचा जा सके।
स्थिति प्रबंधन तंत्र को बढ़ाएं। स्टॉप, पिरामिड, और निश्चित अनुपात की स्थिति को ट्रैक करने के लिए प्रबंधन के तरीकों को लागू करने से रणनीति रिटर्न में सुधार हो सकता है।
फीडबैक का अनुकूलन करें। फीडबैक समय सीमा का विस्तार, पैरामीटर को समायोजित करने, फीडबैक रिपोर्ट का विश्लेषण करने आदि के माध्यम से रणनीति के प्रभाव की पूरी जांच करें और इष्टतम पैरामीटर ढूंढें।
स्व अनुकूलन प्रवृत्ति का पालन करें समग्र रूप से रणनीति एक अधिक परिपक्व मात्रात्मक रणनीति है. यह ब्रुनेड बैंड संकेतक गतिशील कैप्चर प्रवृत्ति का उपयोग करता है, एटीआर संकेतक के साथ मिलकर स्व अनुकूलन चैनल का निर्माण करने के लिए, बहुआयामी प्रवृत्ति के निर्णय को लागू करता है. साथ ही साथ अंतर्निहित स्टॉप लॉस तंत्र नियंत्रण जोखिम. इस रणनीति का लाभ ऑपरेशन आवृत्ति में अनुकूलन, प्रवेश सटीकता और बेहतर जोखिम नियंत्रण में है। लेकिन कुछ समस्याएं भी हैं, जो पैरामीटर विकल्पों की संख्या, स्टॉप लॉस मोड, सिग्नल फ़िल्टरिंग आदि के मामले में अनुकूलन की आवश्यकता है, जिससे रणनीति अधिक स्थिर और बुद्धिमान हो।
/*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)