یہ حکمت عملی بولنگر بینڈ اشارے اور اوسط حقیقی رینج (اے ٹی آر) اشارے کو یکجا کرتی ہے تاکہ ٹریلنگ اسٹاپ نقصان کے فنکشن کے ساتھ بریک آؤٹ ٹریڈنگ حکمت عملی تشکیل دی جاسکے۔ تجارتی سگنل اس وقت پیدا ہوتے ہیں جب قیمتیں مخصوص معیاری انحراف کے بولنگر بینڈ کو توڑ دیتی ہیں۔ اسی وقت ، اے ٹی آر اشارے کا استعمال اسٹاپ نقصان کا حساب کرنے اور رسک / انعام تناسب کو کنٹرول کرنے کے لئے منافع لینے کے لئے کیا جاتا ہے۔ اس کے علاوہ ، اس حکمت عملی میں ٹائم فلٹر اور پیرامیٹر کی اصلاح جیسی خصوصیات بھی ہیں۔
مرحلہ 1 ، درمیانی بینڈ ، اوپری بینڈ اور نچلے بینڈ کا حساب لگائیں۔ درمیانی بینڈ قیمت کا سادہ چلتا ہوا اوسط (ایس ایم اے) ہے ، اور اوپری اور نچلی بینڈ قیمت کے معیاری انحراف کے ضرب ہیں۔ جب قیمت نچلی بینڈ سے اوپر کی طرف ٹوٹ جاتی ہے تو ، طویل ہوجائیں۔ جب قیمت اوپری بینڈ سے نیچے کی طرف ٹوٹ جاتی ہے تو ، مختصر ہوجائیں۔
مرحلہ 2 ، اے ٹی آر اشارے کا حساب لگائیں۔ اے ٹی آر اشارے قیمت کی اوسط اتار چڑھاؤ کی عکاسی کرتا ہے۔ اے ٹی آر کی قیمت کے مطابق ، لمبی پوزیشنوں اور مختصر پوزیشنوں کے لئے اسٹاپ نقصان مرتب کریں۔ اسی وقت ، خطرہ / انعام کے تناسب کو کنٹرول کرنے کے لئے اے ٹی آر کی قیمت پر مبنی منافع لینے کی پوزیشن مرتب کریں۔
مرحلہ 3، اہم خبروں کے نتیجے میں شدید اتار چڑھاؤ سے بچنے کے لئے صرف مخصوص وقت کی مدت میں تجارت کرنے کے لئے ٹائم فلٹر کا استعمال کریں۔
مرحلہ 4، ٹریلنگ اسٹاپ میکانزم۔ زیادہ منافع میں مقفل کرنے کے لئے تازہ ترین اے ٹی آر پوزیشن کی بنیاد پر اسٹاپ نقصان کو ایڈجسٹ کرتے رہیں۔
بولنگر بینڈ خود قیمت کے توازن کو ایک واحد چلتی اوسط سے زیادہ مؤثر طریقے سے ظاہر کرتا ہے۔
اے ٹی آر اسٹاپ نقصان کنٹرول ہر تجارت کے خطرے / منافع کا تناسب؛
ٹریلنگ اسٹاپ منافع میں مقفل کرنے کے لئے مارکیٹ کی اتار چڑھاؤ کی بنیاد پر خود بخود ایڈجسٹ ہوتا ہے۔
وسیع پیمانے پر حکمت عملی کے پیرامیٹرز اعلی حسب ضرورت کی اجازت دیتے ہیں.
جب مارکیٹ مستحکم ہوتی ہے تو کئی چھوٹے نقصانات ہو سکتے ہیں۔
بولنگر بینڈ کے کراس اوور کے ساتھ ناکام بریک آؤٹ الٹ؛
راتوں رات سیشنوں اور اہم خبروں کے واقعات سے وابستہ زیادہ خطرات۔
انسداد اقدامات:
یہ حکمت عملی رجحان توازن اور بریک آؤٹ سمتوں کا تعین کرنے کے لئے بولنگر بینڈ ، اے ٹی آر کو خطرہ / انعام تناسب کو کنٹرول کرنے کے لئے اسٹاپ نقصان اور منافع حاصل کرنے کا حساب لگانے کے لئے ، اور منافع میں مقفل کرنے کے لئے ٹریلنگ اسٹاپ کو جوڑتی ہے۔ اس کے فوائد اعلی حسب ضرورت ، قابل کنٹرول خطرات ، اور قلیل مدتی انٹرا ڈے ٹریڈنگ کے لئے موزوں ہیں۔ پیرامیٹر کی اصلاح اور مشین لرننگ کے ذریعے جیت کی شرح اور منافع میں مزید بہتری حاصل کی جاسکتی ہے۔
/*backtest start: 2023-12-26 00:00:00 end: 2024-01-02 00:00:00 period: 1m basePeriod: 1m 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/ // © sadeq_haddadi //@version=5 strategy('Bollinger Bands + ATR / trail- V2', overlay=true ) // Interactive Brokers rate) //date and time startDate = input(title="Start Date", defval=timestamp("01 Aug 2023 00:00 +0000"), tooltip="Date & time to begin analysis",group = 'Time Filter') endDate = input(title="End Date", defval=timestamp("1 Jan 2099 00:00 +0000"), tooltip="Date & time to stop analysis") timeSession = input(title="Time Session To Analyze", defval="0300-1700", tooltip="Time session to analyze") inSession(sess) => true // indicators length = input.int(20, minval=1,group = 'Bollinger Band') maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"]) src = input(close, title="Source") mult1 = input.float(2.0, minval=0.001, maxval=50, title="StdDev1") mult2 = input.float(3.0, minval=0.001, maxval=50, title="StdDev2") ma(source, length, _type) => switch _type "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) basis = ma(src, length, maType) dev1 = mult1 * ta.stdev(src, length) dev2 = mult2 * ta.stdev(src, length) upper1 = basis + dev1 lower1 = basis - dev1 upper2 = basis + dev2 lower2 = basis - dev2 offset = input.int(0, "Offset", minval = -500, maxval = 500) plot(basis, "Basis", color=#2962FF, offset = offset,linewidth=2) p1 = plot(upper1, "Upper", color=color.new(color.white,50), offset = offset,linewidth=2) p2 = plot(lower1, "Lower", color=color.new(color.white,50), offset = offset,linewidth=2) p3 = plot(upper2, "Upper", color=color.new(color.white,80), offset = offset,linewidth=1) p4 = plot(lower2, "Lower", color=color.new(color.white,80), offset = offset,linewidth=1) fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95)) fill(p3, p4, title = "Background", color=color.rgb(33, 150, 243, 95)) show_crosses = input(false, "Show Cross the Bands?") plotshape(show_crosses and ta.crossover(close, upper2) ? src : na, "S", style = shape.triangledown, location =location.abovebar, color = color.yellow, size = size.tiny) plotshape(show_crosses and ta.crossunder(low, lower2) ? src : na ,"L", style = shape.triangleup, location = location.belowbar, color = color.purple, size = size.tiny) second_entry = input(true, "Show second deviation entry point?") //atr length_ATR = input.int(title="Length", defval=5, minval=1,group = 'ATR') smoothing = input.string(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"]) m = input.float(1, "Multiplier") src1 = input(high) src2 = input(low) pline = input.bool(title = 'show ATR lines ?', defval=false) ma_function(source, length_ATR) => if smoothing == "RMA" ta.rma(source, length_ATR) else if smoothing == "SMA" ta.sma(source, length_ATR) else if smoothing == "EMA" ta.ema(source, length_ATR) else ta.wma(source, length_ATR) a = ma_function(ta.tr(true), length_ATR) * m x = ma_function(ta.tr(true), length_ATR) * m + src1 x2 = src2 - ma_function(ta.tr(true), length_ATR) * m PP1 = plot(pline ? x :na , title = "ATR Short Stop Loss", color= color.new(color.red,20) ) PP2 = plot(pline ? x2:na , title = "ATR Long Stop Loss", color=color.new(color.green,20) ) Tp_to_Sl = input.float(1.5, "TP/SL") candle_size = input.float(10, "candle/pip") distance_source = input.float(1.5, "distance to midline/pip") //strategy buyCondition = low[2] < lower1 and ta.crossover(close[1], lower1) and strategy.position_size == 0 and (close[1] - open[1]) < candle_size * 0.0001 and close > open and ( basis - close) > distance_source * 0.0001 sellCondition = high[2] > upper1 and ta.crossunder(close[1], upper1) and strategy.position_size == 0 and (open[1] - close[1]) < candle_size * 0.0001 and close < open and (close - basis) > distance_source * 0.0001 // buyCondition2 = low[2] < lower2 and ta.crossover(close[1], lower2) and (close[1] - open[1]) < candle_size * 0.0001 and close > open and ( basis - close) > distance_source * 0.0001 sellCondition2 = high[2] > upper2 and ta.crossunder(close[1], upper2) and (open[1] - close[1]) < candle_size * 0.0001 and close < open and (close - basis) > distance_source * 0.0001 plotshape(second_entry and sellCondition2 ? src : na, "S", style = shape.triangledown, location =location.abovebar, color = color.rgb(241, 153, 177), size = size.tiny) plotshape(second_entry and buyCondition2 ? src : na ,"L", style = shape.triangleup, location = location.belowbar, color = color.rgb(177, 230, 168), size = size.tiny) // since_buy =ta.barssince(buyCondition) since_sell =ta.barssince(sellCondition) entry_price = ta.valuewhen(buyCondition or sellCondition, src, 0) sl_long = ta.valuewhen(buyCondition, x2[1], 0) sl_short = ta.valuewhen(sellCondition, x[1], 0) buyprofit = entry_price + (Tp_to_Sl*( entry_price - sl_long)) sellprofit= entry_price + (Tp_to_Sl*( entry_price - sl_short)) //alert_massage = "new strategy position is {{strategy.position_size}}" //prof = ta.crossover(high,upper1) //buyexit=ta.valuewhen(prof,upper1,0) if buyCondition and inSession(timeSession) strategy.entry( id = "long", direction = strategy.long , alert_message='Open Long Position' ) if sellCondition and inSession(timeSession) strategy.entry(id= "short", direction = strategy.short, alert_message='Open Short Position') //trail-stop loss use_trailing = input.bool(title = 'use trailing stop loss?', defval=true) pricestop_long=0.00 pricestop_short=100000.00 if (strategy.position_size > 0) if use_trailing == false pricestop_long := sl_long else pricestop_long := math.max (x2, pricestop_long[1]) //trail - long if (strategy.position_size < 0) if use_trailing == false pricestop_short := sl_short else pricestop_short := math.min (x, pricestop_short[1]) // trail - short if strategy.position_size > 0 strategy.exit(id = 'close', limit = buyprofit , stop = pricestop_long ) if strategy.position_size < 0 strategy.exit(id = 'close', limit = sellprofit , stop = pricestop_short ) alertcondition(buyCondition or sellCondition, 'Enter_position')