यह बोलिंगर बैंड्स चैनल पर आधारित रिवर्स ऑसिलेशन ट्रेंड रणनीति है। यह ट्रेंड निर्धारित करने के लिए बोलिंगर बैंड्स ऊपरी और निचले चैनल का उपयोग करता है, और जब कीमत चैनल की सीमाओं के करीब आती है तो रिवर्स अवसरों की तलाश करता है।
रणनीति मुख्य तकनीकी संकेतक के रूप में बोलिंगर बैंड का उपयोग करती है। बोलिंगर बैंड में एन-पीरियड मूविंग एवरेज और ऊपरी/निम्न बैंड विचलन शामिल हैं। ऊपरी बैंड = एन-पीरियड एमए + एम * एन-पीरियड मानक विचलन, निचला बैंड = एन-पीरियड एमए - एम * एन-पीरियड मानक विचलन। एन और एम पैरामीटर हैं।
जब कीमत ऊपरी बैंड के करीब आती है, तो यह एक अपट्रेंड का संकेत देती है लेकिन शिखर पर उलट सकती है। जब कीमत निचले बैंड के करीब आती है, तो यह एक डाउनट्रेंड का संकेत देती है लेकिन नीचे पलट सकती है। बोलिंगर बैंड का प्रभावी ब्रेकआउट संभावित उलट का संकेत दे सकता है।
व्यापार के विशिष्ट नियम इस प्रकार हैंः
ऊपर वाले बैंड के करीब होने पर लंबा, नीचे वाले बैंड के करीब होने पर छोटा।
लाभ लेने और स्टॉप लॉस सिग्नल के रूप में एन-पीरियड मूविंग एवरेज का प्रयोग करें। जब बंद ब्रेक एमए से नीचे होता है तो लंबे समय तक बंद करें, जब बंद ब्रेक एमए से ऊपर होता है तो शॉर्ट बंद करें।
प्रत्येक व्यापार के लिए निश्चित मात्रा का प्रयोग करें।
फिक्स्ड फ्रैक्शनल पोजीशन साइजिंग का प्रयोग करें। जब फिक्स्ड प्रॉफिट रेश्यो पूरा होता है तो पोजीशन साइज को फिक्स्ड राशि से बढ़ाएं, जब नुकसान होता है तो साइज कम करें।
इस रणनीति के फायदे:
प्रवृत्ति की दिशा और व्यापार के उलटफेर को निर्धारित करने के लिए बोलिंगर बैंड चैनल का उपयोग करना, अधिकांश whipsaws से बचाता है और जीत दर में सुधार करता है।
मूविंग एवरेज एक विश्वसनीय लाभ लेने/स्टॉप लॉस सिग्नल है, जो अधिकतर मुनाफे में लॉक करता है।
निश्चित मात्रा सरल और लागू करने में आसान है, कोई जटिल गणना की आवश्यकता नहीं है।
फिक्स्ड फ्रैक्शनल पोजीशन साइजिंग से मुनाफे का विस्तार होता है जबकि पोजीशन एडजस्टमेंट से जोखिम को नियंत्रित किया जाता है।
इस रणनीति के जोखिमः
बोलिंगर बैंड गलत संकेत उत्पन्न कर सकते हैं, जिससे ट्रेडिंग में नुकसान हो सकता है।
चलती औसत के पीछे पड़ने से पर्याप्त लाभ नहीं मिल सकता है।
फिक्स्ड मात्रा बाजार की परिस्थितियों के अनुकूल नहीं हो सकती है, स्थिति के ओवर/अंडर साइजिंग के जोखिम हैं।
फिक्स्ड फ्रैक्शनल पद्धति में आक्रामक स्थिति आकार समायोजन नुकसान को बढ़ा सकता है।
समाधानः संकेत सटीकता में सुधार के लिए बोलिंगर बैंड्स मापदंडों का अनुकूलन करें। प्रवृत्ति निर्धारित करने के लिए अन्य संकेतक जोड़ें। निश्चित मात्रा आकार को कम करें। अंशीय स्थिति आकार विधि में स्थिति आकार समायोजन अनुपात को कम करें।
इस रणनीति में निम्नलिखित पहलुओं से सुधार किया जा सकता हैः
सटीकता बढ़ाने के लिए n और m जैसे बोलिंगर बैंड्स मापदंडों का अनुकूलन करें।
गलत संकेतों से बचने के लिए एमएसीडी, केडी जैसे अन्य संकेतक जोड़ें।
बाजार की स्थितियों के आधार पर स्थिर मात्रा को गतिशील स्थिति में बदलें।
अंशीय स्थिति आकार में कम स्थिति आकार समायोजन अनुपात और सुचारू इक्विटी वक्र।
जोखिम को नियंत्रित करने के लिए स्टॉप लॉस रणनीतियों जैसे स्टॉप लॉस, ब्रेकआउट स्टॉप लॉस को जोड़ें।
अधिकतम पैरामीटर संयोजन खोजने के लिए पैरामीटर अनुकूलन।
संक्षेप में, यह एक विशिष्ट बोलिंगर बैंड्स रिवर्सल रणनीति है। यह बोलिंगर बैंड्स द्वारा रिवर्सल बिंदुओं की पहचान करता है, चलती औसत द्वारा लाभ लेने / स्टॉप लॉस सेट करता है, निश्चित मात्रा और अंशीय स्थिति आकार के द्वारा जोखिम को नियंत्रित करता है। एक रिवर्सल रणनीति के रूप में, यह सैद्धांतिक रूप से कुछ whipssaws से बचाता है और पारंपरिक बोलिंगर बैंड्स रणनीतियों की तुलना में लाभप्रदता में सुधार करता है। हालांकि, बोलिंगर बैंड्स में खामियां, चलती औसत को मजबूत व्यावहारिक अनुप्रयोग के लिए आगे अनुकूलन और जोखिम प्रबंधन की आवश्यकता होती है।
/*backtest start: 2023-09-30 00:00:00 end: 2023-10-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © gsanson66 //This strategy uses the well-known Bollinger Bands Indicator //@version=5 strategy("BOLLINGER BANDS BACKTESTING", shorttitle="BB BACKTESTING", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=950, commission_type=strategy.commission.percent, commission_value=0.18) //----------------------------------------FUNCTIONS---------------------------------------// //@function Displays text passed to `txt` when called. debugLabel(txt, color) => label.new(bar_index, high, text = txt, color=color, style = label.style_label_lower_right, textcolor = color.black, size = size.small) //@function which looks if the close date of the current bar falls inside the date range inBacktestPeriod(start, end) => (time >= start) and (time <= end) //---------------------------------------USER INPUTS--------------------------------------// //Technical parameters bbLength = input.int(defval=20, minval=1, title="BB Length", group="Technical Parameters") mult = input.float(defval=2, minval=0.1, title="Standard Deviation Multipler", group="Technical Parameters") smaLength = input.int(defval=20, minval=1, title="SMA Exit Signal Length", group="Technical Parameters") //Money Management fixedRatio = input.int(defval=400, minval=1, title="Fixed Ratio Value ($)", group="Money Management") increasingOrderAmount = input.int(defval=200, minval=1, title="Increasing Order Amount ($)", group="Money Management") //Backtesting period startDate = input(title="Start Date", defval=timestamp("1 Jan 2020 00:00:00"), group="Backtesting Period") endDate = input(title="End Date", defval=timestamp("1 July 2024 00:00:00"), group="Backtesting Period") //----------------------------------VARIABLES INITIALISATION-----------------------------// strategy.initial_capital = 50000 //Exit SMA smaExit = ta.sma(close, smaLength) //BB Calculation basis = ta.sma(close, bbLength) dev = mult * ta.stdev(close, bbLength) upperBB = basis + dev lowerBB = basis - dev //Money management equity = strategy.equity - strategy.openprofit var float capital_ref = strategy.initial_capital var float cashOrder = strategy.initial_capital * 0.95 //Backtesting period bool inRange = na //------------------------------CHECKING SOME CONDITIONS ON EACH SCRIPT EXECUTION-------------------------------// //Checking if the date belong to the range inRange := true //Checking performances of the strategy if equity > capital_ref + fixedRatio spread = (equity - capital_ref)/fixedRatio nb_level = int(spread) increasingOrder = nb_level * increasingOrderAmount cashOrder := cashOrder + increasingOrder capital_ref := capital_ref + nb_level*fixedRatio if equity < capital_ref - fixedRatio spread = (capital_ref - equity)/fixedRatio nb_level = int(spread) decreasingOrder = nb_level * increasingOrderAmount cashOrder := cashOrder - decreasingOrder capital_ref := capital_ref - nb_level*fixedRatio //Checking if we close all trades in case where we exit the backtesting period if strategy.position_size!=0 and not inRange strategy.close_all() debugLabel("END OF BACKTESTING PERIOD : we close the trade", color=color.rgb(116, 116, 116)) //-----------------------------------EXIT SIGNAL------------------------------// if strategy.position_size > 0 and close < smaExit strategy.close("Long") if strategy.position_size < 0 and close > smaExit strategy.close("Short") //----------------------------------LONG/SHORT CONDITION---------------------------// //Long Condition if close > upperBB and inRange qty = cashOrder/close strategy.entry("Long", strategy.long, qty) //Short Condition if close < lowerBB and inRange qty = cashOrder/close strategy.entry("Short", strategy.short, qty) //---------------------------------PLOTTING ELEMENT----------------------------------// plot(smaExit, color=color.orange) upperBBPlot = plot(upperBB, color=color.blue) lowerBBPlot = plot(lowerBB, color=color.blue) fill(upperBBPlot, lowerBBPlot, title = "Background", color=strategy.position_size>0 ? color.rgb(0, 255, 0, 90) : strategy.position_size<0 ? color.rgb(255, 0, 0, 90) : color.rgb(33, 150, 243, 95))