یہ بولنگر بینڈ چینل پر مبنی الٹ پھیر نوسن رجحان کی حکمت عملی ہے۔ یہ رجحان کا تعین کرنے کے لئے بولنگر بینڈ کے اوپری اور نچلے چینل کا استعمال کرتا ہے ، اور جب قیمت چینل کی حدود کے قریب آجاتی ہے تو الٹ پھیر کے مواقع تلاش کرتا ہے۔
اس حکمت عملی میں بولنگر بینڈ کو اہم تکنیکی اشارے کے طور پر استعمال کیا جاتا ہے۔ بولنگر بینڈ میں این پیریڈ کی حرکت پذیر اوسط اور اوپری / نچلی بینڈ کے انحراف پر مشتمل ہوتا ہے۔ اوپری بینڈ = این پیریڈ ایم اے + ایم * این پیریڈ معیاری انحراف ، نچلی بینڈ = این پیریڈ ایم اے - ایم * این پیریڈ معیاری انحراف۔ این اور ایم پیرامیٹر ہیں۔
جب قیمت اوپری بینڈ کی طرف بڑھتی ہے تو ، یہ ایک اپ ٹرینڈ کی نشاندہی کرتی ہے لیکن چوٹی پر الٹ سکتی ہے۔ جب قیمت نچلی بینڈ کی طرف بڑھتی ہے تو ، یہ ایک ڈاؤن ٹرینڈ کی نشاندہی کرتی ہے لیکن نیچے کی طرف الٹ سکتی ہے۔ بولنگر بینڈ کی موثر خرابی ممکنہ الٹ کی نشاندہی کرسکتی ہے۔
تجارت کے مخصوص قوانین یہ ہیں:
قریب > اوپری بینڈ پر طویل جانا، قریب < نچلے بینڈ پر مختصر جانا.
منافع لینے اور اسٹاپ نقصان سگنل کے طور پر این پیریڈ چلتی اوسط کا استعمال کریں۔ جب بند ہونے والے وقفے MA سے نیچے ہوں تو طویل بند کریں ، جب بند ہونے والے وقفے MA سے اوپر ہوں تو مختصر بند کریں۔
ہر تجارت کے لئے مقررہ مقدار کا استعمال کریں.
مقررہ جزوی پوزیشن سائزنگ کا استعمال کریں۔ مقررہ منافع تناسب کو پورا کرتے وقت پوزیشن سائز کو مقررہ رقم سے بڑھائیں ، نقصان کے وقت سائز کو کم کریں۔
اس حکمت عملی کے فوائد:
رجحان کی سمت اور تجارت کی تبدیلیوں کا تعین کرنے کے لئے بولنگر بینڈ چینل کا استعمال کرتے ہوئے ، زیادہ تر وِپساؤ سے بچتا ہے اور جیت کی شرح کو بہتر بناتا ہے۔
چلتی اوسط ایک قابل اعتماد منافع لینے / سٹاپ نقصان سگنل ہے، زیادہ تر منافع میں تالے.
مقررہ مقدار آسان اور آسان ہے، پیچیدہ حساب کی ضرورت نہیں ہے.
فکسڈ فریکشنل پوزیشن سائزنگ منافع میں توسیع کرتی ہے جبکہ پوزیشن ایڈجسٹمنٹ کے ذریعے خطرے کو کنٹرول کرتی ہے۔
اس حکمت عملی کے خطرات:
بولنگر بینڈ غلط سگنل پیدا کر سکتے ہیں، جس سے رجحان کے خلاف تجارت میں نقصان ہوتا ہے۔
چلتی اوسط کی تاخیر سے ناکافی منافع حاصل ہوسکتا ہے۔
فکسڈ مقدار مارکیٹ کے حالات کے مطابق نہیں بن سکتی، پوزیشن سائزنگ سے زیادہ یا کم ہونے کا خطرہ ہے۔
فکسڈ فریکشنل طریقہ کار میں پوزیشن سائزنگ کی جارحانہ ایڈجسٹمنٹ نقصانات کو بڑھا سکتی ہے۔
حل: سگنل کی درستگی کو بہتر بنانے کے لئے بولنگر بینڈ پیرامیٹرز کو بہتر بنائیں۔ رجحان کا تعین کرنے کے لئے دوسرے اشارے شامل کریں۔ مقررہ مقدار کے سائز کو کم کریں۔ جزوی پوزیشن سائزنگ کے طریقہ کار میں پوزیشن سائزنگ ایڈجسٹمنٹ تناسب کو کم کریں۔
اسٹریٹیجی کو مندرجہ ذیل پہلوؤں سے بہتر بنایا جاسکتا ہے:
درستگی بڑھانے کے لئے این اور ایم جیسے بولنگر بینڈ پیرامیٹرز کو بہتر بنائیں.
غلط سگنل سے بچنے کے لیے MACD، KD جیسے دیگر اشارے شامل کریں۔
مقررہ مقدار کو مارکیٹ کے حالات کی بنیاد پر متحرک پوزیشننگ میں تبدیل کریں۔
کم پوزیشن سائزنگ ایڈجسٹمنٹ ریشو فریکشنل پوزیشن سائزنگ میں ہموار ایکویٹی وکر کے لئے۔
سٹاپ نقصان کی حکمت عملی شامل کریں جیسے اسٹاپ نقصان کو منتقل کرنا، خطرے کو کنٹرول کرنے کے لئے روکنے کے نقصان کو روکنا.
بہترین پیرامیٹر مجموعے تلاش کرنے کے لئے پیرامیٹر کی اصلاح.
خلاصہ یہ ہے کہ ، یہ ایک عام بولنگر بینڈ ریورسنگ حکمت عملی ہے۔ یہ بولنگر بینڈ کے ذریعہ ریورسنگ پوائنٹس کی نشاندہی کرتا ہے ، متحرک اوسط کے ذریعہ منافع لینے / اسٹاپ نقصان کا تعین کرتا ہے ، فکسڈ مقدار اور جزوی پوزیشن سائزنگ کے ذریعہ خطرے کو کنٹرول کرتا ہے۔ ایک ریورسنگ حکمت عملی کے طور پر ، یہ نظریاتی طور پر کچھ وِپساؤ سے بچتا ہے اور روایتی بولنگر بینڈ حکمت عملی کے مقابلے میں منافع کو بہتر بناتا ہے۔ تاہم ، بولنگر بینڈ میں خامیاں ، متحرک اوسط کو مضبوط عملی درخواست کے ل further مزید اصلاح اور رسک مینجمنٹ کی ضرورت ہوتی ہے۔
/*backtest start: 2023-09-30 00:00:00 end: 2023-10-30 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/ // © gsanson66 //This strategy uses the well-known Bollinger Bands Indicator //@version=5 strategy("BOLLINGER BANDS BACKTESTING", shorttitle="BB BACKTESTING", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=950, commission_type=strategy.commission.percent, commission_value=0.18) //----------------------------------------FUNCTIONS---------------------------------------// //@function Displays text passed to `txt` when called. debugLabel(txt, color) => label.new(bar_index, high, text = txt, color=color, style = label.style_label_lower_right, textcolor = color.black, size = size.small) //@function which looks if the close date of the current bar falls inside the date range inBacktestPeriod(start, end) => (time >= start) and (time <= end) //---------------------------------------USER INPUTS--------------------------------------// //Technical parameters bbLength = input.int(defval=20, minval=1, title="BB Length", group="Technical Parameters") mult = input.float(defval=2, minval=0.1, title="Standard Deviation Multipler", group="Technical Parameters") smaLength = input.int(defval=20, minval=1, title="SMA Exit Signal Length", group="Technical Parameters") //Money Management fixedRatio = input.int(defval=400, minval=1, title="Fixed Ratio Value ($)", group="Money Management") increasingOrderAmount = input.int(defval=200, minval=1, title="Increasing Order Amount ($)", group="Money Management") //Backtesting period startDate = input(title="Start Date", defval=timestamp("1 Jan 2020 00:00:00"), group="Backtesting Period") endDate = input(title="End Date", defval=timestamp("1 July 2024 00:00:00"), group="Backtesting Period") //----------------------------------VARIABLES INITIALISATION-----------------------------// strategy.initial_capital = 50000 //Exit SMA smaExit = ta.sma(close, smaLength) //BB Calculation basis = ta.sma(close, bbLength) dev = mult * ta.stdev(close, bbLength) upperBB = basis + dev lowerBB = basis - dev //Money management equity = strategy.equity - strategy.openprofit var float capital_ref = strategy.initial_capital var float cashOrder = strategy.initial_capital * 0.95 //Backtesting period bool inRange = na //------------------------------CHECKING SOME CONDITIONS ON EACH SCRIPT EXECUTION-------------------------------// //Checking if the date belong to the range inRange := true //Checking performances of the strategy if equity > capital_ref + fixedRatio spread = (equity - capital_ref)/fixedRatio nb_level = int(spread) increasingOrder = nb_level * increasingOrderAmount cashOrder := cashOrder + increasingOrder capital_ref := capital_ref + nb_level*fixedRatio if equity < capital_ref - fixedRatio spread = (capital_ref - equity)/fixedRatio nb_level = int(spread) decreasingOrder = nb_level * increasingOrderAmount cashOrder := cashOrder - decreasingOrder capital_ref := capital_ref - nb_level*fixedRatio //Checking if we close all trades in case where we exit the backtesting period if strategy.position_size!=0 and not inRange strategy.close_all() debugLabel("END OF BACKTESTING PERIOD : we close the trade", color=color.rgb(116, 116, 116)) //-----------------------------------EXIT SIGNAL------------------------------// if strategy.position_size > 0 and close < smaExit strategy.close("Long") if strategy.position_size < 0 and close > smaExit strategy.close("Short") //----------------------------------LONG/SHORT CONDITION---------------------------// //Long Condition if close > upperBB and inRange qty = cashOrder/close strategy.entry("Long", strategy.long, qty) //Short Condition if close < lowerBB and inRange qty = cashOrder/close strategy.entry("Short", strategy.short, qty) //---------------------------------PLOTTING ELEMENT----------------------------------// plot(smaExit, color=color.orange) upperBBPlot = plot(upperBB, color=color.blue) lowerBBPlot = plot(lowerBB, color=color.blue) fill(upperBBPlot, lowerBBPlot, title = "Background", color=strategy.position_size>0 ? color.rgb(0, 255, 0, 90) : strategy.position_size<0 ? color.rgb(255, 0, 0, 90) : color.rgb(33, 150, 243, 95))