गतिशील मूल्य चैनल ब्रेकआउट रणनीति डोंचियन मूल्य चैनल संकेतक पर आधारित एक मात्रात्मक ट्रेडिंग रणनीति है। यह रणनीति मूल्य चैनल की ऊपरी और निचली रेखाओं के अनुसार बाजार की प्रवृत्ति की दिशा का न्याय करती है, और जब कीमतें चैनल को तोड़ती हैं तो लंबी या छोटी स्थिति स्थापित करती है।
इस रणनीति का मुख्य विचार डोनचन मूल्य चैनल के ब्रेकआउट का उपयोग करना है। जब कीमत चैनल की ऊपरी सीमा को तोड़ती है, तो प्रवृत्ति की तलाश करने के लिए एक लंबी स्थिति स्थापित करें; जब कीमत चैनल की निचली सीमा को तोड़ती है, तो प्रवृत्ति की तलाश करने के लिए एक छोटी स्थिति स्थापित करें।
मूल्य चैनल की गणना निम्नलिखित सूत्रों द्वारा की जाती है:
ऊपरी रेखा = पिछले N अवधियों में उच्चतम उच्चतम
निचली रेखा = पिछले एन अवधियों में सबसे कम
मध्य रेखा = (ऊपरी रेखा + निचली रेखा) / 2
जहां N चैनल चक्र की लंबाई का प्रतिनिधित्व करता है। इस रणनीति के लिए डिफ़ॉल्ट 50 है।
जब नवीनतम के-लाइन की उच्चतम कीमत चैनल की ऊपरी सीमा को पार कर जाती है, तो लंबी स्थिति स्थापित की जाती है।
जब नवीनतम के-लाइन की सबसे कम कीमत चैनल की निचली सीमा को तोड़ती है, तो एक छोटी स्थिति स्थापित करें।
उदाहरण:
पूर्ववर्ती के-लाइन का उच्च बिंदु चैनल की ऊपरी सीमा से अधिक नहीं था;
वर्तमान के-लाइन का उच्चतम बिंदु चैनल की ऊपरी सीमा को तोड़ता है;
एक लंबी स्थिति स्थापित करें
बाहर निकलने के दो वैकल्पिक नियम हैंः
बंद लंबी स्थितिः स्टॉप लॉस की कीमत चैनल की निचली सीमा है;
बंद शॉर्ट पोजीशनः स्टॉप लॉस की कीमत चैनल की ऊपरी सीमा है।
कोई फर्क नहीं पड़ता कि लंबी या छोटी स्थिति है, सभी पदों को बंद करें जब कीमतें चैनल की मध्य रेखा से नीचे गिर जाती हैं।
जोखिम नियंत्रण चैनल आयाम और स्वीकार्य जोखिम प्रतिशत के आधार पर विशिष्ट स्टॉप लॉस दूरी की गणना करने के लिए आनुपातिक स्टॉप लॉस को अपनाता है।
लंबी स्टॉप लॉस दूरी = प्रवेश मूल्य * (1 - स्वीकार्य जोखिम प्रतिशत)
शॉर्ट स्टॉप लॉस दूरी = प्रवेश मूल्य * (1 + स्वीकार्य जोखिम प्रतिशत)
उदाहरण के लिए, यदि स्वीकार्य जोखिम 2% पर सेट किया गया है, तो प्रवेश मूल्य $10,000 है, तो लंबी स्थिति के लिए स्टॉप लॉस लाइन 10,000 * (1 - 2%) = $9,800 है।
जब कीमतें चैनल की ऊपरी और निचली सीमाओं को तोड़ती हैं, तो एक नई दिशात्मक प्रवृत्ति शुरू होने की अत्यधिक संभावना होती है। इस समय पदों को लेना अपेक्षाकृत बड़े मूल्य आंदोलनों को पकड़ सकता है।
आनुपातिक स्टॉप लॉस का प्रयोग एकल हानि को स्वीकार्य सीमा के भीतर रख सकता है।
चैनल चक्र, जोखिम अनुपात, स्टॉप लॉस विधि जैसे मापदंडों को अनुकूलित और अधिक बाजार वातावरण के अनुकूल करने के लिए संयुक्त किया जा सकता है।
चैनल सीमाओं के मूल्य ब्रेकआउट जरूरी नहीं कि एक प्रवृत्ति का गठन करें, असफल ब्रेकआउट की संभावना है, जिससे स्टॉप लॉस होने की संभावना है।
जब बाजार सीमाबद्ध होता है, तो कीमतें अक्सर चैनल की ऊपरी और निचली सीमाओं को छू सकती हैं, जिसके परिणामस्वरूप अत्यधिक बार-बार व्यापार होता है, जिससे लेनदेन लागत और फिसलने के नुकसान बढ़ते हैं।
मूल्य चैनल की लंबाई को एक चर बनाने पर विचार करें जो बाजार की अस्थिरता के आधार पर स्वचालित रूप से समायोजित होता है। बाजार में उतार-चढ़ाव होने पर चैनल की लंबाई बढ़ाएं और ट्रेंड स्पष्ट होने पर चैनल की लंबाई कम करें।
अस्थिर बाजारों में अप्रभावी ब्रेकआउट से बचने के लिए प्रवेश समय को फ़िल्टर करने के लिए अन्य संकेतकों को मिलाएं, जैसे कि वॉल्यूम संकेतकों, चलती औसत आदि।
व्यापक बाजार स्थितियों में अनुकूलन के लिए इष्टतम मापदंडों को निर्धारित करने के लिए पैरामीटर संयोजनों का परीक्षण और अनुकूलन करने के लिए अधिक ऐतिहासिक डेटा का उपयोग करें।
गतिशील मूल्य चैनल रणनीति आम तौर पर एक अपेक्षाकृत सरल और सहज ट्रेंड ट्रैकिंग रणनीति है। इसके फायदे स्पष्ट संकेत और समझने में आसान हैं; जोखिम नियंत्रण अपेक्षाकृत उचित है। लेकिन अभी भी कुछ समस्याएं हैं जिन्हें आगे अनुकूलित किया जाना है, जैसे कि असफल ब्रेकआउट और दोलन बाजारों को संभालना। यह रणनीति ट्रेंड ट्रेडिंग के लिए एक सहायक उपकरण के रूप में अधिक उपयुक्त है, और प्रभाव अन्य तकनीकी संकेतकों या मॉडल के साथ संयुक्त होने पर बेहतर होगा।
/*backtest start: 2022-12-06 00:00:00 end: 2023-12-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //@version=4 strategy(title = "Noro's RiskChannel Strategy", shorttitle = "RiskChannel str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, pyramiding = 0, commission_value = 0.1) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") risklong = input(2.0, minval = 0.0, maxval = 99.9, title = "Risk size for long, %") riskshort = input(2.0, minval = 0.0, maxval = 99.9, title = "Risk size for short, %") stoptype = input(defval = "Center", options = ["Channel", "Center"], title = "Stop-loss type") lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %") pclen = input(50, minval = 1, title = "Price Channel Length") showll = input(true, defval = true, title = "Show lines") showof = input(true, defval = true, title = "Show offset") showdd = input(true, defval = true, title = "Show label (drawdown)") showbg = input(false, defval = false, title = "Show background") 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 //Stop-loss needstop = stoptype == "Center" or needlong == false or needshort == false sl = center //Lines pccol = showll ? color.black : na slcol = showll and stoptype == "Center" ? color.red : na offset = showof ? 1 : 0 plot(h, offset = offset, color = pccol, title = "Channel High") plot(center, offset = offset, color = slcol, title = "Cannel Center") plot(l, offset = offset, color = pccol, title = "Channel Low") //Background size = strategy.position_size bgcol = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na bgcolor(bgcol, transp = 70) //Var loss = 0.0 maxloss = 0.0 equity = 0.0 truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59) //Lot size risksizelong = -1 * risklong risklonga = stoptype == "Center" ? ((center / h) - 1) * 100 : ((l / h) - 1) * 100 coeflong = abs(risksizelong / risklonga) lotlong = (strategy.equity / close) * coeflong risksizeshort = -1 * riskshort riskshorta = stoptype == "Center" ? ((center / l) - 1) * 100 : ((h / l) - 1) * 100 coefshort = abs(risksizeshort / riskshorta) lotshort = (strategy.equity / close) * coefshort //Trading if h > 0 strategy.entry("Long", strategy.long, lotlong, stop = h, when = strategy.position_size <= 0 and needlong and truetime) strategy.entry("Short", strategy.short, lotshort, stop = l, when = strategy.position_size >= 0 and needshort and truetime) sl := sl != 0 ? sl : size > 0 ? l : size < 0 ? h : na if size > 0 and needstop strategy.exit("Stop Long", "Long", stop = sl) if size < 0 and needstop strategy.exit("Stop Short", "Short", stop = sl) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all() strategy.cancel("Long") strategy.cancel("Short") if showdd //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])) //Max loss size equity := strategy.position_size == 0 ? strategy.equity : equity[1] loss := equity < equity[1] ? ((equity / equity[1]) - 1) * 100 : 0 maxloss := min(nz(maxloss[1]), loss) //Label min := round(min * 100) / 100 maxloss := round(maxloss * 100) / 100 labeltext = "Drawdown: " + tostring(min) + "%" + "\nMax.loss " + tostring(maxloss) + "%" var label la = na label.delete(la) tc = min > -100 ? color.white : color.red osx = timenow + round(change(time)*10) osy = highest(100) // la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)