यह एक मात्रात्मक ट्रेडिंग रणनीति है जो बिल विलियम्स
यह रणनीति पहले विलियम्स फ्रैक्टल्स की गणना करती है ताकि यह निर्धारित किया जा सके कि वर्तमान फ्रैक्टल बढ़ रहा है या गिर रहा है। यदि यह एक बढ़ता हुआ फ्रैक्टल है, तो यह माना जाता है कि वर्तमान प्रवृत्ति ऊपर की ओर है। यदि यह एक गिरता हुआ फ्रैक्टल है, तो यह माना जाता है कि वर्तमान प्रवृत्ति नीचे की ओर है।
यह फिर ZZ संकेतक
इस तरह के संयोजन के माध्यम से, समय पर रुझानों में परिवर्तन को पकड़ना और रुझानों के बाद ट्रेडों को लागू करना संभव है।
यह रणनीति अधिक व्यापारिक अवसरों को उजागर करने के लिए दो अलग-अलग तकनीकी विश्लेषण विधियों - विलियम्स फ्रैक्टल्स और जेडजेड संकेतकों को जोड़ती है।
यह समय पर बाजार के रुझानों के मोड़ का न्याय कर सकता है और मुख्य रुझान की दिशा को पकड़ने के लिए अच्छे स्टॉप लॉस/टेक प्रॉफिट मानदंड हैं। इसके अलावा, ZZ संकेतक अनावश्यक नुकसान से बचने के लिए कुछ झूठे ब्रेकआउट को फ़िल्टर कर सकता है।
सामान्य तौर पर, यह रणनीति जोखिम और रिटर्न को संतुलित करने के लिए रुझान निर्णय और विशिष्ट प्रवेश बिंदु चयन दोनों को ध्यान में रखती है।
इस रणनीति का सबसे बड़ा जोखिम यह है कि फ्रैक्टल निर्णय और 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)