यह रणनीति 24 अवधि के डॉनचियन चैनल का उपयोग 200 अवधि के चलती औसत के साथ मिलकर मुख्य ट्रेडिंग संकेतों के रूप में करती है। जब कीमत नीचे की ओर उतार-चढ़ाव करती है तो शॉर्ट पोजीशन और जब यह ऊपर की ओर उतार-चढ़ाव करती है तो लंबी पोजीशन खोली जाती है।
रणनीतिक तर्क मुख्य रूप से निम्नलिखित बिंदुओं पर आधारित हैः
डोंचियन चैनल का निर्माण पिछले 24 अवधियों के उच्चतम उच्च और निम्नतम निम्न का उपयोग करके किया जाता है। जब मूल्य इस चैनल से बाहर निकलता है, तो यह बड़े ऊपर या नीचे की ओर बढ़ने की संभावना को इंगित करता है।
200-अवधि चलती औसत लंबी/लघु पूर्वाग्रह के लिए एक फ़िल्टर के रूप में कार्य करती है। यदि कीमत डोंचियन चैनल को तोड़ती है और चलती औसत के दूसरी तरफ है, तो एक उलट होने की संभावना हो सकती है।
प्रवेश संकेत हैंः
शॉर्ट पोजीशन के लिए स्टॉप लॉस को पिछले 3 बार के उच्चतम उच्च पर सेट किया जाता है। ले लाभ को प्रवेश मूल्य माइनस 3 बार स्टॉप लॉस और प्रवेश मूल्य के बीच अंतर पर सेट किया जाता है। लंबी स्थिति स्टॉप लॉस और ले लाभ तर्क विपरीत है।
इस रणनीति का लाभ यह है कि डोंचियन चैनल और चलती औसत फ़िल्टर को मिलाकर, यह झूठे संकेतों को एक एकल संकेतक पर निर्भर होने से बचाता है, जिससे जीत दर में काफी सुधार होता है।
इस रणनीति के निम्नलिखित फायदे हैंः
उच्च जीत दर: डोंचियन चैनल और चलती औसत फिल्टर को मिलाकर, एक ही संकेतक के झूठे संकेतों के कारण अनावश्यक नुकसान से बचा जाता है।
नियंत्रित जोखिमः स्टॉप लॉस स्तरों के रूप में हालिया उच्चतम उच्चतम/निम्नतम निम्नतम का उपयोग करने से नुकसान में व्यापार पर नकारात्मकता प्रभावी ढंग से प्रबंधित होती है। 3: 1 लाभ-नुकसान अनुपात आकर्षक है।
सरल और लागू करने में आसानः तर्क सरल, सहज संकेतक का उपयोग करता है जो समझने और निष्पादित करने में आसान हैं।
बाजारों और समय सीमाओं में स्थिरता: अपेक्षाकृत कुछ मापदंडों के साथ, रणनीति विभिन्न उत्पादों और समय सीमाओं में स्थिर है।
इस रणनीति के मुख्य जोखिम निम्नलिखित हैंः
अत्यधिक बाजार की चाल: बहुत मजबूत एकतरफा रुझान स्टॉप लॉस को ट्रिगर कर सकते हैं जिससे बढ़े हुए नुकसान हो सकते हैं। इसे स्टॉप को चौड़ा करके या स्थिति के आकार को कम करके कम किया जा सकता है।
समय से पहले बाहर निकलने का संकेत जोखिमः नए विपरीत संकेतों पर बाहर निकलने से बार-बार प्रवेश और बाहर निकलने के कारण अस्थिर बाजारों में ओवर-ट्रेडिंग हो सकती है। बाहर निकलने के तर्क का अनुकूलन इससे निपटने में मदद कर सकता है।
पैरामीटर अनुकूलन जोखिमः डोंचियन चैनल लुकबैक अवधि या चलती औसत के खराब पैरामीटर ट्यूनिंग से देरी या लगातार संकेत हो सकते हैं। इसे कठोर अनुकूलन और संयोजन परीक्षण के माध्यम से कम किया जा सकता है।
इस रणनीति को निम्नलिखित तरीकों से बढ़ाया जा सकता हैः
मापदंडों के सर्वोत्तम संयोजन को खोजने के लिए डोनचियन चैनल और चलती औसत लुकबैक अवधि का अनुकूलन करें।
जीत दर बनाम इनाम/जोखिम को संतुलित करने के लिए लाभ अनुपात लेने के लिए विभिन्न स्टॉप लॉस का परीक्षण करें।
मजबूतता बढ़ाने के लिए एमएसीडी, आरएसआई आदि जैसे संकेतकों का उपयोग करके प्रवेश संकेतों पर अतिरिक्त फ़िल्टर शामिल करें।
अस्थिर बाजारों में अनावश्यक निकास से बचने के लिए निकास तर्क को अनुकूलित करें। निकास के लिए प्रवृत्ति मीट्रिक पर भी विचार किया जा सकता है।
इस रणनीतिक ढांचे का उपयोग करके नए संयोजन विकसित करें, उदाहरण के लिए अन्य चैनलों, बैंड संकेतकों आदि के साथ।
स्लो मूविंग एवरेज की रणनीति में सिग्नल जनरेशन के लिए डॉनचियन चैनल और मूविंग एवरेज के संयोजन का उपयोग करके स्पष्ट, समझने में आसान तर्क है। यह हाइब्रिड दृष्टिकोण स्थिरता और जीत दर में काफी सुधार करता है। 3: 1 लाभ से हानि अनुपात भी अच्छी इनाम क्षमता प्रदान करता है। जबकि चरम चाल और संकेत त्रुटियों के संदर्भ में जोखिम मौजूद हैं, कई अनुकूलन अवसर प्रदर्शन में सुधार और मुख्य रणनीति का विस्तार कर सकते हैं।
/*backtest start: 2023-11-06 00:00:00 end: 2023-12-06 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/ // © Mysteriown //@version=4 strategy("Lagged Donchian Channel + EMA", overlay = true) //tradePeriod = time(timeframe.period,"0000-0000:1234567")?true:false // ------------------------------------------ // // ----------------- Inputs ----------------- // // ------------------------------------------ // period = input(24, title="Channel's periods") Pema = input(200, title="EMA's periods ?") ratio = input(3, title="Ratio TP", type=input.float) loss = input(20, title="Risk Loss ($)") lev = input(5, title="Leverage *...") chan = input(title="Plot channel ?", type=input.bool, defval=false) Bpos = input(title="Plot Bull positions ?", type=input.bool, defval=false) bpos = input(title="Plot Bear positions ?", type=input.bool, defval=false) labels = input(title="Plot labels of bets ?", type=input.bool, defval=true) supp = input(title="Delete last labels ?", type=input.bool, defval=true) // ------------------------------------------ // // ---------- Canal, EMA and arrow ---------- // // ------------------------------------------ // pema = ema(close,Pema) plot(pema, title="EMA", color=color.blue) canalhaut = highest(period)[1] canalbas = lowest(period)[1] bear = close[1] > canalhaut[1] and close < open and high > pema bull = close[1] < canalbas[1] and open < close and low < pema canalhautplot = plot(chan? canalhaut:na, color=color.yellow) canalbasplot = plot(chan? canalbas:na, color=color.yellow) plotshape(bear, title='Bear', style=shape.triangledown, location=location.abovebar, color=color.red, offset=0) plotshape(bull, title='Bull', style=shape.triangleup, location=location.belowbar, color=color.green, offset=0) // ------------------------------------------ // // ------------- Position Short ------------- // // ------------------------------------------ // SlShort = highest(3) BidShort = close[1] TpShort = BidShort-((SlShort-BidShort)*ratio) deltaShort = (SlShort-BidShort)/BidShort betShort = round(loss/(lev*deltaShort)*100)/100 cryptShort = round(betShort*lev/BidShort*1000)/1000 // if bear[1] and labels //and low < low[1] // Lbear = label.new(bar_index, na, text="SHORT\n\nSL: " + tostring(SlShort) + "\n\nBid: " + tostring(BidShort) + "\n\nTP: " + tostring(TpShort) + "\n\nMise: " + tostring(betShort) + "\n\nCryptos: " + tostring(cryptShort), color=color.red, textcolor=color.white, style=label.style_labeldown, yloc=yloc.abovebar) // label.delete(supp ? Lbear[1] : na) var bentry=0.0 var bsl=0.0 var btp=0.0 if bear[1] and low < low[1] bentry:=BidShort bsl:=SlShort btp:=TpShort pbentry = plot(bpos? bentry:na, color=color.orange) plot(bpos? (bentry+btp)/2:na, color=color.gray) pbsl = plot(bpos? bsl:na, color=color.red) pbtp = plot(bpos? btp:na, color=color.green) fill(pbentry,pbsl, color.red, transp=70) fill(pbentry,pbtp, color.green, transp=70) // ------------------------------------------ // // ------------- Position Long -------------- // // ------------------------------------------ // SlLong = lowest(3) BidLong = close[1] TpLong = BidLong + ((BidLong - SlLong) * ratio) deltaBull = (BidLong - SlLong)/BidLong betLong = round(loss/(lev*deltaBull)*100)/100 cryptLong = round(betLong*lev/BidLong*1000)/1000 // if bull[1] and labels //and high > high[1] // Lbull = label.new(bar_index, na, text="LONG\n\nSL: " + tostring(SlLong) + "\n\nBid: " + tostring(BidLong) + "\n\nTP: " + tostring(TpLong) + "\n\nMise: " + tostring(betLong) + "\n\nCryptos: " + tostring(cryptLong), color=color.green, textcolor=color.white, style=label.style_labelup, yloc=yloc.belowbar) // label.delete(supp ? Lbull[1] : na) var Bentry=0.0 var Bsl=0.0 var Btp=0.0 if bull[1] and high > high[1] Bentry:=BidLong Bsl:=SlLong Btp:=TpLong pBentry = plot(Bpos?Bentry:na, color=color.orange) plot(Bpos?(Bentry+Btp)/2:na, color=color.gray) pBsl = plot(Bpos?Bsl:na, color=color.red) pBtp = plot(Bpos?Btp:na, color=color.green) fill(pBentry,pBsl, color.red, transp=70) fill(pBentry,pBtp, color.green, transp=70) // ------------------------------------------ // // --------------- Strategie ---------------- // // ------------------------------------------ // Bear = bear[1] and low < low[1] Bull = bull[1] and high > high[1] if (Bear and strategy.opentrades==0) strategy.order("short", false, 1, limit=BidShort) strategy.exit("exit", "short", limit = TpShort, stop = SlShort) strategy.cancel("short", when = high > SlShort or low < (BidShort+TpShort)/2) strategy.close("short", when=bull) if (Bull and strategy.opentrades==0) strategy.order("long", true, 1, limit=BidLong) strategy.exit("exit", "long", limit = TpLong, stop = SlLong) strategy.cancel("long", when = low < SlLong or high > (BidLong+TpLong)/2) strategy.close("long", when=bear)