এই কৌশলটি বোলিংজার ব্যান্ডের ব্রেকআউটের উপর ভিত্তি করে একটি পরিমাণগত ট্রেডিং সিস্টেম, উপরের ব্যান্ডের জন্য 3 টি স্ট্যান্ডার্ড ডিভিয়েশন এবং নিম্ন ব্যান্ডের জন্য 1 টি স্ট্যান্ডার্ড ডিভিয়েশন ব্যবহার করে, মাঝারি ব্যান্ড হিসাবে 100 দিনের চলমান গড়ের সাথে মিলিত। কৌশলটি মূলত উপরের ব্যান্ডের উপরে মূল্যের ব্রেকআউট সনাক্ত করে দীর্ঘমেয়াদী প্রবণতা ক্যাপচার করে এবং নিম্ন ব্যান্ডটি স্টপ-লস সংকেত হিসাবে ব্যবহার করে। মূল ধারণাটি হ'ল শক্তিশালী ব্রেকআউটের সময় অবস্থান প্রবেশ করা এবং যখন দাম নিম্ন ব্যান্ডের নীচে পড়ে তখন বেরিয়ে আসা, নিয়ন্ত্রিত ঝুঁকি অনুসরণকারী প্রবণতা অর্জন করা।
মূল নীতিটি বোলিংজার ব্যান্ডের পরিসংখ্যানগত বৈশিষ্ট্যগুলির উপর ভিত্তি করে। উপরের ব্যান্ডটি 3 টি মান বিচ্যুতি ব্যবহার করে, যার অর্থ স্বাভাবিক বন্টনের অনুমানের অধীনে, এই স্তরের উপরে দামের ভাঙ্গনের সম্ভাবনা মাত্র 0.15%, যা ব্রেকআউট হওয়ার সময় উল্লেখযোগ্য প্রবণতা গঠনের পরামর্শ দেয়। মাঝের ব্যান্ডটি 100 দিনের চলমান গড় ব্যবহার করে, যা স্বল্পমেয়াদী বাজারের গোলমালকে কার্যকরভাবে ফিল্টার করার জন্য যথেষ্ট দীর্ঘ সময়। নীচের ব্যান্ডটি 1 স্ট্যান্ডার্ড বিচ্যুতিকে স্টপ-লস লাইন হিসাবে ব্যবহার করে, একটি অপেক্ষাকৃত সংরক্ষণশীল সেটিং যা সময়মত প্রস্থান করতে সহায়তা করে। কৌশলটি দীর্ঘ সংকেত তৈরি করে যখন দাম উপরের ব্যান্ডের উপরে ভঙ্গ করে এবং যখন দাম নীচের ব্যান্ডের নীচে পড়ে তখন প্রস্থান করে।
এটি একটি সু-ডিজাইন করা প্রবণতা অনুসরণকারী কৌশল যা স্পষ্ট যুক্তিযুক্ত। বোলিংজার ব্যান্ডগুলির পরিসংখ্যানগত বৈশিষ্ট্য এবং চলমান গড়ের প্রবণতা অনুসরণকারী বৈশিষ্ট্যগুলির মাধ্যমে এটি কার্যকরভাবে উল্লেখযোগ্য বাজার ব্রেকআউট সুযোগগুলি ক্যাপচার করে। যদিও ড্রডাউন ঝুঁকি রয়েছে, যুক্তিসঙ্গত স্টপ-লস সেটিংস এবং ঝুঁকি নিয়ন্ত্রণের মাধ্যমে কৌশলটি ব্যবহারিক মূল্য বজায় রাখে। আরও অপ্টিমাইজেশনের সম্ভাবনা সংকেত নিশ্চিতকরণ, স্টপ-লস প্রক্রিয়া এবং অবস্থান পরিচালনার দিকগুলিতে রয়েছে।
/*backtest start: 2024-11-12 00:00:00 end: 2024-12-11 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © MounirTrades007 // @version=6 strategy("Bollinger Bands", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=200) // Get user input var g_bb = "Bollinger Band Settings" upperBandSD = input.float(title="Upper Band Std Dev", defval=3.0, tooltip="Upper band's standard deviation multiplier", group=g_bb) lowerBandSD = input.float(title="Lower Band Std Dev", defval=1.0, tooltip="Lower band's standard deviation multiplier", group=g_bb) maPeriod = input.int(title="Middle Band MA Length", defval=100, tooltip="Middle band's SMA period length", group=g_bb) var g_tester = "Backtester Settings" drawTester = input.bool(title="Draw Backtester", defval=true, group=g_tester, tooltip="Turn on/off inbuilt backtester display") // Get Bollinger Bands [bbIgnore1, bbHigh, bbIgnore2] = ta.bb(close, maPeriod, upperBandSD) [bbMid, bbIgnore3, bbLow] = ta.bb(close, maPeriod, lowerBandSD) // Prepare trade persistent variables drawEntry = false drawExit = false // Detect bollinger breakout if close > bbHigh and barstate.isconfirmed and strategy.position_size == 0 drawEntry := true strategy.entry(id="Trade", direction=strategy.long) alert("Bollinger Breakout Detected for " + syminfo.ticker, alert.freq_once_per_bar_close) // Detect bollinger sell signal if close < bbLow and barstate.isconfirmed and strategy.position_size != 0 drawExit := true strategy.close(id="Trade") alert("Bollinger Exit detected for " + syminfo.ticker, alert.freq_once_per_bar_close) // Draw bollinger bands plot(bbMid, color=color.blue, title="Middle SMA") plot(bbHigh, color=color.green, title="Upper Band") plot(bbLow, color=color.red, title="Lower Band") // Draw signals plotshape(drawEntry, style=shape.triangleup, color=color.green, location=location.belowbar, size=size.normal, title="Buy Signal") plotshape(drawExit, style=shape.xcross, color=color.red, location=location.belowbar, size=size.normal, title="Sell Signal") // // ============================================================================= // // START BACKTEST CODE // // ============================================================================= // // Prepare stats table // var table testTable = table.new(position.top_right, 2, 2, border_width=1) // f_fillCell(_table, _column, _row, _title, _value, _bgcolor, _txtcolor) => // _cellText = _title + "\n" + _value // table.cell(_table, _column, _row, _cellText, bgcolor=_bgcolor, text_color=_txtcolor) // // Draw stats table // var bgcolor = color.black // if barstate.islastconfirmedhistory // if drawTester // dollarReturn = strategy.equity - strategy.initial_capital // f_fillCell(testTable, 0, 0, "Total Trades:", str.tostring(strategy.closedtrades), bgcolor, color.white) // f_fillCell(testTable, 0, 1, "Win Rate:", str.tostring(strategy.wintrades / strategy.closedtrades * 100, "##.##") + "%", bgcolor, color.white) // f_fillCell(testTable, 1, 0, "Equity:", "$" + str.tostring(strategy.equity, "###,###.##"), bgcolor, color.white) // f_fillCell(testTable, 1, 1, "Return:", str.tostring((strategy.netprofit / strategy.initial_capital) * 100, "##.##") + "%", dollarReturn > 0 ? color.green : color.red, color.white) // // ============================================================================= // // END BACKTEST CODE // // =============================================================================