یہ حکمت عملی بولنگر بینڈ اور رشتہ دار طاقت انڈیکس (آر ایس آئی) کو یکجا کرتی ہے تاکہ مواقع کی نشاندہی کی جاسکے جب بولنگر بینڈ سکیڑ رہے ہیں اور آر ایس آئی بڑھ رہا ہے ، خطرات کو کنٹرول کرنے کے لئے پیچھے رکنے والے نقصان کے ساتھ۔
اس حکمت عملی کا بنیادی منطق بولنگر بینڈ کے دباؤ کی نشاندہی کرنا اور جب آر ایس آئی اپ ٹرینڈ میں ہوتا ہے تو قیمت کے وقفے کی پیش گوئی کرنا ہے۔ خاص طور پر ، جب 20 پیریڈ بی بی مڈل بینڈ کا معیاری انحراف اے ٹی آر * 2 سے کم ہوتا ہے تو ، ہم اس بات کا تعین کرتے ہیں کہ بی بی دباؤ ہو رہا ہے۔ دریں اثنا ، اگر 10 اور 14 پیریڈ آر ایس آئی دونوں بڑھ رہے ہیں تو ، ہم پیش گوئی کرتے ہیں کہ قیمتیں جلد ہی بی بی کے اوپری بینڈ سے تجاوز کرسکتی ہیں اور طویل عرصے تک جاسکتی ہیں۔
مارکیٹ میں داخل ہونے کے بعد ، ہم منافع کو مقفل کرنے اور خطرات کو سنبھالنے کے لئے اے ٹی آر سیفٹی فاصلہ + انکولی اسٹاپ نقصان کا استعمال کرتے ہیں۔ جب قیمت اسٹاپ نقصان کو مار دیتی ہے یا آر ایس آئی زیادہ ہو جاتا ہے تو پوزیشنیں بند ہوجاتی ہیں۔ (14 پیریڈ آر ایس آئی 70 سے اوپر اور 10 پیریڈ آر ایس آئی 14 سے زیادہ ہے۔)
اس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ بی بی سکڑنے کے ساتھ استحکام کی مدت کی نشاندہی کی جائے اور آر ایس آئی کے ساتھ بریک آؤٹ کی سمت کی پیش گوئی کی جائے۔ اس کے علاوہ ، فکسڈ اسٹاپ نقصان کے بجائے مارکیٹ میں اتار چڑھاؤ کی بنیاد پر موافقت پذیر اسٹاپ نقصان کا استعمال کرتے ہوئے خطرہ پر قابو پانے کے دوران منافع کو بہتر طریقے سے مقفل کیا جاسکتا ہے۔
اس حکمت عملی کا سب سے بڑا خطرہ بی بی سکڑ اور آر ایس آئی اپ ٹرینڈ کی غلط نشاندہی ہے ، جس کی وجہ سے غلط بریک آؤٹ ہوسکتا ہے۔ اس کے علاوہ ، اعلی اتار چڑھاؤ کے دوران موافقت پذیر اسٹاپ نقصان بروقت پوزیشنوں کو بند کرنے میں ناکام ہوسکتا ہے۔ منحنی سٹاپ نقصان جیسے اسٹاپ نقصان کے طریقوں کو بہتر بنانا اس خطرے کو کم کرسکتا ہے۔
اس حکمت عملی کو مندرجہ ذیل پہلوؤں میں مزید بہتر بنایا جاسکتا ہے:
زیادہ درست طریقے سے squeeze کی شناخت کے لئے BB پیرامیٹرز کو بہتر بنائیں
RSI کی مدت کے لئے مختلف اقدار کی جانچ کریں
دیگر سٹاپ نقصان کی تکنیک جیسے منحنی SL یا پیچھے دیکھنے والی SL کا جائزہ لیں
علامت کی خصوصیات کی بنیاد پر پیرامیٹرز کو ایڈجسٹ کریں
یہ حکمت عملی بی بی اور آر ایس آئی کی تکمیل کو فائدہ پہنچاتی ہے تاکہ اچھے رسک ایڈجسٹڈ منافع کو حاصل کیا جاسکے۔ اسٹاپ نقصان اور پیرامیٹر ٹیوننگ جیسے پہلوؤں پر مزید اصلاحات اسے مختلف تجارتی آلات کے لئے بہتر بناسکتی ہیں۔
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 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/ // © DojiEmoji // //@version=4 strategy("[KL] BOLL + RSI Strategy",overlay=true,pyramiding=1) // Timeframe { backtest_timeframe_start = input(defval = timestamp("01 Apr 2016 13:30 +0000"), title = "Backtest Start Time", type = input.time) USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)") backtest_timeframe_end = input(defval = timestamp("01 May 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time) within_timeframe = true // } // Bollinger bands (sdv=2, len=20) { BOLL_length = 20, BOLL_src = close, SMA20 = sma(BOLL_src, BOLL_length), BOLL_sDEV_x2 = 2 * stdev(BOLL_src, BOLL_length) BOLL_upper = SMA20 + BOLL_sDEV_x2, BOLL_lower = SMA20 - BOLL_sDEV_x2 plot(SMA20, "Basis", color=#872323, offset = 0) BOLL_p1 = plot(BOLL_upper, "BOLL Upper", color=color.navy, offset = 0, transp=50) BOLL_p2 = plot(BOLL_lower, "BOLL Lower", color=color.navy, offset = 0, transp=50) fill(BOLL_p1, BOLL_p2, title = "Background", color=#198787, transp=85) // } // Volatility Indicators { ATR_x2 = atr(BOLL_length) * 2 // multiplier aligns with BOLL avg_atr = sma(ATR_x2, input(1,title="No. of candles to lookback when determining ATR is decreasing")) plot(SMA20+ATR_x2, "SMA20 + ATR_x2", color=color.gray, offset = 0, transp=50) plot(SMA20-ATR_x2, "SMA20 - ATR_x2", color=color.gray, offset = 0, transp=50) plotchar(ATR_x2, "ATR_x2", "", location = location.bottom) //} // Trailing stop loss { TSL_source = low var entry_price = float(0), var stop_loss_price = float(0) trail_profit_line_color = color.green if strategy.position_size == 0 or not within_timeframe trail_profit_line_color := color.black stop_loss_price := TSL_source - ATR_x2 else if strategy.position_size > 0 stop_loss_price := max(stop_loss_price, TSL_source - ATR_x2) plot(stop_loss_price, color=trail_profit_line_color) if strategy.position_size > 0 and stop_loss_price > stop_loss_price[1] alert("Stop loss limit raised", alert.freq_once_per_bar) // } end of Trailing stop loss //Buy setup - Long positions { is_squeezing = ATR_x2 > BOLL_sDEV_x2 if is_squeezing and within_timeframe and not is_squeezing[1] alert("BOLL bands are squeezing", alert.freq_once_per_bar) else if not is_squeezing and within_timeframe and is_squeezing[1] alert("BOLL bands stopped squeezing", alert.freq_once_per_bar) ema_trend = ema(close, 20) concat(a, b) => concat = a if a != "" concat := concat + ", " concat := concat + b concat // } // Sell setup - Long position { rsi_10 = rsi(close, 10), rsi_14 = rsi(close, 14) overbought = rsi_14 > input(70,title="[Exit] RSI(14) value considered as overbought") and rsi_10 > rsi_14 // } end of Sell setup - Long position // MAIN: { if within_timeframe entry_msg = "" exit_msg = "" // ENTRY { conf_count = 0 volat_decr = avg_atr <= avg_atr[1] rsi_upslope = rsi_10 > rsi_10[1] and rsi_14 > rsi_14[1] if volat_decr and rsi_upslope and is_squeezing and strategy.position_size == 0 strategy.entry("Long",strategy.long, comment=entry_msg) entry_price := close stop_loss_price := TSL_source - ATR_x2 // } // EXIT { if strategy.position_size > 0 bExit = false if close <= entry_price and TSL_source <= stop_loss_price exit_msg := concat(exit_msg, "stop loss [TSL]") bExit := true else if close > entry_price and TSL_source <= stop_loss_price exit_msg := concat(exit_msg, "take profit [TSL]") bExit := true else if overbought exit_msg := concat(exit_msg, "overbought") bExit := true strategy.close("Long", when=bExit, comment=exit_msg) // } // } // CLEAN UP: if strategy.position_size == 0 and not is_squeezing entry_price := 0 stop_loss_price := float(0)