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