यह एक रणनीति है जो ट्रेंड जजमेंट के लिए चलती औसत और बोलिंगर बैंड का उपयोग करती है, ब्रेकआउट फ़िल्टरिंग और स्टॉप लॉस सिद्धांतों के साथ संयुक्त है। यह ट्रेंड परिवर्तन के समय समय पर संकेतों को कैप्चर कर सकती है, दोहरी चलती औसत फ़िल्टरिंग के माध्यम से झूठे संकेतों को कम कर सकती है, और स्टॉप लॉस सेट करके जोखिमों को नियंत्रित कर सकती है।
इस रणनीति में निम्नलिखित मुख्य भाग शामिल हैंः
रुझान का आकलनः मूल्य प्रवृत्ति का आकलन करने और तेजी और गिरावट के रुझानों को अलग करने के लिए एमएसीडी का उपयोग करें।
रेंज फ़िल्टरिंगः मूल्य उतार-चढ़ाव रेंज का न्याय करने के लिए बोलिंगर बैंड का उपयोग करें और उन संकेतों को फ़िल्टर करें जो रेंज के माध्यम से नहीं तोड़ते हैं।
दोहरी चलती औसत की पुष्टिः तेजी से ईएमए और धीमी ईएमए ट्रेंड संकेतों की पुष्टि करने के लिए दोहरी चलती औसत बनाते हैं। खरीद संकेत केवल तभी उत्पन्न होते हैं जब तेजी से ईएमए > धीमी ईएमए।
स्टॉप लॉस तंत्रः स्टॉप लॉस बिंदु सेट करें। जब कीमतें प्रतिकूल दिशाओं में स्टॉप लॉस बिंदुओं को तोड़ती हैं तो स्थिति को बंद करें।
प्रवेश संकेतों का तर्क हैः
जब एक ही समय में तीनों शर्तें पूरी हो जाती हैं, तो एक खरीद संकेत उत्पन्न होता है।
दो प्रकार की बंद पोजीशन होती है, ले लो लाभ और स्टॉप लॉस। ले लो लाभ बिंदु एक निश्चित प्रतिशत से गुणा की गई प्रवेश मूल्य है, और स्टॉप लॉस बिंदु एक निश्चित प्रतिशत से गुणा की गई प्रवेश मूल्य है। जब कीमत किसी भी बिंदु को तोड़ती है, तो बंद पोजीशन।
इस रणनीति के लाभ इस प्रकार हैंः
इस रणनीति में कुछ जोखिम भी हैंः
इन जोखिमों से निपटने के लिए, मापदंडों को समायोजित करके, स्टॉप लॉस पदों को सेट करके, आदि रणनीति को अनुकूलित किया जा सकता है।
इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः
विभिन्न पैरामीटर सेटिंग्स का परीक्षण करके और रिटर्न और शार्प अनुपात का मूल्यांकन करके, रणनीति की इष्टतम स्थिति पाई जा सकती है।
यह एक मात्रात्मक रणनीति है जो प्रवृत्ति निर्णय, रेंज फ़िल्टरिंग, दोहरी चलती औसत पुष्टि और स्टॉप लॉस विचारों का उपयोग करती है। यह प्रभावी रूप से प्रवृत्ति की दिशा निर्धारित कर सकती है और लाभ अधिकतमकरण और जोखिम नियंत्रण के बीच संतुलन बना सकती है। पैरामीटर अनुकूलन, मशीन लर्निंग और अन्य साधनों के माध्यम से, बेहतर परिणाम प्राप्त करने के लिए रणनीति में सुधार के लिए बहुत जगह है।
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="Range Filter Buy and Sell Strategies", shorttitle="Range Filter Strategies", overlay=true,pyramiding = 5) // Original Script > @DonovanWall // Adapted Version > @guikroth // // Updated PineScript to version 5 // Republished by > @tvenn // Strategizing by > @RonLeigh ////////////////////////////////////////////////////////////////////////// // Settings for 5min chart, BTCUSDC. For Other coin, change the parameters ////////////////////////////////////////////////////////////////////////// SS = input.bool(false,"Percentage Take Profit Stop Loss") longProfitPerc = input.float(title='LongProfit(%)', minval=0.0, step=0.1, defval=1.5) * 0.01 shortProfitPerc = input.float(title='ShortProfit(%)', minval=0.0, step=0.1, defval=1.5) * 0.01 longLossPerc = input.float(title='LongStop(%)', minval=0.0, step=0.1, defval=1.5) * 0.01 shortLossPerc = input.float(title='ShortStop(%)', minval=0.0, step=0.1, defval=1.5) * 0.01 // Color variables upColor = color.white midColor = #90bff9 downColor = color.blue // Source src = input(defval=close, title="Source") // Sampling Period // Settings for 5min chart, BTCUSDC. For Other coin, change the paremeters per = input.int(defval=100, minval=1, title="Sampling Period") // Range Multiplier mult = input.float(defval=3.0, minval=0.1, title="Range Multiplier") // Smooth Average Range smoothrng(x, t, m) => wper = t * 2 - 1 avrng = ta.ema(math.abs(x - x[1]), t) smoothrng = ta.ema(avrng, wper) * m smoothrng smrng = smoothrng(src, per, mult) // Range Filter rngfilt(x, r) => rngfilt = x rngfilt := x > nz(rngfilt[1]) ? x - r < nz(rngfilt[1]) ? nz(rngfilt[1]) : x - r : x + r > nz(rngfilt[1]) ? nz(rngfilt[1]) : x + r rngfilt filt = rngfilt(src, smrng) // Filter Direction upward = 0.0 upward := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1]) downward = 0.0 downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 : nz(downward[1]) // Target Bands hband = filt + smrng lband = filt - smrng // Colors filtcolor = upward > 0 ? upColor : downward > 0 ? downColor : midColor barcolor = src > filt and src > src[1] and upward > 0 ? upColor : src > filt and src < src[1] and upward > 0 ? upColor : src < filt and src < src[1] and downward > 0 ? downColor : src < filt and src > src[1] and downward > 0 ? downColor : midColor filtplot = plot(filt, color=filtcolor, linewidth=2, title="Range Filter") // Target hbandplot = plot(hband, color=color.new(upColor, 70), title="High Target") lbandplot = plot(lband, color=color.new(downColor, 70), title="Low Target") // Fills fill(hbandplot, filtplot, color=color.new(upColor, 90), title="High Target Range") fill(lbandplot, filtplot, color=color.new(downColor, 90), title="Low Target Range") // Bar Color barcolor(barcolor) // Break Outs longCond = bool(na) shortCond = bool(na) longCond := src > filt and src > src[1] and upward > 0 or src > filt and src < src[1] and upward > 0 shortCond := src < filt and src < src[1] and downward > 0 or src < filt and src > 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 // alertcondition(longCondition, title="Buy alert on Range Filter", message="Buy alert on Range Filter") // alertcondition(shortCondition, title="Sell alert on Range Filter", message="Sell alert on Range Filter") // alertcondition(longCondition or shortCondition, title="Buy and Sell alert on Range Filter", message="Buy and Sell alert on Range Filter") ////////////// 副 sensitivity = input(150, title='Sensitivity') fastLength = input(20, title='FastEMA Length') slowLength = input(40, title='SlowEMA Length') channelLength = input(20, title='BB Channel Length') multt = input(2.0, title='BB Stdev Multiplier') DEAD_ZONE = nz(ta.rma(ta.tr(true), 100)) * 3.7 calc_macd(source, fastLength, slowLength) => fastMA = ta.ema(source, fastLength) slowMA = ta.ema(source, slowLength) fastMA - slowMA calc_BBUpper(source, length, multt) => basis = ta.sma(source, length) dev = multt * ta.stdev(source, length) basis + dev calc_BBLower(source, length, multt) => basis = ta.sma(source, length) dev = multt * ta.stdev(source, length) basis - dev t1 = (calc_macd(close, fastLength, slowLength) - calc_macd(close[1], fastLength, slowLength)) * sensitivity e1 = calc_BBUpper(close, channelLength, multt) - calc_BBLower(close, channelLength, multt) trendUp = t1 >= 0 ? t1 : 0 trendDown = t1 < 0 ? -1 * t1 : 0 duoad = trendUp > 0 and trendUp > e1 kongad = trendDown > 0 and trendDown > e1 duo = longCondition and duoad kong = shortCondition and kongad //Alerts plotshape(longCondition and trendUp > e1 and trendUp > 0 , title="Buy Signal", text="Buy", textcolor=color.white, style=shape.labelup, size=size.small, location=location.belowbar, color=color.new(#aaaaaa, 20)) plotshape(shortCondition and trendDown > e1 and trendDown > 0 , title="Sell Signal", text="Sell", textcolor=color.white, style=shape.labeldown, size=size.small, location=location.abovebar, color=color.new(downColor, 20)) if longCondition and trendUp > e1 and trendUp > 0 strategy.entry('Long',strategy.long, comment = "buy" ) if shortCondition and trendDown > e1 and trendDown > 0 strategy.entry('Short',strategy.short, comment = "sell" ) longlimtPrice = strategy.position_avg_price * (1 + longProfitPerc) shortlimtPrice = strategy.position_avg_price * (1 - shortProfitPerc) longStopPrice = strategy.position_avg_price * (1 - longLossPerc) shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc) if (strategy.position_size > 0) and SS == true strategy.exit(id="Long",comment_profit = "Profit",comment_loss = "StopLoss", stop=longStopPrice,limit = longlimtPrice) if (strategy.position_size < 0) and SS == true strategy.exit(id="Short",comment_profit = "Profit",comment_loss = "StopLoss", stop=shortStopPrice,limit = shortlimtPrice)