
বিল উইলিয়ামসের বিভাজন তত্ত্ব এবং ZZ সূচক ব্যবহার করে এটি একটি পরিমাণগত ট্রেডিং কৌশল। এই কৌশলটি উইলিয়ামস বিভাজন গণনা করে বাজারের প্রবণতা নির্ধারণ করে এবং 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)