
यह बिल विलियम्स के विभाजन सिद्धांत और ZZ सूचक का उपयोग करके एक मात्रात्मक ट्रेडिंग रणनीति है। यह रणनीति विलियम्स के विभाजन की गणना करके बाजार की प्रवृत्ति का आकलन करती है, और ZZ सूचक के साथ समर्थन प्रतिरोध रेखाओं को रेखांकित करती है ताकि संभावित ब्रेकआउट की पहचान की जा सके, जिससे ट्रेडों को ट्रेंड किया जा सके।
यह रणनीति पहले विलियम्स के विभाजन की गणना करती है ताकि यह पता लगाया जा सके कि यह वर्तमान में ऊपर की ओर है या नीचे की ओर है। यदि यह ऊपर की ओर है, तो यह माना जाता है कि यह वर्तमान में ऊपर की ओर है; यदि यह नीचे की ओर है, तो यह माना जाता है कि यह नीचे की ओर है।
फिर ZZ सूचकांक के समर्थन और प्रतिरोध रेखाओं को विभाजन बिंदुओं के आधार पर आकर्षित करें। यदि कीमत ऊपर की ओर विभाजन के अनुरूप प्रतिरोध रेखा को तोड़ती है, तो अधिक करें; यदि कीमत नीचे की ओर विभाजन के अनुरूप समर्थन रेखा को तोड़ती है, तो शून्य करें।
इस तरह के संयोजन के माध्यम से, ट्रेडों को ट्रेंड ट्रैक करने के लिए ट्रेंड शिफ्ट्स को समय पर पकड़ना संभव है।
इस रणनीति में विल्यम्स विभाजन और ZZ सूचकांक के दो अलग-अलग तकनीकी विश्लेषण विधियों का उपयोग किया गया है ताकि अधिक व्यापारिक अवसरों का पता लगाया जा सके।
यह बाजार के रुझानों के परिवर्तन को समय पर निर्धारित करने में सक्षम है और अच्छी रोकथाम की स्थिति को निर्धारित करता है, जो प्रमुख रुझानों की दिशा को पकड़ने में मदद करता है। इसके अलावा, ZZ संकेतक कुछ झूठे टूटने की स्थिति को फ़िल्टर कर सकता है और अनावश्यक नुकसान से बचा सकता है।
कुल मिलाकर, इस रणनीति में रुझानों और विशिष्ट प्रवेश बिंदु विकल्पों पर विचार किया गया है, जिससे जोखिम और लाभ का संतुलन बनाया गया है।
इस रणनीति का सबसे बड़ा जोखिम यह है कि विरूपण निर्णय और ZZ संकेतक गलत व्यापारिक संकेत दे सकते हैं, जिससे अनावश्यक नुकसान हो सकता है। उदाहरण के लिए, प्रतिरोध रेखा को तोड़ने के बाद, कीमतें तेजी से वापस आ सकती हैं और लगातार ऊपर नहीं जा सकती हैं।
इसके अलावा, विभाजन की गणना की विधि गलत समय चक्र सेटिंग के कारण गलत हो सकती है। यदि समय चक्र बहुत छोटा है, तो झूठी दरार की संभावना बढ़ जाती है।
इन जोखिमों को कम करने के लिए, आप उचित रूप से विभाजित गणना मापदंडों को समायोजित कर सकते हैं, या आप फ़िल्टरिंग शर्तों को बढ़ाकर गलत संकेतों को कम कर सकते हैं। इसके अलावा, आप एकल नुकसान को नियंत्रित करने के लिए एक बड़ा स्टॉप लॉस सेट कर सकते हैं।
इस रणनीति को और अधिक अनुकूलित किया जा सकता हैः
कुछ झूठी पारियों को रोकने के लिए, एक गतिशीलता सूचक फ़िल्टर जोड़ें, जैसे कि MACD या ब्रिन बैंड।
प्रवृत्ति के अधिक सटीक निर्णय के लिए समय चक्र को छोटा करने के लिए उच्च और निम्न बिंदुओं की गणना के तरीके को समायोजित करने के लिए विभाजन पैरामीटर सेटिंग को अनुकूलित करें।
मशीन लर्निंग एल्गोरिदम की प्रवृत्ति की सटीकता को बढ़ाएं, और एआई के फैसले का उपयोग करके मैन्युअल रूप से सेट की गई सीमाओं से बचें।
बाजार में उतार-चढ़ाव के आधार पर स्टॉप लॉस की सीमा को समायोजित करने के लिए समायोज्य स्टॉप लॉस मैकेनिज्म को जोड़ना।
डीप लर्निंग एल्गोरिदम का उपयोग करके समग्र पैरामीटर सेटिंग्स को अनुकूलित करें।
यह रणनीति विलियम्स के विभाजन सिद्धांत और ZZ सूचकांक के चतुर संयोजन के माध्यम से बाजार की प्रवृत्ति में परिवर्तन के समय पर निर्णय लेने और पकड़ने में सक्षम है। यह उच्च जीत की दर को बनाए रखता है और लंबे समय तक स्थिर अतिरिक्त रिटर्न प्राप्त करने की उम्मीद है। अगले चरण में, अधिक फ़िल्टरिंग साधनों और एआई निर्णय की शुरूआत के माध्यम से, रणनीति की स्थिरता और रिटर्न को और बढ़ाने की उम्मीद है।
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title = "robotrading ZZ-8 fractals", shorttitle = "ZZ-8", 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(false, defval = true, title = "Short")
filterBW = input(false, title="filter Bill Williams Fractals")
showll = input(true, title = "Show levels")
showff = input(true, title = "Show fractals (repaint!)")
showdd = input(true, title = "Show dots (repaint!)")
showbg = input(false, title = "Show background")
showlb = input(false, title = "Show drawdown")
startTime = input(defval = timestamp("01 Jan 2000 00:00 +0000"), title = "Start Time", type = input.time, inline = "time1")
finalTime = input(defval = timestamp("31 Dec 2099 23:59 +0000"), title = "Final Time", type = input.time, inline = "time1")
//Variables
loss = 0.0
maxloss = 0.0
equity = 0.0
truetime = true
//Fractals
isRegularFractal(mode) =>
ret = mode == 1 ? high[4] < high[3] and high[3] < high[2] and high[2] > high[1] and high[1] > high[0] : mode == -1 ? low[4] > low[3] and low[3] > low[2] and low[2] < low[1] and low[1] < low[0] : false
isBWFractal(mode) =>
ret = mode == 1 ? high[4] < high[2] and high[3] <= high[2] and high[2] >= high[1] and high[2] > high[0] : mode == -1 ? low[4] > low[2] and low[3] >= low[2] and low[2] <= low[1] and low[2] < low[0] : false
filteredtopf = filterBW ? isRegularFractal(1) : isBWFractal(1)
filteredbotf = filterBW ? isRegularFractal(-1) : isBWFractal(-1)
//Triangles
plotshape(filteredtopf and showff, title='Filtered Top Fractals', style=shape.triangledown, location=location.abovebar, color= color.red, offset=-2)
plotshape(filteredbotf and showff, title='Filtered Bottom Fractals', style=shape.triangleup, location=location.belowbar, color= color.lime, offset=-2)
//Levels
hh = 0.0
ll = 0.0
hh := filteredtopf ? high[2] : hh[1]
ll := filteredbotf ? low[2] : ll[1]
//Trend
trend = 0
trend := high >= hh[1] ? 1 : low <= ll[1] ? -1 : trend[1]
//Lines
hcol = showll and hh == hh[1] and close < hh ? color.lime : na
lcol = showll and ll == ll[1] and close > ll ? color.red : na
plot(hh, color = hcol)
plot(ll, color = lcol)
//Dots
// var line hline = na
// if hh != hh[1] and showdd
// hline := line.new(bar_index - 0, hh[0], bar_index - 2, hh[0], xloc = xloc.bar_index, extend = extend.none, style = line.style_dotted, color = color.lime, width = 1)
// var line lline = na
// if ll != ll[1] and showdd
// lline := line.new(bar_index - 0, ll[0] - syminfo.mintick, bar_index - 2, ll[0] - syminfo.mintick, xloc = xloc.bar_index, extend = extend.none, style = line.style_dotted, color = color.red, width = 1)
//Background
bgcol = showbg == false ? na : trend == 1 ? color.lime : trend == -1 ? color.red : na
bgcolor(bgcol, transp = 80)
//Orders
if hh > 0 and needlong
strategy.entry("Long", strategy.long, na, stop = hh, when = needlong and truetime)
strategy.exit("Exit Long", "Long", stop = ll, when = needshort == false)
if ll > 0 and startTime
strategy.entry("Short", strategy.short, na, stop = ll, when = needshort and truetime)
strategy.exit("Exit Short", "Short", stop = hh, when = needlong == false)
if time > finalTime
strategy.close_all()
strategy.cancel("Long")
strategy.cancel("Short")
if showlb
//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 != strategy.position_size[1] ? 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)*50)
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)