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