
डायनामिक प्राइस चैनल ब्रेकिंग रणनीति एक मात्रात्मक ट्रेडिंग रणनीति है जो डोनचियन प्राइस चैनल संकेतक पर आधारित है। यह रणनीति मूल्य चैनल की ऊपरी सीमा और निचली सीमा के आधार पर बाजार की प्रवृत्ति की दिशा का न्याय करती है, और जब कीमत चैनल को तोड़ती है तो अधिक या कम स्थिति स्थापित करती है।
इस रणनीति का मुख्य विचार डोनचैन मूल्य चैनल के ब्रेकआउट का उपयोग करना है। जब कीमत चैनल की ऊपरी सीमा को तोड़ती है, तो मल्टीहेड खोज ट्रेंड स्थापित करें; जब कीमत चैनल की निचली सीमा को तोड़ती है, तो एक शॉर्टहेड खोज ट्रेंड स्थापित करें।
मूल्य चैनल की गणना निम्न सूत्र से की जाती हैः
ऊपरी रेखा = उच्चतम मूल्य के एन चक्र के उच्चतम मूल्य
निचली रेखा = सबसे कम मूल्य के एन चक्र न्यूनतम
मध्य रेखा = (ऊपरी सीमा रेखा + निचली सीमा रेखा) / 2
जहां N चैनल चक्र की लंबाई को दर्शाता है, इस रणनीति में 50 को डिफ़ॉल्ट रूप से माना जाता है।
जब नवीनतम K लाइन की अधिकतम कीमत चैनल की ऊपरी सीमा को तोड़ती है, तो एक बहु-स्थिति स्थापित करें;
जब नवीनतम K लाइन का न्यूनतम मूल्य चैनल की निचली सीमा से नीचे गिर जाता है, तो एक शून्य स्थिति स्थापित करें।
उदाहरण:
पिछले K लाइन की ऊंचाई चैनल की ऊपरी सीमा से अधिक नहीं है; वर्तमान K लाइन के उच्च बिंदु ने चैनल की ऊपरी सीमा को पार कर लिया है; ==> बहु पदों की स्थापना
खेल के दो नियम हैं:
पिंटोः स्टॉप लॉस कीमत चैनल की निचली सीमा है;
फ्लैटः स्टॉप लॉस मूल्य चैनल की ऊपरी सीमा है;
जब कीमत चैनल की मध्य रेखा से नीचे गिरती है, तो सभी पदों को बंद कर दिया जाता है, चाहे वे बहु-पोजीशन हों या रिक्त-पोजीशन।
जोखिम नियंत्रण अनुपातिक रोकथाम विधि को अपनाता है, जो कि मार्ग की चौड़ाई और सेटिंग के अनुसार स्वीकार्य जोखिम प्रतिशत के आधार पर विशिष्ट रोकथाम दूरी की गणना करता है।
अधिक स्टॉप लॉस दूरी = प्रवेश मूल्य * (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)