ডায়নামিক প্রাইস চ্যানেল ব্রেকিং স্ট্র্যাটেজি হল একটি পরিমাণগত ট্রেডিং কৌশল যা ডনচিয়ান প্রাইস চ্যানেল সূচকের উপর ভিত্তি করে তৈরি করা হয়। এই কৌশলটি বাজার প্রবণতার দিকনির্দেশের উপর ভিত্তি করে মূল্য চ্যানেলের উপরের এবং নীচের সীমাবদ্ধতার উপর ভিত্তি করে সিদ্ধান্ত নেয় এবং যখন দাম চ্যানেলটি ভেঙে যায় তখন একটি ওভার বা বিয়ার অবস্থান স্থাপন করে।
এই কৌশলটির মূল ধারণা হল ডনচান মূল্য চ্যানেলের ব্রেকআউট ব্যবহার করা। যখন দাম চ্যানেলের উপরের সীমা অতিক্রম করে, তখন একটি মাল্টি-হেড ট্রেন্ড তৈরি করা হয়; যখন দাম চ্যানেলের নীচের সীমা অতিক্রম করে, তখন একটি স্বল্প-হেড ট্রেন্ড তৈরি করা হয়।
মূল্য চ্যানেলের জন্য নিম্নলিখিত সূত্র ব্যবহার করা হয়ঃ
উপরের লাইন = সর্বোচ্চ মূল্যের N চক্রের সর্বোচ্চ মান
নিচের লাইন = সর্বনিম্ন মূল্যের N চক্রের সর্বনিম্ন মান
মধ্যম লাইন = (উপরের সীমা লাইন + নিচের সীমা লাইন) /2
যেখানে N হল ট্রানজিট চক্রের দৈর্ঘ্য, এই কৌশলটি 50 ডিফল্ট করে।
যখন সর্বশেষ K লাইন সর্বোচ্চ মূল্য চ্যানেলের উপরের সীমা অতিক্রম করে, তখন একটি পজিশন তৈরি করা হয়;
যখন সর্বশেষ K লাইনের সর্বনিম্ন মূল্য চ্যানেলের নিচের সীমারেখা অতিক্রম করে তখন একটি কুপন অবস্থান স্থাপন করা হয়।
উদাহরণঃ
শেষের K-লাইন উচ্চতা চ্যানেলের উপরের সীমা অতিক্রম করেনি; বর্তমান K-লাইন উচ্চতা চ্যানেলের উপরের সীমা অতিক্রম করেছে; === মাল্টি-পজিশন তৈরি করা ===
খেলার নিয়মাবলী দুই প্রকারঃ
পিংটোঃ স্টপ লস হল চ্যানেলের নিম্ন সীমা।
সমতলঃ স্টপ লস মূল্য হল চ্যানেলের উপরের সীমা;
মাল্টি-হেড বা খালি-হেড পজিশন যাই হোক না কেন, যখন দাম আবার চ্যানেলের মাঝের লাইনের নীচে নেমে আসে, তখন সমস্ত পজিশন খালি করে দেয়।
ঝুঁকি নিয়ন্ত্রণের জন্য, অনুপাতগত ক্ষতি বন্ধ পদ্ধতি ব্যবহার করা হয়, যার জন্য নির্দিষ্ট ক্ষতি বন্ধের দূরত্বের হিসাব করা হয়, যার ভিত্তিতে চ্যানেলের প্রস্থ এবং সেটিংয়ের জন্য গ্রহণযোগ্য ঝুঁকির শতাংশ নির্ধারিত হয়।
স্টপ-অফ দূরত্ব = প্রবেশ মূল্য * (১ - ঝুঁকি গ্রহণের শতাংশ)
স্টপ লস দূরত্ব = এন্ট্রি মূল্য * (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)