ডায়নামিক প্রাইস চ্যানেল ব্রেকআউট কৌশল

লেখক:চাওঝাং, তারিখ: ২০২৩-১২-১৩ ১৬ঃ৩৩ঃ৩৭
ট্যাগঃ

img

সারসংক্ষেপ

ডায়নামিক প্রাইস চ্যানেল ব্রেকআউট স্ট্র্যাটেজি হল ডনচিয়ান প্রাইস চ্যানেল সূচকের উপর ভিত্তি করে একটি পরিমাণগত ট্রেডিং কৌশল। কৌশলটি মূল্য চ্যানেলের উপরের এবং নীচের লাইন অনুযায়ী বাজারের প্রবণতা দিক বিচার করে এবং দামগুলি চ্যানেলটি ভেঙে ফেললে দীর্ঘ বা সংক্ষিপ্ত অবস্থান স্থাপন করে।

এই কৌশলটির মূল ধারণা হল ডনচান মূল্য চ্যানেলের ব্রেকআউট ব্যবহার করা। যখন দাম চ্যানেলের উপরের সীমা অতিক্রম করে, ট্রেন্ডটি সন্ধান করতে একটি দীর্ঘ অবস্থান স্থাপন করুন; যখন দাম চ্যানেলের নীচের সীমা অতিক্রম করে, ট্রেন্ডটি সন্ধান করতে একটি শর্ট অবস্থান স্থাপন করুন।

কৌশল নীতি

সূচক গণনা

দামের চ্যানেলটি নিম্নলিখিত সূত্রগুলি দ্বারা গণনা করা হয়ঃ

Upper Line = বিগত N সময়ের মধ্যে সর্বোচ্চ উচ্চতা

Lower Line = বিগত N সময়ের মধ্যে সর্বনিম্ন

মাঝারি রেখা = (উপরের রেখা + নীচের রেখা) / 2

যেখানে N হল চ্যানেল চক্রের দৈর্ঘ্য। এই কৌশলটির জন্য ডিফল্ট হল 50।

প্রবেশের নিয়ম

যখন সর্বশেষ K-line এর সর্বোচ্চ মূল্য চ্যানেলের উপরের সীমা অতিক্রম করে, তখন একটি লং পজিশন স্থাপন করুন;

যখন সর্বশেষ K-line এর সর্বনিম্ন মূল্য চ্যানেলের নিম্ন সীমা অতিক্রম করে, তখন একটি শর্ট পজিশন স্থাপন করুন।

উদাহরণঃ

পূর্ববর্তী কে-লাইনের সর্বোচ্চ পয়েন্টটি চ্যানেলের উপরের সীমা অতিক্রম করেনি;
বর্তমান K-লাইনের উচ্চতম পয়েন্টটি চ্যানেলের উপরের সীমাটি ভেঙে দেয়; ==> একটি দীর্ঘ অবস্থান স্থাপন করুন

প্রস্থান বিধি

দুটি অপশনাল প্রস্থান নিয়ম আছে:

  1. চ্যানেল আউট

লং পজিশন বন্ধ করুনঃ স্টপ লস মূল্য হল চ্যানেলের নিম্ন সীমা;

শর্ট পজিশন বন্ধ করুনঃ স্টপ লস মূল্য হল চ্যানেলের উপরের সীমা;

  1. মাঝারি লাইনের প্রস্থান

লং বা শর্ট পজিশন যাই হোক না কেন, যখনই দাম চ্যানেলের মাঝারি রেখার নিচে নেমে আসবে তখনই সব পজিশন বন্ধ করুন।

ঝুঁকি নিয়ন্ত্রণ

ঝুঁকি নিয়ন্ত্রণ চ্যানেলের বিস্তৃতি এবং গ্রহণযোগ্য ঝুঁকি শতাংশের উপর ভিত্তি করে নির্দিষ্ট স্টপ লস দূরত্ব গণনা করার জন্য আনুপাতিক স্টপ লস গ্রহণ করে।

লং স্টপ লস দূরত্ব = প্রবেশ মূল্য * (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)

আরো