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