
এই কৌশলটি ডনচিয়ান মূল্য চ্যানেল সূচকের উপর ভিত্তি করে তৈরি করা হয়েছে। এই সূচকটি একটি নির্দিষ্ট সময়ের মধ্যে সর্বোচ্চ এবং সর্বনিম্ন মূল্য গণনা করে একটি মূল্য চ্যানেল তৈরি করে। কৌশলটি মূল্য চ্যানেল ব্যবহার করে দ্বিপাক্ষিক লেনদেনের জন্য এবং স্টপ লস এবং স্টপ মূল্য নির্ধারণ করে। স্টপ লস মূল্যটি মূল্য চ্যানেলের মধ্যম লাইন হিসাবে স্থির করা হয় এবং স্টপ লস মূল্যটি মূল্য চ্যানেলের উপরের নীচের সীমার বাইরে একটি নির্দিষ্ট শতাংশ হিসাবে সেট করা হয়। কৌশলটি স্টপ লস এবং স্টপ লস ট্র্যাকিংও অর্জন করে।
প্রথমত, কৌশলটি pclen প্যারামিটার অনুসারে মূল্য চ্যানেলের উপরের সীমা h এবং নিম্ন সীমা l গণনা করে। মধ্য লাইন কেন্দ্রটি মূল্য চ্যানেলের উপরের-নীচের সীমাটির গড়। তারপরে, দীর্ঘ এবং খালি অবস্থানের স্টপ প্যারামিটারগুলি টিপি অনুসারে, স্টপ মূল্য টিপিএল এবং টিপিএস গণনা করা হয়। স্টপ প্রাইসটি মূল্য চ্যানেলের মধ্য লাইন কেন্দ্র হিসাবে স্থির করা হয়। যখন দামটি মূল্য চ্যানেলটি ভেঙে যায়, তখন ঝুঁকির আকারের উপর ভিত্তি করে বিভিন্ন দিকের ট্রেডিং পজিশনের অবস্থানগুলি গণনা করা হয়। কৌশলটি আবার চ্যানেলটিতে প্রবেশের সময় সমতল অবস্থানে থাকবে।
লেনদেনের লজিক নিম্নরূপঃ
মাল্টি পজিশন খোলা সংকেতঃ দাম চ্যানেলের উপরের সীমা h এর চেয়ে বড় এবং চ্যানেলের অভ্যন্তরে ফিরে গেলে মাল্টি পজিশন খোলা মাল্টি পজিশন পজিশন সিগন্যালঃ যখন দামটি মধ্যম লাইন কেন্দ্রের চেয়ে কম হয় (স্টপ লস) বা স্টপ মূল্যের চেয়ে বেশি হয় (স্টপ লস)
খালি পজিশন খোলা সংকেতঃ দাম কম চ্যানেলের নিম্ন সীমা l এবং চ্যানেলের ভিতরে ফিরে যখন খালি পজিশন খোলা খালি পজিশনের খালি পজিশনের সংকেতঃ দামটি চ্যানেলের মধ্যবর্তী কেন্দ্রের চেয়ে বেশি (স্টপ লস) বা স্টপ মূল্যের চেয়ে কম (টিপিএস) যখন খালি পজিশন
এই কৌশলটির সুবিধাগুলো হলঃ
এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ
প্যারামিটারগুলি সামঞ্জস্য করে এবং ম্যানুয়ালি মনিটরিং করে এই ঝুঁকিগুলি হ্রাস এবং নিয়ন্ত্রণ করা যায়।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকেও উন্নত করা যেতে পারেঃ
এই কৌশলটি সামগ্রিকভাবে দামের চ্যানেলের সূচক ব্যবহার করে দ্বি-মুখী লেনদেনের একটি কার্যকর উপায়। স্টপ-স্টপ লস এবং পজিশন কন্ট্রোল মডিউল সেট আপ করা হয়েছে, যা ঝুঁকি নিয়ন্ত্রণ করতে পারে। কিছু অপ্টিমাইজেশন এবং সমন্বয় দ্বারা, এটি একটি শক্তিশালী পরিমাণযুক্ত লেনদেনের কৌশল হতে পারে।
/*backtest
start: 2023-01-31 00:00:00
end: 2024-01-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2020
//@version=4
strategy(title = "Noro's RiskDonchian Strategy", shorttitle = "RiskDonchian str", 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(true, defval = true, title = "Short")
tp = input(defval = 20.0, minval = 1, title = "Take-profit, %")
tptype = input(defval = "2. Fix", options = ["1. None", "2. Fix", "3. Trailing"], title = "Take-profit type")
sltype = input(defval = "2. Center", options = ["1. None", "2. Center"], title = "Take-profit type")
risklong = input(5.0, minval = 0.0, maxval = 99.9, title = "Risk size for long, %")
riskshort = input(5.0, minval = 0.0, maxval = 99.9, title = "Risk size for short, %")
pclen = input(50, minval = 1, title = "Price Channel Length")
showll = input(true, defval = true, title = "Show lines")
showbg = input(false, defval = false, title = "Show Background")
showof = input(true, defval = true, title = "Show Offset")
showlabel = input(true, defval = true, title = "Show label")
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
//Take-profit
tpl = 0.0
tpl := tptype == "2. Fix" and strategy.position_size > 0 ? tpl[1] : h * (100 + tp) / 100
//Stop-loss
tps = 0.0
tps := tptype == "2. Fix" and strategy.position_size < 0 ? tps[1] : l * (100 - tp) / 100
//Lines
tplcol = showll and needlong and tptype != "1. None" ? color.lime : na
pclcol = showll and needlong ? color.blue : na
sllcol = showll and needlong and sltype != "1. None" ? color.red : na
tpscol = showll and needshort and tptype != "1. None" ? color.lime : na
pcscol = showll and needshort ? color.blue : na
slscol = showll and needshort and sltype != "1. None" ? color.red : na
offset = showof ? 1 : 0
plot(tpl, offset = offset, color = tplcol, title = "TP Long")
plot(h, offset = offset, color = pclcol, title = "Channel High")
plot(center, offset = offset, color = sllcol, title = "SL Long")
plot(center, offset = offset, color = slscol, title = "SL Short")
plot(l, offset = offset, color = pcscol, title = "Channel Low")
plot(tps, offset = offset, color = tpscol, title = "TP Short")
//Background
size = strategy.position_size
bgcol = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(bgcol, transp = 70)
//Lot size
risksizelong = -1 * risklong
risklonga = ((center / h) - 1) * 100
coeflong = abs(risksizelong / risklonga)
lotlong = (strategy.equity / close) * coeflong
risksizeshort = -1 * riskshort
riskshorta = ((center / l) - 1) * 100
coefshort = abs(risksizeshort / riskshorta)
lotshort = (strategy.equity / close) * coefshort
//Trading
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
mo = 0
mo := strategy.position_size != 0 ? 0 : high >= center[1] and low <= center[1] ? 1 : mo[1]
if h > 0
longlimit = tptype == "1. None" ? na : tpl
longstop = sltype == "1. None" ? na : center
strategy.entry("Long", strategy.long, lotlong, stop = h, when = strategy.position_size <= 0 and needlong and truetime and mo)
strategy.exit("TP Long", "Long", limit = longlimit, stop = longstop)
shortlimit = tptype == "1. None" ? na : tps
shortstop = sltype == "1. None" ? na : center
strategy.entry("Short", strategy.short, lotshort, stop = l, when = strategy.position_size >= 0 and needshort and truetime and mo)
strategy.exit("Exit Short", "Short", limit = shortlimit, stop = shortstop)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()
strategy.cancel("Long")
strategy.cancel("Short")
if showlabel
//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]))
//Label
min := round(min * 100) / 100
labeltext = "Drawdown: " + tostring(min) + "%"
var label la = na
label.delete(la)
tc = min > -100 ? color.white : color.red
osx = timenow + round(change(time)*10)
osy = highest(100)