यह रणनीति सीसीआई संकेतक और गति संकेतक का उपयोग बाजार के रुझानों की पहचान करने और जब ओवरबॉट / ओवरसोल्ड क्षेत्र में अंतर दिखाई देता है तो प्रवेश करने के लिए आरएसआई संकेतक के साथ संयुक्त होती है। यह रुझानों और औसत प्रतिगमन रेंज की पहचान करने के लिए बोलिंगर बैंड का भी उपयोग करती है। यह रणनीति प्रभावी रूप से ब्रेकआउट और पुलबैक की पहचान कर सकती है, प्रवृत्ति की शुरुआत में जल्दी पहुंच सकती है, और मापदंडों को समायोजित करके विभिन्न उत्पादों के अनुकूल हो सकती है।
सबसे पहले, यह रणनीति सीसीआई सूचक या गति सूचक द्वारा 0 रेखा के ऊपर/नीचे पार करने वाले लंबे और छोटे संकेतों को निर्धारित करती है। इसके अलावा, यह आवश्यक है कि गलत संकेतों से बचने के लिए आरएसआई ओवरबॉट/ओवरसोल्ड जोन में हो, अर्थात ओवरबॉट के लिए 65 से ऊपर और ओवरसोल्ड के लिए 35 से नीचे।
इसके अतिरिक्त, रणनीति अधिक विश्वसनीय संकेतों को सुनिश्चित करने के लिए आरएसआई तेजी / मंदी विचलन को निर्धारित करने का विकल्प चुन सकती है।
जब सीसीआई या गति लंबे संकेत को ट्रिगर करता है, और आरएसआई ओवरसोल्ड क्षेत्र में है, तो रणनीति जांच करेगी कि क्या पिछले उच्च और निम्न दोनों बोलिंगर बैंड औसत रेखा से ऊपर हैं। यदि हां, तो एक लंबा संकेत उत्पन्न होता है। इसके विपरीत, जब लघु संकेत ट्रिगर होता है और पिछले उच्च निम्न औसत रेखा से नीचे होते हैं, तो एक छोटा संकेत उत्पन्न होता है।
इस प्रकार रणनीति प्रवृत्ति और दोलन संकेतकों दोनों का उपयोग करती है, एक प्रवृत्ति में जल्दी से प्राप्त करने और औसत प्रतिगमन सीमा के साथ झूठे ब्रेकआउट से बचने के लिए। जब कीमत बोलिंगर बैंड से बाहर निकलती है, तो रणनीति लाभ को लॉक करने और आगे की ड्रॉडाउन को रोकने के लिए सभी पदों को बंद कर देगी।
प्रवृत्ति और दोलन संकेतकों का संयोजन प्रवृत्ति में जल्दी प्रवेश कर सकता है और सीमा बाजार में अनावश्यक पदों से बचा जा सकता है।
बोलिंगर बैंड का उपयोग करके मूल्य अंतर के साथ गलत ब्रेकआउट को प्रभावी ढंग से फ़िल्टर किया जाता है।
ऐतिहासिक आरएसआई की जाँच करने से गलत व्यापार संकेत उत्पन्न होने से बचा जाता है।
पूरी तरह से स्वचालित ट्रेडिंग बिना मैन्युअल हस्तक्षेप के, एल्गोरिथ्म ट्रेडिंग के लिए उपयुक्त है।
लचीला पैरामीटर समायोजन विभिन्न व्यापार उत्पादों के अनुकूल है।
स्टॉप लॉस और लाभ नियंत्रण जोखिम प्रभावी ढंग से ले लो।
अनुचित बोलिंगर बैंड मापदंडों के कारण अमान्य औसत प्रतिगमन पहचान हो सकती है।
गलत संकेतक मापदंडों से बहुत सारे झूठे संकेत उत्पन्न हो सकते हैं।
असफल ब्रेकआउट के लिए समय पर स्टॉप लॉस की आवश्यकता होती है जब कीमत औसत तक वापस खींचती है।
खराब तरलता से अप्रभावी ब्रेकआउट ट्रेडिंग हो सकती है।
वक्र के खराब फिट होने से बचने के लिए पर्याप्त ऐतिहासिक डेटा सुनिश्चित करें।
गलत ब्रेकआउट से बचने के लिए ट्रेडिंग सत्रों पर ध्यान दें।
अधिक स्थिर औसत प्रतिगमन सीमा के लिए बोलिंगर बैंड्स मापदंडों का अनुकूलन करें।
बेहतर अनुकूलन के लिए विभिन्न उत्पादों पर परीक्षण पैरामीटर।
ओवरसाइज सिंगल पोजीशन से बचने के लिए पोजीशन साइजिंग जोड़ें।
मुख्य रूप से सक्रिय घंटों में व्यापार करने के लिए ट्रेडिंग सत्र फ़िल्टर जोड़ें।
अधिक बुद्धिमान संकेत उत्पन्न करने के लिए मशीन लर्निंग मॉडल को शामिल करें।
बाजार के समग्र रुझान को निर्धारित करने के लिए अधिक डेटा स्रोतों को एकीकृत करें।
एक मजबूत संकेतक समूह बनाने के लिए अधिक संकेतक जोड़ें।
यह रणनीति प्रवृत्ति और दोलन संकेतकों को एकीकृत करती है ताकि प्रवृत्तियों को जल्दी से कैप्चर किया जा सके। बोलिंगर बैंड औसत और मूल्य अंतराल के साथ यह प्रभावी रूप से झूठे ब्रेकआउट से बचता है। लचीले मापदंड महान बैकटेस्ट परिणामों के साथ विभिन्न उत्पादों के अनुकूल होते हैं। अगले चरण अधिक मजबूती के लिए मापदंडों और मॉडल एसेम्बल का अनुकूलन करना है, और लंबे समय में लगातार अतिरिक्त रिटर्न प्राप्त करना है।
/*backtest start: 2022-10-18 00:00:00 end: 2023-10-24 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title='BroTheJo Strategy', shorttitle='BTJ', overlay=true) // Input settings ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum']) ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length') useDivergence = input.bool(false, title='Find Regular Bullish/Bearish Divergence') rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level') rsiOversold = input.int(35, minval=1, title='RSI Oversold Level') rsiLength = input.int(14, minval=1, title='RSI Length') plotMeanReversion = input.bool(true, 'Plot Mean Reversion Bands on the chart') emaPeriod = input(200, title='Lookback Period (EMA)') bandMultiplier = input.float(1.6, title='Outer Bands Multiplier') // CCI and Momentum calculation momLength = ccimomCross == 'Momentum' ? ccimomLength : 10 mom = close - close[momLength] cci = ta.cci(close, ccimomLength) ccimomCrossUp = ccimomCross == 'Momentum' ? ta.cross(mom, 0) : ta.cross(cci, 0) ccimomCrossDown = ccimomCross == 'Momentum' ? ta.cross(0, mom) : ta.cross(0, cci) // RSI calculation src = close up = ta.rma(math.max(ta.change(src), 0), rsiLength) down = ta.rma(-math.min(ta.change(src), 0), rsiLength) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down) oversoldAgo = rsi[0] <= rsiOversold or rsi[1] <= rsiOversold or rsi[2] <= rsiOversold or rsi[3] <= rsiOversold overboughtAgo = rsi[0] >= rsiOverbought or rsi[1] >= rsiOverbought or rsi[2] >= rsiOverbought or rsi[3] >= rsiOverbought // Regular Divergence Conditions bullishDivergenceCondition = rsi[0] > rsi[1] and rsi[1] < rsi[2] bearishDivergenceCondition = rsi[0] < rsi[1] and rsi[1] > rsi[2] // Mean Reversion Indicator meanReversion = plotMeanReversion ? ta.ema(close, emaPeriod) : na stdDev = plotMeanReversion ? ta.stdev(close, emaPeriod) : na upperBand = plotMeanReversion ? meanReversion + stdDev * bandMultiplier : na lowerBand = plotMeanReversion ? meanReversion - stdDev * bandMultiplier : na // Entry Conditions prevHigh = ta.highest(high, 1) prevLow = ta.lowest(low, 1) longEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) and (prevHigh >= meanReversion) and (prevLow >= meanReversion) shortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) and (prevHigh <= meanReversion) and (prevLow <= meanReversion) // Plotting oldLongEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) oldShortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) plotshape(oldLongEntryCondition, title='BUY', style=shape.triangleup, location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(oldShortEntryCondition, title='SELL', style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) // Strategy logic if (longEntryCondition) strategy.entry("Buy", strategy.long) if (shortEntryCondition) strategy.entry("Sell", strategy.short) // Close all open positions when outside of bands closeAll = (high >= upperBand) or (low <= lowerBand) if (closeAll) strategy.close_all("Take Profit/Cut Loss") // Plotting plot(upperBand, title='Upper Band', color=color.fuchsia, linewidth=1) plot(meanReversion, title='Mean', color=color.gray, linewidth=1) plot(lowerBand, title='Lower Band', color=color.blue, linewidth=1)