یہ حکمت عملی رجحان کی پیروی کرنے کے لئے دوہری حرکت پذیر اوسط بولنگر بینڈ کی بنیاد پر تجارتی فیصلے کرتی ہے۔ یہ بولنگر بینڈ کی اوپری اور نچلی ریلوں کی تبادلہ اور تغیر کا استعمال رجحان کی تبدیلیوں کا تعین کرنے کے لئے کرتا ہے ، نچلی ریل کے قریب خریدتا ہے اور اوپری ریل کے قریب فروخت کرتا ہے ، تاکہ کم خریدنے اور اعلی فروخت کو حاصل کیا جاسکے۔
یہ حکمت عملی سادہ بولنگر بینڈ اور بہتر بولنگر بینڈ دونوں پر لاگو ہوتی ہے۔
سادہ بولنگر بینڈ درمیانی بینڈ کے لئے قریبی قیمتوں کے ایس ایم اے کا استعمال کرتے ہیں ، جبکہ بہتر بولنگر بینڈ قریبی قیمتوں کے ای ایم اے کا استعمال کرتے ہیں۔
اوپری اور نچلی بینڈ کا حساب وسط بینڈ ± N معیاری انحراف کے مطابق کیا جاتا ہے۔
یہ حکمت عملی اوپر اور نیچے کی بینڈ کے درمیان پھیلاؤ کی بنیاد پر رجحان کی طاقت کا اندازہ کرتی ہے۔ جب پھیلاؤ ایک حد سے کم ہوتا ہے تو ، یہ رجحان کی پیروی کے لئے رجحان کی مدت کا آغاز ظاہر کرتا ہے۔
خاص طور پر ، جب قیمت نچلے بینڈ کی طرف بڑھتی ہے تو ، یہ لمبی ہوتی ہے۔ جب قیمت اوپری بینڈ کی طرف بڑھتی ہے تو ، یہ پوزیشن بند کردیتی ہے۔ اسٹاپ نقصان کا طریقہ مقررہ فیصد ہے۔ ٹریلنگ اسٹاپ کو بھی فعال کیا جاسکتا ہے۔
منافع حاصل کرنا درمیانی بینڈ یا اوپری بینڈ کے قریب بند ہونے پر منحصر ہے۔
حکمت عملی نقصانات کو روکنے کے لئے صرف منافع پر فروخت کرنے کا انتخاب بھی کر سکتی ہے.
اس حکمت عملی کے فوائد:
سادہ اور بہتر بولنگر بینڈ کا موازنہ کرکے، یہ اعلی کارکردگی کے لئے بہتر ورژن کا انتخاب کرسکتا ہے.
جب پھیلاؤ تنگ ہوجاتا ہے تو ، یہ ایک مضبوط رجحان کی نشاندہی کرتا ہے۔ رجحان کی پیروی میں جیت کی شرح زیادہ ہوتی ہے۔
مقررہ فیصد اسٹاپ نقصان ایک ہی تجارت کے نقصان کو کنٹرول کرتا ہے۔ درمیانی یا اوپری بینڈ کے قریب منافع حاصل کریں۔ ٹریلنگ اسٹاپ زیادہ منافع میں مقفل ہوتا ہے۔
صرف منافع کے ساتھ فروخت کرنے سے نقصان میں اضافہ نہیں ہوتا۔
خطرات میں شامل ہیں:
رجحان کے بعد اپنے آپ میں کمی کا خطرہ ہوتا ہے۔ ذہنی طور پر مسلسل نقصانات برداشت کرنے کی ضرورت ہے۔
جب بینڈ وسیع ہوتے ہیں تو ، مارکیٹ سائیڈ ویز ہوسکتی ہے۔ حکمت عملی کم موثر ہے۔ جب تک رجحان دوبارہ شروع نہیں ہوتا تب تک تجارت کو روکنے کی ضرورت ہے۔
مقررہ فیصد سٹاپ نقصان بہت جارحانہ ہو سکتا ہے. زیادہ اعتدال پسند سٹاپ کی ضرورت ہے جیسے ATR سٹاپ.
حکمت عملی کو بہتر بنایا جا سکتا ہے:
مختلف مارکیٹوں کے لئے بہترین مجموعے تلاش کرنے کے لئے مختلف ایم اے لمبائی، معیاری انحراف کے کئی بار آزمائیں.
بیلنگر سگنل کے اوپر MACD، KD جیسے فلٹرز شامل کریں تاکہ وِپسا مارکیٹوں کے دوران تجارت کو کم کیا جا سکے۔
مختلف ٹریلنگ اسٹاپ طریقوں کی جانچ کریں۔ یا اتار چڑھاؤ ، اے ٹی آر وغیرہ کی بنیاد پر اسٹاپ نقصان کو بہتر بنائیں۔
ہر تجارت کے مطابق پوزیشن سائزنگ کو بہتر بنائیں۔ مختلف اضافی حکمت عملیوں کی جانچ کریں۔
یہ حکمت عملی دوہری بولنگر بینڈ کی طاقت کو یکجا کرتی ہے ، بینڈ کی چوڑائی اور رجحانات کے دوران ٹریڈنگ کی واپسی کے ذریعہ رجحان کی طاقت کا فیصلہ کرتی ہے۔ یہ خطرات پر قابو پانے کے لئے مناسب اسٹاپ نقصان بھی طے کرتی ہے۔ پیرامیٹر کی اصلاح اور فلٹرز کا اضافہ کرکے مزید بہتری لائی جاسکتی ہے۔
/*backtest start: 2023-10-01 00:00:00 end: 2023-10-31 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © JCGMarkets //@version=4 strategy("B.Bands | Augmented | Intra-range | Long-Only", shorttitle = "BB|A|IR|L", initial_capital=5000, commission_value=0.075, slippage = 1, overlay = true) //Technical Indicators Data show_simp = input(false, title="Trade on Simple Bollinger Bands ", type= input.bool, group="Select Strategy System") show_augm = input(true, title="Trade on Augmented Bollinger Bands", type= input.bool, group="Select Strategy System") periods = input(20, title="Periods for Moving Average", type =input.integer, minval = 2, step = 1, group="Technical Inputs") std = input(2, title="Std", type = input.float, minval=0.1 , step = 0.1, group="Technical Inputs") // Strategy data max_spread_bb = input(20000.0, title="Max Spread Tolerance Beetween Bands", type=input.float, step=0.1, group="Strategy Inputs") entry_source = input(close, title="Entry data source", type=input.source, group="Strategy Inputs") exit_source = input(high, title="Exit data source", type=input.source, group="Strategy Inputs") take_profit = input("middle", title = "Profit to band:", options = ["middle", "opposite"], group="Strategy Inputs") stop_loss = input(3.00, title="Stop Loss %", type=input.float, step=0.05, group="Strategy Inputs") trailing = input(false, title="Activate trailing stop?", type = input.bool, group="Strategy Inputs") stop_perc = input(6.00, title="Trailing %", type=input.float, step=0.125, group="Strategy Inputs") * 0.01 sell_profit = input(false, title="Only sell in profit (Stop Loss still active) ", type= input.bool, group="Strategy Inputs") var SL = 0.0 var SLT= 0.0 //Simple BB Calculation -> adapt if needed with different std for upper-lower, sma-ema, etc middle_sim = sma(close, periods) //Augmented BB Calculation -> adapt if needed with different std for upper lower, etc middle_augm = ema(close, periods) middle_upp = ema(high, periods) middle_low = ema(low, periods) //Multiplier dev = stdev(close, periods) * std //Upper & Lower Bands upper = (middle_sim + dev) lower = (middle_sim - dev) //Augmented Bands upper_augm = (middle_upp + dev) lower_augm = (middle_low - dev) //Bands Spread spread = upper - lower spread_augm = upper_augm - lower_augm //From date filter_from = input( true, title="===> From", group="Date Control") from_y = input( 2010, title = "from year", group="Date Control") from_m = input( 1, title = "from month", minval =1, maxval=12, group="Date Control") from_d = input( 1, title = "from day", minval=1, maxval=31, group="Date Control") //To date filter_to = input( true, title="===> To", group="Date Control") to_y = input( 2030, title = "To year", group="Date Control") to_m = input( 1, title = "To month", minval =1, maxval=12, group="Date Control") to_d = input( 1, title = "To day", minval=1, maxval=31, group="Date Control") // Date Condition In_date() => true in_position = strategy.position_size > 0 // Trailing stop SLT := if in_position and In_date() stop_inicial = entry_source * (1 - stop_perc) max(stop_inicial, SLT[1]) else 0 slts = (low <= SLT) and (trailing == true) //Essential Trade logics entry_long = (entry_source <= lower) and (spread < max_spread_bb) entry_long_augm = (entry_source <= lower_augm) and (spread_augm < max_spread_bb) // Simple Bollinger Conditions if (not in_position and show_simp and In_date()) if entry_long // Trigger buy order position_size = round( strategy.equity / close ) // All available equity for this strategy example strategy.entry("Entry", strategy.long, qty = position_size ) SL := close * (1 - (stop_loss / 100)) // You could determine wether or not implement stop loss with bool input and if condition here. if in_position and show_simp and not sell_profit and In_date() //Exits if not sell in profit if take_profit == "middle" strategy.exit("Target", "Entry", limit = middle_sim, stop = SL, comment="Exit") if take_profit == "opposite" strategy.exit("Target", "Entry", limit = upper, stop = SL, comment="Exit") if in_position and show_simp and sell_profit and In_date() //Exits if sell in profit if take_profit == "middle" strategy.exit("Target", "Entry", limit = (strategy.openprofit > 0 ? middle_sim: na), stop = SL, comment="Exit") if take_profit == "opposite" strategy.exit("Target", "Entry", limit = (strategy.openprofit > 0 ? upper: na), stop = SL, comment="Exit") if in_position and show_simp and slts and In_date() //Trailing activation strategy.close("Entry", comment="SLT") if not In_date() //Exit due out of date range strategy.close("Entry", comment="Out of date range") // Augmented Bollinger Conditions if (not in_position and show_augm and In_date()) if entry_long_augm // Trigger buy order position_size = round( strategy.equity / close ) strategy.entry("Entry_A", strategy.long, qty = position_size ) SL := close * (1 - (stop_loss / 100) ) if in_position and show_augm and not sell_profit and In_date() //Exits and not sell in profit if take_profit == "middle" strategy.exit("Target", "Entry_A", limit = middle_augm, stop = SL, comment="Exit") if take_profit == "opposite" strategy.exit("Target", "Entry_A", limit = upper_augm, stop = SL, comment="Exit") if in_position and show_augm and sell_profit and In_date() //Exit only in profit if take_profit == "middle" strategy.exit("Target", "Entry_A", limit = (strategy.openprofit > 0 ? middle_augm:na), stop = SL, comment="Exit") if take_profit == "opposite" strategy.exit("Target", "Entry_A", limit = (strategy.openprofit > 0 ? upper_augm: na) , stop = SL, comment="Exit") if in_position and show_augm and slts and In_date() //Trigger trailing strategy.close("Entry_A", comment="SLT") if not In_date() //Out of date trigger strategy.close("Entry_A", comment= "Out of date range") // Plotting plot(in_position ? SL > 0 ? SL : na : na , style = plot.style_circles, color = color.red, title = "Stop Loss") plot(in_position ? trailing ? SLT > 0 ? SLT : na : na : na , style = plot.style_circles, color = color.blue, title = "Trailing Stop" ) s = plot(show_simp ? upper : na , color = color.aqua) plot(show_simp ? middle_sim : na , color=color.red) i = plot(show_simp ? lower : na , color = color.aqua) fill(s,i, color=color.new(color.aqua,90)) plot(show_augm ? middle_augm : na , color=color.blue) s_a = plot( show_augm ? upper_augm : na, color=color.orange) i_a = plot( show_augm ? lower_augm : na, color= color.orange) fill(s_a,i_a, color=color.new(color.orange, 90))