रेंज फिल्टर खरीदें बेचें सिग्नल रणनीति एक बहुत ही व्यावहारिक मात्रात्मक ट्रेडिंग रणनीति है। यह कम अस्थिरता वाले बाजारों में झूठे संकेतों को कम करने और उच्च अस्थिरता वाले बाजारों में सिग्नल की गुणवत्ता में सुधार करने के लिए खरीद और बिक्री संकेतों को फ़िल्टर करने के लिए मूल्य उतार-चढ़ाव रेंज का उपयोग करता है। रणनीति का नाम सटीक रूप से रणनीति के मुख्य कार्य का सारांश देता है।
रणनीति पहले एक निश्चित अवधि में परिसंपत्ति मूल्य के उतार-चढ़ाव की सीमा की गणना करती है। विशेष रूप से, यह मूल्य उतार-चढ़ाव के आयाम को निर्धारित करने के लिए निर्दिष्ट अवधि के भीतर उच्चतम मूल्य और सबसे कम मूल्य के बीच अंतर की गणना करती है।
इसके बाद, यह खरीद और बिक्री संकेत उत्पन्न करेगा। हालांकि, सभी संकेत प्रवेश को ट्रिगर नहीं करेंगे, लेकिन मूल्य उतार-चढ़ाव रेंज फ़िल्टरिंग शर्तों को पूरा करने की आवश्यकता है। उदाहरण के लिए, एक खरीद संकेत केवल तब जारी किया जाता है जब मूल्य उतार-चढ़ाव रेंज के माध्यम से टूट जाता है।
इस प्रकार, रणनीति कम अस्थिरता वाले बाजार वातावरण में अधिकांश झूठे संकेतों को फ़िल्टर करती है, अनावश्यक प्रवेश से बचती है। जबकि उच्च अस्थिरता में, यह लाभ के लिए बड़े दिशात्मक आंदोलनों को पकड़ती है।
इस रणनीति का सबसे बड़ा लाभ यह है कि यह संकेतों की फ़िल्टरिंग शक्ति को गतिशील रूप से समायोजित कर सकती है। कम अस्थिरता में, यह केवल उच्च गुणवत्ता वाले संकेतों का चयन करती है; जबकि उच्च अस्थिरता में, यह बाजार द्वारा प्रदान किए गए अधिक अवसरों को जब्त कर सकती है।
निश्चित पैरामीटर फ़िल्टर की तुलना में, यह रणनीति अधिक बुद्धिमान और अनुकूलनशील है। कोई फर्क नहीं पड़ता कि बाजार किस स्थिति में है, यह बेहतर जोखिम पुरस्कार प्रदान करता है।
इसके अतिरिक्त, एक एकल परिचालन स्थिति की तुलना में, यह रणनीति अधिक विश्वसनीय ट्रेडिंग संकेत प्रदान करने के लिए प्रवृत्ति दिशात्मक निर्णय को शामिल करती है। साथ ही, इसमें व्यक्तिगत ट्रेडों के जोखिम को प्रभावी ढंग से नियंत्रित करने के लिए स्टॉप लॉस और ले लाभ कार्य भी हैं।
रणनीति का मुख्य जोखिम अस्थिरता सीमा मापदंडों की स्थापना में निहित है। यदि निर्धारित सीमा बहुत बड़ी या बहुत छोटी है, तो यह संकेत की गुणवत्ता और लाभ के अवसरों को प्रतिकूल रूप से प्रभावित करेगा।
इसके अतिरिक्त, इस रणनीति में कम लाभ के अवसर हैं, जो कि अल्पकालिक अस्थिरता वाले बाजारों में हैं। विभिन्न चक्र प्रणालियों के संयोजन का उपयोग करने से इस समस्या को कम करने में मदद मिलती है।
इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः
अनुकूलनशील पैरामीटर एल्गोरिदम का उपयोग करने के लिए स्वचालित रूप से अस्थिरता सीमा मापदंडों को अनुकूलित करने के लिए उन्हें अधिक बुद्धिमान और गतिशील बनाने के लिए।
समेकन के जाल से बचने के लिए बड़े चक्र के रुझानों के आधार पर फ़िल्टरिंग नियम बढ़ाएं।
एक प्रणाली बनाने और समग्र स्थिरता में सुधार के लिए रणनीति के विभिन्न चक्रों को मिलाएं ।
पैरामीटर सेटिंग्स और फ़िल्टरिंग नियमों के प्रभाव को बेहतर बनाने के लिए मशीन लर्निंग एल्गोरिदम जोड़ें।
रेंज फिल्टर खरीदें बेचें सिग्नल रणनीति एक बहुत ही व्यावहारिक और प्रभावी मात्रात्मक ट्रेडिंग रणनीति है। यह गतिशील रूप से फ़िल्टरिंग तीव्रता को समायोजित कर सकती है और विभिन्न बाजार वातावरण में बेहतर जोखिम पुरस्कार प्रदान कर सकती है। साथ ही, इस रणनीति को अनुकूलित करने में अभी भी बहुत अधिक क्षमता है, खासकर पैरामीटर अनुकूलन और नियम अनुकूलन में। कुल मिलाकर, यह रणनीति निरंतर अतिरिक्त रिटर्न का पीछा करने वाले मात्रात्मक व्यापारियों के लिए एक उत्कृष्ट आधार समाधान प्रदान करती है।
/*backtest start: 2023-03-02 00:00:00 end: 2024-03-07 00:00:00 period: 1d basePeriod: 1h 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/ // Credits to the original Script - Range Filter DonovanWall https://www.tradingview.com/script/lut7sBgG-Range-Filter-DW/ // This version is the old version of the Range Filter with less settings to tinker with //@version=5 strategy(title='Range Filter - B&S Signals', shorttitle='[Doan]_RF-B&S Signals', overlay=true) //----------------------------------------------------------------------------------------------------------------------------------------------------------------- //Functions //----------------------------------------------------------------------------------------------------------------------------------------------------------------- longLossPerc = input.float(title='Long Stop Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01 shortLossPerc = input.float(title='Short Stop Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01 longTakePerc = input.float(title='Long Take(%)', minval=0.0, step=0.1, defval=1) * 0.01 shortTakePerc = input.float(title='Short Take (%)', minval=0.0, step=0.1, defval=1) * 0.01 emaLength = input.int(200, title="EMA Length") // Determine stop loss price //Range Size Function rng_size(x, qty, n) => wper = n * 2 - 1 avrng = ta.ema(math.abs(x - x[1]), n) AC = ta.ema(avrng, wper) * qty rng_size = AC //Range Filter Function rng_filt(x, rng_, n) => r = rng_ var rfilt = array.new_float(2, x) array.set(rfilt, 1, array.get(rfilt, 0)) if x - r > array.get(rfilt, 1) array.set(rfilt, 0, x - r) if x + r < array.get(rfilt, 1) array.set(rfilt, 0, x + r) rng_filt1 = array.get(rfilt, 0) hi_band = rng_filt1 + r lo_band = rng_filt1 - r rng_filt = rng_filt1 [hi_band, lo_band, rng_filt] //----------------------------------------------------------------------------------------------------------------------------------------------------------------- //Inputs //----------------------------------------------------------------------------------------------------------------------------------------------------------------- //Range Source rng_src = input(defval=close, title='Swing Source') //Range Period rng_per = input.int(defval=20, minval=1, title='Swing Period') //Range Size Inputs rng_qty = input.float(defval=3.5, minval=0.0000001, title='Swing Multiplier') //Bar Colors use_barcolor = input(defval=false, title='Bar Colors On/Off') //----------------------------------------------------------------------------------------------------------------------------------------------------------------- //Definitions //----------------------------------------------------------------------------------------------------------------------------------------------------------------- //Range Filter Values [h_band, l_band, filt] = rng_filt(rng_src, rng_size(rng_src, rng_qty, rng_per), rng_per) //Direction Conditions var fdir = 0.0 fdir := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir upward = fdir == 1 ? 1 : 0 downward = fdir == -1 ? 1 : 0 //Trading Condition longCond = rng_src > filt and rng_src > rng_src[1] and upward > 0 or rng_src > filt and rng_src < rng_src[1] and upward > 0 shortCond = rng_src < filt and rng_src < rng_src[1] and downward > 0 or rng_src < filt and rng_src > rng_src[1] and downward > 0 CondIni = 0 CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1] longCondition = longCond and CondIni[1] == -1 shortCondition = shortCond and CondIni[1] == 1 //Colors filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc bar_color = upward and rng_src > filt ? rng_src > rng_src[1] ? #05ff9b : #00b36b : downward and rng_src < filt ? rng_src < rng_src[1] ? #ff0583 : #b8005d : #cccccc ema = ta.ema(close, emaLength) //----------------------------------------------------------------------------------------------------------------------------------------------------------------- //Outputs //----------------------------------------------------------------------------------------------------------------------------------------------------------------- longStopPrice = strategy.position_avg_price * (1 - longLossPerc) shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc) longTakePrice = strategy.position_avg_price * (1 + longTakePerc) shortTakePrice = strategy.position_avg_price * (1 - shortTakePerc) //Filter Plot filt_plot = plot(filt, color=filt_color, linewidth=3, title='Filter', transp=67) //Band Plots h_band_plot = plot(h_band, color=color.new(#05ff9b, 100), title='High Band') l_band_plot = plot(l_band, color=color.new(#ff0583, 100), title='Low Band') //Band Fills fill(h_band_plot, filt_plot, color=color.new(#00b36b, 92), title='High Band Fill') fill(l_band_plot, filt_plot, color=color.new(#b8005d, 92), title='Low Band Fill') //Bar Color barcolor(use_barcolor ? bar_color : na) // Entry strategy.entry("Long", strategy.long, when=longCondition) strategy.entry("Short", strategy.short, when=shortCondition) plot(ema) //Plot Buy and Sell Labels plotshape(longCondition, title='Buy Signal', text='BUY', textcolor=color.white, style=shape.labelup, size=size.normal, location=location.belowbar, color=color.new(color.green, 0)) plotshape(shortCondition, title='Sell Signal', text='SELL', textcolor=color.white, style=shape.labeldown, size=size.normal, location=location.abovebar, color=color.new(color.red, 0)) //Alerts alertcondition(longCondition, title='Buy Alert', message='BUY') alertcondition(shortCondition, title='Sell Alert', message='SELL')