
বোলিংগার ওয়েভ স্ট্র্যাটেজি হল একটি পরিমাণগত ট্রেডিং কৌশল যা বোলিংগার ওয়েভ স্ট্র্যাটেজি এবং মুভিং এভারেজকে একত্রিত করে। এই কৌশলটি বোলিংগার ওয়েভ স্ট্র্যাটেজি এবং মুভিং এভারেজের ক্রস-সিগন্যালের স্ট্যান্ডার্ড ডিফেন্ডার হিসাব করে এবং বাজারের প্রবণতা এবং ওভার-বয় ওভার-সোল্ড অঞ্চলগুলি বিচার করে।
এই কৌশলটি প্রথমে নির্দিষ্ট সময়ের মধ্যে সূচকীয় চলমান গড় ((EMA) কে বেঞ্চলাইন হিসাবে গণনা করে। তারপর এই EMA এর উপর ভিত্তি করে উপরের ট্র্যাক লাইন ((EMA + n গুণ স্ট্যান্ডার্ড ডিফারেনশিয়াল) এবং নীচের ট্র্যাক লাইন ((EMA - n গুণ স্ট্যান্ডার্ড ডিফারেনশিয়াল) গণনা করে। যখন দাম উপরের ট্র্যাক লাইনটি ভেঙে যায় তখন এটি একটি ওভার-বই সংকেত এবং যখন দাম নীচের ট্র্যাক লাইনটি ভেঙে যায় তখন এটি একটি ওভার-বিক্রয় সংকেত।
যখন দামটি উপরের লাইন এবং নীচের লাইনের মধ্যে থাকে, তখন এটি স্টকটির স্বাভাবিক মূল্যের ওঠানামা। উপরন্তু, এই কৌশলটি আরএসআই সূচকের মতো অন্যান্য সূচকগুলির সাথে মিলিত হয় যা ট্রেডিং সংকেতগুলিকে ফিল্টার করে, ট্রেডিং ফ্রিকোয়েন্সি হ্রাস করে এবং অপ্রয়োজনীয় ক্ষতি হ্রাস করে।
বিশেষ করে, এই কৌশলটির জন্য ট্রেডিং সিগন্যালের মূল্যায়নের নিয়মগুলি নিম্নরূপঃ
যখন উপরে উল্লিখিত ট্রেডিং সিগন্যাল আসে, তখন ফিক্সড পরিমাণ বা অ্যাকাউন্টের অনুপাতের পদ্ধতিতে প্রবেশ করুন। যখন দামগুলি আবার তরঙ্গের ব্যাপ্তির মধ্যে ফিরে আসে বা বিপরীত সংকেত উপস্থিত হয়, তখন পজিশন থেকে বেরিয়ে আসুন।
এই কৌশলটি প্রবণতা বিচার এবং ওভার-বয় ওভার-সেল বিচারকে একত্রিত করে, ঝড়ের সমাপ্তিতে ভুল লেনদেন এড়াতে। একক সূচক কৌশলটির তুলনায় অপ্রয়োজনীয় অবস্থান খোলার পরিমাণ হ্রাস করা এবং ঝুঁকি কার্যকরভাবে নিয়ন্ত্রণ করা যায়।
সহজ চলমান গড় কৌশলগুলির তুলনায়, বোলের তরঙ্গদৈর্ঘ্যটি বর্তমান বাজারের অস্থিরতা এবং ঝুঁকি স্তরের প্রতিফলন করে। তরঙ্গদৈর্ঘ্য ঘন্টা, ট্রেডিং সংকেত আরও নির্ভরযোগ্য; তরঙ্গদৈর্ঘ্য বড় হলে, ট্রেডিং ফ্রিকোয়েন্সি স্বয়ংক্রিয়ভাবে হ্রাস পায়। এই স্বনির্ধারিত সমন্বয়টি বিভিন্ন বাজারের অবস্থার সাথে কৌশলগত ঝুঁকি নিয়ন্ত্রণ করতে পারে।
এছাড়াও, এই কৌশলটি RSI এর মতো সূচকগুলির মাধ্যমে দ্বৈত নিশ্চিতকরণ করে, যা কিছু মিথ্যা সংকেতগুলিকে ফিল্টার করে এবং প্রবণতা পাল্টানোর সময় ভুল ট্রেডিং এড়াতে পারে। এটি কৌশলটির বিজয়ী হারও বাড়িয়ে তোলে।
এই কৌশলটি নিম্নলিখিত ঝুঁকির সম্মুখীন হয়েছেঃ
প্যারামিটার অপ্টিমাইজেশনের ঝুঁকি। যদি চলমান গড় প্যারামিটার বা স্ট্যান্ডার্ড ডিফেন্সের গুণকটি ভুলভাবে সেট করা হয়, তবে আরও বেশি গোলমালের লেনদেন বা মিসড লেনদেনের সুযোগ তৈরি হবে। এই প্যারামিটারগুলি পুনরাবৃত্তি পরীক্ষার এবং অপ্টিমাইজেশনের প্রয়োজন।
ভুয়া সংকেত ভাঙ্গার ঝুঁকি। যখন দামগুলি স্বল্পমেয়াদী উত্থান-পতনের পরে দ্রুত পুনরায় সংশোধন করা হয়, তখন একটি ভুল সংকেত তৈরি হয়। এই সময়ে যদি ট্রেডিং স্বাভাবিকভাবে ক্ষতি বাড়ায় তবে চলমান গড়ের সময়কাল বা স্টপ লস সেট করে এই ঝুঁকিটি নিয়ন্ত্রণ করা যেতে পারে।
ট্রেডিং ফ্রিকোয়েন্সির ঝুঁকি। যদি ট্রেডিং লাইনগুলি খুব ছোট হয়, তবে ট্রেডিংয়ের সংখ্যা এবং ফি প্রদানের পরিমাণ বাড়বে। এটি চূড়ান্ত মুনাফার উপর কিছু প্রভাব ফেলতে পারে। এই ঝুঁকি নিয়ন্ত্রণের জন্য উপযুক্তভাবে চলমান গড় চক্র বাড়ানো যেতে পারে।
এই কৌশলটি আরও উন্নত করার সুযোগ রয়েছেঃ
অতিরিক্ত ক্ষতি বন্ধ করার ব্যবস্থা। একটি চলমান ক্ষতি বা সময় বন্ধের ব্যবস্থা করা, যা সময়মত ক্ষতি বন্ধ করতে এবং একক ক্ষতি নিয়ন্ত্রণ করতে সহায়তা করে।
পজিশন ম্যানেজমেন্ট বাড়ানো। যেমন পজিশন বাড়ানো এবং হ্রাস করার নিয়ম স্থাপন করা, যাতে মুনাফা বাড়তে পারে এবং ক্ষতি হ্রাস করতে পারে। এটি কৌশলগত রিটার্নের হার বাড়িয়ে তুলতে পারে।
অন্যান্য সূচকগুলির সাথে মিলিত হলে, যেমন KDJ, MACD ইত্যাদি সূচকগুলি সিদ্ধান্তের সংকেত হিসাবে পরিবেশন করা যেতে পারে। এটি কৌশলগত মুনাফার হারকে আরও বাড়িয়ে তুলতে সহায়তা করে।
প্যারামিটার সেটিং অনুকূলিতকরণ। প্যারামিটার সেটিংগুলির জন্য আরও ভাল প্যারামিটার সেটিং খুঁজতে জেনেটিক্যাল অ্যালগরিদমের মতো আরও পদ্ধতিগত পদ্ধতির মাধ্যমে প্যারামিটার সেটিং পরীক্ষা করা যেতে পারে।
বোলব্যান্ড ওভারল্যাপিং সিগন্যাল কৌশলটি চলমান গড়ের প্রবণতা বিচার এবং ওভারব্যান্ড ওভারল্যাপিং বিচারকে একত্রিত করে। এটি বাজারের বিভিন্ন অবস্থার সাথে খাপ খাইয়ে নিতে পারে। একই সাথে আরএসআই ইত্যাদির মতো সূচকগুলির সাথে সংকেত ফিল্টারিং করে ভুল লেনদেন এড়াতে পারে। এই কৌশলটি বাজার প্রবণতা অনুসরণ করার প্রয়োজনীয়তা বিবেচনা করে এবং ঝুঁকি নিয়ন্ত্রণ করে। ক্রমাগত অপ্টিমাইজেশনের মাধ্যমে, কৌশলটি স্থিতিশীল লাভজনক পরিমাণযুক্ত ট্রেডিং কৌশল হতে পারে।
/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
//@FiboBuLL
strategy(shorttitle='FB Wave', title='FiboBuLL Wave', overlay=true, pyramiding=1, currency=currency.NONE, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
src = input(close, title='Source')
length = input.int(55, minval=1, title='EMA length') // 20 for classis Bollinger Bands SMA line (basis)
mult = input.float(1., minval=0.236, maxval=2, title='Standard Deviation') //2 for Classic Bollinger Bands //Maxval = 2 as higher the deviation, higher the risk
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
Show = input.string('Both', options=['Longs Only', 'Shorts Only', 'Both'], title='Trade Type')
CC = input(true, 'Color Bars')
upper = basis + dev
lower = basis - dev
//Conditions for Long and Short - Extra filter condition can be used such as RSI or CCI etc.
short = src < lower // and rsi(close,14)<40
long = src > upper // and rsi(close,14)>60
L1 = ta.barssince(long)
S1 = ta.barssince(short)
longSignal = L1 < S1 and not (L1 < S1)[1]
shortSignal = S1 < L1 and not (S1 < L1)[1]
//Plots and Fills
////Long/Short shapes with text
// plotshape(S1<L1 and not (S1<L1)[1]?close:na, text = "sᴇʟʟ", textcolor=#ff0100, color=#ff0100, style=shape.triangledown, size=size.small, location=location.abovebar, transp=0, title = "SELL", editable = true)
// plotshape(L1<S1 and not (L1<S1)[1]?close:na, text = "ʙᴜʏ", textcolor = #008000, color=#008000, style=shape.triangleup, size=size.small, location=location.belowbar, transp=0, title = "BUY", editable = true)
// plotshape(shortSignal?close:na, color=#ff0100, style=shape.triangledown, size=size.small, location=location.abovebar, transp=0, title = "Short Signal", editable = true)
// plotshape(longSignal?close:na, color=#008000, style=shape.triangleup, size=size.small, location=location.belowbar, transp=0, title = "Long Signal", editable = true)
p1 = plot(upper, color=color.new(#ff0000, 75), display=display.all, title='Upper Band')
p2 = plot(lower, color=color.new(#008000, 75), display=display.all, title='Lower Band')
p = plot(basis, color=L1 < S1 ? #008000 : S1 < L1 ? #ff0000 : na, linewidth=2, editable=false, title='Basis')
fill(p, p1, color=color.new(color.teal, 85), title='Top Fill') //fill for basis-upper
fill(p, p2, color=color.rgb(217, 161, 161), title='Bottom Fill', transp=85) //fill for basis-lower
//Barcolor
bcol = src > upper ? color.new(#8ceb07, 0) : src < lower ? color.new(#ff0000, 0) : src > basis ? color.green : src < basis ? color.red : na
barcolor(CC ? bcol : na, editable=false, title='Color Bars')
// //Alerts ---- // Use 'Once per bar close'
// alertcondition(condition=longSignal, title="Long - BB Filter", message='BB Filter Long @ {{close}}') // Use 'Once per bar close'
// alertcondition(condition=shortSignal, title="Short - BB Filter", message='BB Filter Short @ {{close}}') // Use 'Once per bar close'
Notestart1 = input(true, '╔═══ Time Range to BackTest ═══╗')
// === INPUT BACKTEST RANGE ===
FromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=2015)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=2010)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() =>
time >= start and time <= finish ? true : false
if window() and (Show == 'Longs Only' or Show == 'Both')
strategy.entry('AL', direction=strategy.long, when=longSignal)
strategy.close('LongAL', when=shortSignal, comment='AL KAPA')
if window() and (Show == 'Shorts Only' or Show == 'Both')
strategy.entry('SAT', direction=strategy.short, when=shortSignal)
strategy.close('SAT', when=longSignal, comment='SAT KAPA')