یہ ایک مارکیٹ بنانے والا حکمت عملی ہے جو بولنگر بینڈ کو اندراج کے طور پر ، اوسطاً بند ہونے کے طور پر چلتی ہے ، اور سادہ فیصد اسٹاپ نقصان کا استعمال کرتی ہے۔ جون 2022 میں ایکس بی ٹی یو ایس ڈی معاہدے پر یہ انتہائی منافع بخش تھا۔
یہ حکمت عملی بولنگر بینڈ کے اوپری اور نچلے بینڈ کو پوزیشنوں میں داخل ہونے کے مواقع کے علاقوں کے طور پر استعمال کرتی ہے۔ خاص طور پر ، جب قیمت نچلی بینڈ سے نیچے ہوتی ہے تو ، یہ لمبی پوزیشنیں کھولنے کے لئے لمبی ہوگی۔ جب قیمت اوپری بینڈ سے اوپر ہوتی ہے تو ، یہ مختصر پوزیشنیں کھولنے کے لئے مختصر ہوجائے گی۔
اس کے علاوہ ، حکمت عملی پوزیشنوں کو بند کرنے کے لئے اوسط چلنے والے کو بھی بطور معیار استعمال کرتی ہے۔ جب لمبی پوزیشنیں رکھتے ہیں ، اگر قیمت چلتی اوسط سے زیادہ ہے تو ، وہ لمبی پوزیشنوں کو بند کرنے کا انتخاب کرے گا۔ اسی طرح ، جب مختصر پوزیشنیں رکھتے ہیں ، اگر قیمت چلتی اوسط سے کم ہے تو ، وہ بھی مختصر پوزیشنوں کو بند کرنے کا انتخاب کرے گا۔
اسٹاپ نقصان کے ل it ، یہ انٹری قیمت پر مبنی ایک سادہ فیصد ٹریلنگ اسٹاپ نقصان کا استعمال کرتا ہے۔ اس سے رجحان سازی کی منڈیوں میں بڑے نقصانات سے مؤثر طریقے سے بچا جاسکتا ہے۔
اس حکمت عملی کے اہم فوائد یہ ہیں:
اس حکمت عملی کے ساتھ کچھ خطرات بھی ہیں:
ان خطرات کو کم کرنے کے لئے، ہم دوسرے فلٹرز کو شامل کرنے، سٹاپ نقصان کی ترتیبات کو بہتر بنانے، یا پوزیشن سائز کو مناسب طریقے سے محدود کرنے پر غور کر سکتے ہیں.
مزید اصلاحات کی گنجائش ہے:
مجموعی طور پر یہ ایک بہت ہی منافع بخش ہائی فریکوئنسی مارکیٹ بنانے کی حکمت عملی ہے۔ یہ تجارتی سگنلز کے لئے بولنگر بینڈ پر سرمایہ لگاتا ہے اور خطرے کو کنٹرول کرتا ہے۔ لیکن ہمیں اس کی خامیوں سے بھی آگاہ ہونے کی ضرورت ہے اور براہ راست تجارت میں احتیاط سے تصدیق کرنے کی ضرورت ہے۔ مزید اصلاحات کے ساتھ ، اس حکمت عملی میں اس سے بھی زیادہ مستحکم اور بڑے پیمانے پر واپسی پیدا کرنے کی صلاحیت ہے۔
/*backtest start: 2023-12-24 00:00:00 end: 2024-01-23 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(shorttitle="BBL", title="BB limit", overlay = true) length = input(200, minval=1) src = input(hlc3, title="Source") xmult = input(44, minval=0.001, maxval=5000, title = "bb mult (0.1%)") s = input(title="Trend source", defval = "sma", options = ["ema", "sma", "rma", "wma"]) basis = s == "ema" ? ema(src, length) : s == "sma" ? sma(src, length) : s =="rma" ? rma(src, length) : wma(src, length) sd = input(title="Dev source", defval = "stdev", options = ["stdev", "dev"]) mult = xmult / 10 dev = sd == "stdev" ? mult * stdev(src, length) : mult * dev(src, length) diff = input(0.5, title = "Spread") LongPrice(p) => LongPrice = diff == 0 ? p : floor(p / diff) * diff ShortPrice(p) => ShortPrice = diff == 0 ? p : ceil(p / diff) * diff pyr = input(1, title = "Pyramiding") useStopLoss = input(true) stoploss_xmult = input(15, minval=0.001, maxval=5000, title = "StopLoss 0.1%") stopLoss_mult = sd == "simple" ? 1 + stoploss_xmult / 10 / 100 : stoploss_xmult / 10 dev2 = sd == "stdev" ? stopLoss_mult * stdev(src, length) : sd == "dev" ? stopLoss_mult * dev(src, length) : (stopLoss_mult - 1) * basis upper = basis + (1*dev) lower = basis - (1*dev) plot(basis, color=fuchsia, linewidth=2) plot(upper, color=green, linewidth=2) plot(lower, color=green, linewidth=2) strategy.cancel_all() if strategy.position_size > 0 and close <= basis + diff * 2 strategy.order("Close long", strategy.short, strategy.position_size, limit = ShortPrice(basis)) else if strategy.position_size < 0 and close >= basis - diff * 2 strategy.order("Close short", strategy.long, -strategy.position_size, limit = LongPrice(basis)) stopLossPrice1 = na stopLossPrice2 = na add = na openOrderCondition = close > lower - 2 * diff and (strategy.opentrades < pyr or (strategy.position_size < 0 and strategy.position_avg_price > lower * (1 + stopLoss_mult / 100))) if openOrderCondition add := strategy.position_size > 0 ? -strategy.position_size : close >= basis - diff * 2 ? 0 : -strategy.position_size strategy.order("Open long", strategy.long, strategy.equity / pyr / lower + add, limit = LongPrice(lower)) if useStopLoss and (strategy.position_size > 0 or openOrderCondition) add = openOrderCondition ? strategy.equity / pyr / lower : 0 posPrice = strategy.position_size <= 0 ? lower : strategy.position_avg_price posSize = strategy.position_size <= 0 ? 0 : strategy.position_size stopLossPrice1 := posPrice * (1 - stopLoss_mult / 100) strategy.order("StopLoss open short ", strategy.short, posSize + add + strategy.equity / pyr / stopLossPrice1, stop = ShortPrice(stopLossPrice1)) openOrderCondition := close < upper + 2 * diff and (strategy.opentrades < pyr or (strategy.position_size > 0 and strategy.position_avg_price * (1 + stopLoss_mult / 100) < upper)) if openOrderCondition add := strategy.position_size < 0 ? strategy.position_size : close <= basis + diff * 2 ? 0 : strategy.position_size strategy.order("Open short", strategy.short, strategy.equity / pyr / upper + add, limit = ShortPrice(upper)) if useStopLoss and (strategy.position_size < 0 or openOrderCondition) add = openOrderCondition ? strategy.equity / pyr / upper : 0 posPrice = strategy.position_size >= 0 ? upper : strategy.position_avg_price posSize = strategy.position_size >= 0 ? 0 : -strategy.position_size stopLossPrice2 := posPrice * (1 + stopLoss_mult / 100) strategy.order("StopLoss open long", strategy.long, posSize + add + strategy.equity / pyr / stopLossPrice2, stop = LongPrice(stopLossPrice2)) plot(not useStopLoss ? na : stopLossPrice1, color=red, linewidth=2) plot(not useStopLoss ? na : stopLossPrice2, color=red, linewidth=2) // === Backtesting Dates === testPeriodSwitch = input(false, "Custom Backtesting Dates") testStartYear = input(2018, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testStartHour = input(0, "Backtest Start Hour") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0) testStopYear = input(2018, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(14, "Backtest Stop Day") testStopHour = input(14, "Backtest Stop Hour") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false isPeriod = testPeriodSwitch == true ? testPeriod() : true // === /END if not isPeriod strategy.cancel_all() strategy.close_all()