मात्रात्मक व्यापारिक रणनीतियों के लिए ZZ संकेतक के साथ संयुक्त विलियम्स फ्रैक्टल्स

लेखक:चाओझांग, दिनांकः 2024-01-29 15:24:30
टैगः

img

अवलोकन

यह एक मात्रात्मक ट्रेडिंग रणनीति है जो बिल विलियम्स फ्रैक्टल थ्योरी और जेडजेड संकेतक के उपयोग को जोड़ती है। यह विलियम्स फ्रैक्टल्स की गणना के माध्यम से बाजार के रुझानों का न्याय करती है और प्रवृत्ति-अनुसरण ट्रेडों को लागू करने के लिए जेडजेड संकेतक का उपयोग करके समर्थन / प्रतिरोध लाइनों को आकर्षित करके संभावित ब्रेकआउट बिंदुओं की पहचान करती है।

रणनीतिक सिद्धांत

यह रणनीति पहले विलियम्स फ्रैक्टल्स की गणना करती है ताकि यह निर्धारित किया जा सके कि वर्तमान फ्रैक्टल बढ़ रहा है या गिर रहा है। यदि यह एक बढ़ता हुआ फ्रैक्टल है, तो यह माना जाता है कि वर्तमान प्रवृत्ति ऊपर की ओर है। यदि यह एक गिरता हुआ फ्रैक्टल है, तो यह माना जाता है कि वर्तमान प्रवृत्ति नीचे की ओर है।

यह फिर ZZ संकेतक के समर्थन और प्रतिरोध रेखाओं को फ्रैक्टल बिंदुओं के आधार पर खींचता है। यदि कीमत बढ़ते फ्रैक्टल के अनुरूप प्रतिरोध रेखा को तोड़ती है, तो लंबी हो जाती है। यदि कीमत गिरते फ्रैक्टल के अनुरूप समर्थन रेखा को तोड़ती है, तो छोटी हो जाती है।

इस तरह के संयोजन के माध्यम से, समय पर रुझानों में परिवर्तन को पकड़ना और रुझानों के बाद ट्रेडों को लागू करना संभव है।

लाभ विश्लेषण

यह रणनीति अधिक व्यापारिक अवसरों को उजागर करने के लिए दो अलग-अलग तकनीकी विश्लेषण विधियों - विलियम्स फ्रैक्टल्स और जेडजेड संकेतकों को जोड़ती है।

यह समय पर बाजार के रुझानों के मोड़ का न्याय कर सकता है और मुख्य रुझान की दिशा को पकड़ने के लिए अच्छे स्टॉप लॉस/टेक प्रॉफिट मानदंड हैं। इसके अलावा, ZZ संकेतक अनावश्यक नुकसान से बचने के लिए कुछ झूठे ब्रेकआउट को फ़िल्टर कर सकता है।

सामान्य तौर पर, यह रणनीति जोखिम और रिटर्न को संतुलित करने के लिए रुझान निर्णय और विशिष्ट प्रवेश बिंदु चयन दोनों को ध्यान में रखती है।

जोखिम विश्लेषण

इस रणनीति का सबसे बड़ा जोखिम यह है कि फ्रैक्टल निर्णय और ZZ संकेतक गलत ट्रेडिंग संकेत जारी कर सकते हैं, जिससे अनावश्यक नुकसान हो सकता है। उदाहरण के लिए, प्रतिरोध रेखा को तोड़ने के बाद, कीमतें तेजी से वापस गिर सकती हैं, अपट्रेंड को बनाए रखने में असमर्थ।

इसके अतिरिक्त, फ्रैक्टल्स की गणना के तरीके से गलत समय सीमा निर्धारित करने पर गलत निर्णय हो सकते हैं। समय सीमा को बहुत कम सेट करने से झूठे ब्रेकआउट की संभावना बढ़ जाती है।

इन जोखिमों को कम करने के लिए, गलत संकेतों को कम करने के लिए फ्रैक्टल के गणना मापदंडों को उचित रूप से समायोजित करें और फ़िल्टरिंग स्थितियों को बढ़ाएं। इसके अलावा, एकल व्यापार हानि के आकार को नियंत्रित करने के लिए व्यापक स्टॉप लॉस सेट करें।

अनुकूलन दिशाएँ

इस रणनीति को निम्नलिखित पहलुओं में और अधिक अनुकूलित किया जा सकता हैः

  1. कुछ झूठे ब्रेकआउट से बचने के लिए एमएसीडी या बोलिंगर बैंड जैसे गति संकेतक फ़िल्टर जोड़ें।

  2. फ्रैक्टल पैरामीटर सेटिंग्स को अनुकूलित करें और उच्च और निम्न की गणना को समायोजित करें और अधिक सटीक प्रवृत्ति निर्णय प्राप्त करने के लिए समय सीमा को छोटा करें।

  3. प्रवृत्ति सटीकता का न्याय करने और मानव सीमाओं से बचने के लिए मशीन लर्निंग एल्गोरिदम बढ़ाएं।

  4. बाजार की अस्थिरता के आधार पर अनुकूल स्टॉप लॉस तंत्र जोड़ें।

  5. समग्र पैरामीटर सेटिंग्स को अनुकूलित करने के लिए डीप लर्निंग एल्गोरिदम का उपयोग करें।

सारांश

विलियम्स फ्रैक्टल थ्योरी और जेडजेड संकेतक को कुशलतापूर्वक जोड़कर, यह रणनीति बाजार के रुझानों में परिवर्तनों का समय पर पता लगाने और कैप्चर करने को प्राप्त करती है। यह उच्च जीत दर बनाए रखती है और दीर्घकालिक अतिरिक्त रिटर्न प्राप्त करने की उम्मीद करती है। अगला कदम अधिक फिल्टर और एआई क्षमताओं को पेश करके, रणनीति स्थिरता और रिटर्न दर में और सुधार करने की उम्मीद है।


/*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)

अधिक