यह रणनीति डोंचियन मूल्य चैनल संकेतक के आधार पर विकसित की गई है। संकेतक एक निश्चित अवधि में उच्चतम और निम्नतम कीमतों की गणना करके एक मूल्य चैनल बनाता है। रणनीति दो-तरफा व्यापार को लागू करने के लिए मूल्य चैनल का उपयोग करती है और स्टॉप लॉस और ले लाभ की कीमतें निर्धारित करती है। स्टॉप लॉस की कीमत मूल्य चैनल की मध्य रेखा पर तय की जाती है, और ले लाभ की कीमत मूल्य चैनल की ऊपरी और निचली सीमाओं से परे एक निश्चित प्रतिशत पर सेट की जाती है। रणनीति स्टॉप लॉस और ले लाभ की ट्रैकिंग को भी लागू करती है।
सबसे पहले, रणनीति पैरामीटर पीसीएलईएन के आधार पर मूल्य चैनल की ऊपरी सीमा एच और निचली सीमा एल की गणना करती है। मध्य रेखा केंद्र मूल्य चैनल की ऊपरी और निचली सीमाओं का औसत है। फिर, लंबी और छोटी पदों के लिए लाभ लेने के मापदंडों tp के अनुसार लाभ मूल्य tpl और tps की गणना की जाती है। स्टॉप लॉस मूल्य मूल्य चैनल के मध्य रेखा केंद्र पर तय किया जाता है। जब कीमत मूल्य चैनल के माध्यम से टूटती है, तो विभिन्न दिशाओं की ट्रेडिंग पदों की गणना जोखिम के आकार के अनुसार की जाती है। रणनीति बंद हो जाएगी जब मूल्य चैनल में फिर से प्रवेश करता है। इसके अलावा, समय फ़िल्टरिंग को केवल निर्दिष्ट तिथि सीमा के भीतर व्यापार करने के लिए सेट किया गया है।
व्यापार का विशिष्ट तर्क हैः
लॉन्ग एंट्री सिग्नलः ओपन लॉन्ग जब कीमत चैनल की ऊपरी सीमा h से अधिक हो और चैनल में वापस गिर जाए
लॉन्ग एक्जिट सिग्नलः जब कीमत चैनल के मध्य रेखा केंद्र से कम हो (स्टॉप लॉस) या लाभ लेने की कीमत से अधिक हो (लाभ लें) तो लॉन्ग बंद करें
शॉर्ट एंट्री सिग्नलः जब कीमत चैनल की निचली सीमा l से कम हो और चैनल में वापस गिर जाए तो शॉर्ट खोलें
शॉर्ट एक्जिट सिग्नलः शॉर्ट बंद करें जब कीमत चैनल के मध्य रेखा केंद्र से अधिक हो (स्टॉप लॉस) या लाभ लेने की कीमत से कम हो (लाभ लें)
इस रणनीति के लाभ इस प्रकार हैंः
इस रणनीति में कुछ जोखिम भी हैंः
इन जोखिमों को मापदंडों के समायोजन और मैन्युअल निगरानी से कम और नियंत्रित किया जा सकता है।
इस रणनीति को निम्नलिखित पहलुओं में भी अनुकूलित किया जा सकता हैः
निष्कर्ष के रूप में, यह मूल्य चैनल संकेतकों का उपयोग करके दो-तरफा व्यापार को लागू करने के लिए एक प्रभावी रणनीति है। उचित स्टॉप लॉस, ले लाभ, और स्थिति आकार नियंत्रण मॉड्यूल के साथ, जोखिमों को अच्छी तरह से नियंत्रित किया जा सकता है। कुछ अनुकूलन और समायोजन के साथ, यह एक शक्तिशाली मात्रात्मक व्यापार रणनीति बन सकती है।
/*backtest start: 2023-01-31 00:00:00 end: 2024-01-31 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2020 //@version=4 strategy(title = "Noro's RiskDonchian Strategy", shorttitle = "RiskDonchian str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") tp = input(defval = 20.0, minval = 1, title = "Take-profit, %") tptype = input(defval = "2. Fix", options = ["1. None", "2. Fix", "3. Trailing"], title = "Take-profit type") sltype = input(defval = "2. Center", options = ["1. None", "2. Center"], title = "Take-profit type") risklong = input(5.0, minval = 0.0, maxval = 99.9, title = "Risk size for long, %") riskshort = input(5.0, minval = 0.0, maxval = 99.9, title = "Risk size for short, %") pclen = input(50, minval = 1, title = "Price Channel Length") showll = input(true, defval = true, title = "Show lines") showbg = input(false, defval = false, title = "Show Background") showof = input(true, defval = true, title = "Show Offset") showlabel = input(true, defval = true, title = "Show label") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Price Channel h = highest(high, pclen) l = lowest(low, pclen) center = (h + l) / 2 //Take-profit tpl = 0.0 tpl := tptype == "2. Fix" and strategy.position_size > 0 ? tpl[1] : h * (100 + tp) / 100 //Stop-loss tps = 0.0 tps := tptype == "2. Fix" and strategy.position_size < 0 ? tps[1] : l * (100 - tp) / 100 //Lines tplcol = showll and needlong and tptype != "1. None" ? color.lime : na pclcol = showll and needlong ? color.blue : na sllcol = showll and needlong and sltype != "1. None" ? color.red : na tpscol = showll and needshort and tptype != "1. None" ? color.lime : na pcscol = showll and needshort ? color.blue : na slscol = showll and needshort and sltype != "1. None" ? color.red : na offset = showof ? 1 : 0 plot(tpl, offset = offset, color = tplcol, title = "TP Long") plot(h, offset = offset, color = pclcol, title = "Channel High") plot(center, offset = offset, color = sllcol, title = "SL Long") plot(center, offset = offset, color = slscol, title = "SL Short") plot(l, offset = offset, color = pcscol, title = "Channel Low") plot(tps, offset = offset, color = tpscol, title = "TP Short") //Background size = strategy.position_size bgcol = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na bgcolor(bgcol, transp = 70) //Lot size risksizelong = -1 * risklong risklonga = ((center / h) - 1) * 100 coeflong = abs(risksizelong / risklonga) lotlong = (strategy.equity / close) * coeflong risksizeshort = -1 * riskshort riskshorta = ((center / l) - 1) * 100 coefshort = abs(risksizeshort / riskshorta) lotshort = (strategy.equity / close) * coefshort //Trading truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59) mo = 0 mo := strategy.position_size != 0 ? 0 : high >= center[1] and low <= center[1] ? 1 : mo[1] if h > 0 longlimit = tptype == "1. None" ? na : tpl longstop = sltype == "1. None" ? na : center strategy.entry("Long", strategy.long, lotlong, stop = h, when = strategy.position_size <= 0 and needlong and truetime and mo) strategy.exit("TP Long", "Long", limit = longlimit, stop = longstop) shortlimit = tptype == "1. None" ? na : tps shortstop = sltype == "1. None" ? na : center strategy.entry("Short", strategy.short, lotshort, stop = l, when = strategy.position_size >= 0 and needshort and truetime and mo) strategy.exit("Exit Short", "Short", limit = shortlimit, stop = shortstop) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all() strategy.cancel("Long") strategy.cancel("Short") if showlabel //Drawdown max = 0.0 max := max(strategy.equity, nz(max[1])) dd = (strategy.equity / max - 1) * 100 min = 100.0 min := min(dd, nz(min[1])) //Label min := round(min * 100) / 100 labeltext = "Drawdown: " + tostring(min) + "%" var label la = na label.delete(la) tc = min > -100 ? color.white : color.red osx = timenow + round(change(time)*10) osy = highest(100)