یہ حکمت عملی بولنگر بینڈ بریک آؤٹ پر مبنی ایک مقداری تجارتی نظام ہے ، جس میں اوپری بینڈ کے لئے 3 معیاری انحراف اور نچلے بینڈ کے لئے 1 معیاری انحراف کا استعمال کیا جاتا ہے ، جس میں درمیانی بینڈ کے طور پر 100 دن کی حرکت پذیر اوسط کے ساتھ مل کر ہے۔ یہ حکمت عملی بنیادی طور پر اوپری بینڈ سے اوپر کی قیمتوں میں بریک آؤٹ کا پتہ لگاکر طویل مدتی رجحانات کو پکڑتی ہے اور نچلے بینڈ کو اسٹاپ نقصان سگنل کے طور پر استعمال کرتی ہے۔ بنیادی تصور یہ ہے کہ مضبوط بریک آؤٹ کے دوران پوزیشنوں میں داخل ہوں اور جب قیمتیں نچلی بینڈ سے نیچے آجائیں تو باہر نکلیں ، جس سے کنٹرول شدہ رسک رجحان کے بعد حاصل ہوتا ہے۔
بنیادی اصول بولنگر بینڈ کی شماریاتی خصوصیات پر مبنی ہے۔ اوپری بینڈ 3 معیاری انحرافات کا استعمال کرتا ہے ، جس کا مطلب ہے کہ عام تقسیم کے مفروضوں کے تحت ، اس سطح سے اوپر کی قیمت توڑنے کا امکان صرف 0.15٪ ہے ، جس سے یہ ظاہر ہوتا ہے کہ جب بریک آؤٹ ہوتے ہیں تو اہم رجحان کی تشکیل ہوتی ہے۔ درمیانی بینڈ 100 دن کا چلتا ہوا اوسط استعمال کرتا ہے ، جو قلیل مدتی مارکیٹ شور کو مؤثر طریقے سے فلٹر کرنے کے لئے کافی لمبا عرصہ ہوتا ہے۔ نچلا بینڈ 1 معیاری انحراف کو اسٹاپ نقصان لائن کے طور پر استعمال کرتا ہے ، جو نسبتا conser محافظ ترتیب ہے جو بروقت باہر نکلنے میں مدد کرتی ہے۔ حکمت عملی طویل سگنل پیدا کرتی ہے جب قیمت اوپری بینڈ سے اوپر ٹوٹ جاتی ہے اور جب قیمت نچلی بینڈ سے نیچے آجاتی ہے تو باہر نکل جاتی ہے۔
یہ واضح منطق کے ساتھ حکمت عملی کے بعد ایک اچھی طرح سے ڈیزائن کیا گیا رجحان ہے۔ بولنگر بینڈ کی شماریاتی خصوصیات اور چلتی اوسط کی رجحان کی خصوصیات کے ذریعہ ، یہ مؤثر طریقے سے مارکیٹ کے اہم مواقع پر قبضہ کرتا ہے۔ اگرچہ ڈراؤونگ کے خطرات موجود ہیں ، لیکن حکمت عملی معقول اسٹاپ نقصان کی ترتیبات اور رسک کنٹرول کے ذریعے عملی قدر برقرار رکھتی ہے۔ مزید اصلاح کی صلاحیت سگنل کی تصدیق ، اسٹاپ نقصان کے طریقہ کار اور پوزیشن مینجمنٹ کے پہلوؤں میں ہے۔
/*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 // // =============================================================================