বুলিং ব্যান্ডের অস্থিরতা ট্রেডিং কৌশলটি একটি ট্রেডিং কৌশল যখন বাজারটি অস্থির অবস্থায় থাকে। এই কৌশলটি বুলিং ব্যান্ডের সূচকগুলি ব্যবহার করে বাজারটির অস্থিরতার অবস্থা নির্ধারণ করে, যখন দামগুলি বুলিং ব্যান্ডের সাথে সংযুক্ত হয় তখন একটি ট্রেডিং সংকেত প্রেরণ করে। প্রচলিত প্রবণতা অনুসরণ করার কৌশলগুলির বিপরীতে, এই কৌশলটি আরও ভালভাবে সামঞ্জস্যপূর্ণ বাজার পরিবেশের জন্য উপযুক্ত।
এই কৌশলটি মূলত বুলিং ব্যান্ডের উপর ভিত্তি করে বাস্তবায়িত হয়। বুলিং ব্যান্ডটি মিড-ট্র্যাক, আপ-ট্র্যাক এবং ডাউন-ট্র্যাকের সমন্বয়ে গঠিত। যখন দামগুলি আপ-ট্র্যাক বা ডাউন-ট্র্যাকের কাছাকাছি থাকে, তখন বাজারটি অত্যধিক মুদ্রাস্ফীতি বা মুদ্রাস্ফীতির প্রতিনিধিত্ব করে, তখন বিপরীত হওয়ার সম্ভাবনা বেশি থাকে।
বিশেষত, এই কৌশলটি প্রথমে ডিএমআই সূচকটি ব্যবহার করে বাজারটি শকড অবস্থায় রয়েছে কিনা তা নির্ধারণ করে। যখন + ডিএমআই এবং - ডিএমআইয়ের পার্থক্য 20 এর চেয়ে কম হয়, তখন বাজারটি অনুভূমিকভাবে শকড বলে মনে করা হয়। এই পরিস্থিতিতে, যখন দামটি ট্র্যাজেডের নীচে পেরিয়ে যায় তখন বেশি করে, যখন দামটি ট্র্যাজেডের নীচে পেরিয়ে যায় তখন খালি করে দেয়। স্টপ লস পয়েন্টটি বিপরীত ট্র্যাজেডের কাছাকাছি স্থাপন করা হয়েছে।
প্রবণতা অনুসরণ কৌশল তুলনায়, এই কৌশলটি প্রবণতা অনুসরণ করার জন্য সুদ হারাবে না। প্রচলিত ঝড়ের ট্রেডিং কৌশলগুলির তুলনায়, এই কৌশলটি ব্রিন ব্যান্ডের সূচক ব্যবহার করে বাজারের ওভার-বিক্রয় ওভার-বিক্রয় পরিস্থিতি আরও সঠিকভাবে বিচার করতে পারে, যার ফলে প্রবেশের সম্ভাবনা বাড়ায়।
এই কৌশলটি মূলত ব্রিন-ব্যান্ডের উপর নির্ভর করে যা বাজারের অস্থিরতা এবং ওভারব্রেড ওভারসেলের উপর নির্ভর করে। যখন ব্রিন-ব্যান্ডের বিস্তার বা সংকোচন অস্বাভাবিক হয়, তখন ভুল সংকেত হতে পারে। এছাড়াও, স্টপ লস পয়েন্টটি কাছাকাছি এবং একক স্টপ লস সম্ভবত বড়। তহবিল পরিচালনার জন্য অপ্টিমাইজড স্টপ লস কৌশলটি গ্রহণ করার পরামর্শ দেওয়া হয়েছে।
প্রবেশের সংকেতগুলি ফিল্টার করার জন্য অন্যান্য সূচকগুলির সাথে মিলিত হওয়া বিবেচনা করা যেতে পারে, যেমন আরএসআই এর মতো ঝড়ের সূচক, প্রবেশের নির্ভুলতা বাড়ানোর জন্য। এছাড়াও, স্টপ লস কৌশলটি অপ্টিমাইজ করা গুরুত্বপূর্ণ, যাতে একক বড় স্টপ লস এড়ানো যায়। ট্রেডিং জাতগুলিও বেছে নেওয়া যেতে পারে যা এই কৌশলটির জন্য আরও উপযুক্ত, যেমন কম মার্কেটপ্লেস মুদ্রা।
এই কৌশলটি সামগ্রিকভাবে অস্থির বাজারগুলির জন্য উপযুক্ত এবং প্রবণতা কৌশলটি ব্যর্থ হলে এটি ব্যবহার করা যেতে পারে। তবে বাজারের অবস্থা নির্ধারণের জন্য এর উপর নির্ভরশীল সূচকগুলির কার্যকারিতাটি এখনও অপ্টিমাইজ করার জায়গা রয়েছে। আমরা এই কৌশলটি আরও উন্নত করতে পারি, যেমন মাল্টি-ইনডিকেটর প্যাকেজিং, তহবিল পরিচালনা ইত্যাদির মাধ্যমে, যাতে এর কার্যকারিতা আরও স্থিতিশীল হয়।
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(shorttitle='Sideways Strategy DMI + Bollinger Bands',title='Sideways Strategy DMI + Bollinger Bands (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)
// Works on ETHUSD 3h, 1h, 2h, 4h
//Backtest dates
fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12)
fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31)
fromYear = input(defval = 2021, title = "From Year", type = input.integer, minval = 1970)
thruMonth = input(defval = 12, title = "Thru Month", type = input.integer, minval = 1, maxval = 12)
thruDay = input(defval = 31, title = "Thru Day", type = input.integer, minval = 1, maxval = 31)
thruYear = input(defval = 2022, title = "Thru Year", type = input.integer, minval = 1970)
showDate = input(defval = true, title = "Show Date Range", type = input.bool)
start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window
window() => true
[pos_dm, neg_dm, adx] = dmi(14, 14)
lengthBB = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, lengthBB)
dev = mult * stdev(src, lengthBB)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
sideways = (abs(pos_dm - neg_dm) < 20)
//Stop_loss= ((input (3))/100)
//Take_profit= ((input (2))/100)
//longStopPrice = strategy.position_avg_price * (1 - Stop_loss)
//longTakeProfit = strategy.position_avg_price * (1 + Take_profit)
//closeLong = close < longStopPrice or close > longTakeProfit or StopRSI
//Entry
strategy.entry(id="long", long = true, when = sideways and (crossover(close, lower)) and window())
//Exit
strategy.close("long", when = (crossunder(close, upper)))