وسائل لوڈ ہو رہے ہیں... لوڈنگ...

بولنگر بینڈ کی حد مارکیٹ بنانے والا حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-01-24 11:05:56
ٹیگز:

img

جائزہ

یہ ایک مارکیٹ بنانے والا حکمت عملی ہے جو بولنگر بینڈ کو اندراج کے طور پر ، اوسطاً بند ہونے کے طور پر چلتی ہے ، اور سادہ فیصد اسٹاپ نقصان کا استعمال کرتی ہے۔ جون 2022 میں ایکس بی ٹی یو ایس ڈی معاہدے پر یہ انتہائی منافع بخش تھا۔

حکمت عملی منطق

یہ حکمت عملی بولنگر بینڈ کے اوپری اور نچلے بینڈ کو پوزیشنوں میں داخل ہونے کے مواقع کے علاقوں کے طور پر استعمال کرتی ہے۔ خاص طور پر ، جب قیمت نچلی بینڈ سے نیچے ہوتی ہے تو ، یہ لمبی پوزیشنیں کھولنے کے لئے لمبی ہوگی۔ جب قیمت اوپری بینڈ سے اوپر ہوتی ہے تو ، یہ مختصر پوزیشنیں کھولنے کے لئے مختصر ہوجائے گی۔

اس کے علاوہ ، حکمت عملی پوزیشنوں کو بند کرنے کے لئے اوسط چلنے والے کو بھی بطور معیار استعمال کرتی ہے۔ جب لمبی پوزیشنیں رکھتے ہیں ، اگر قیمت چلتی اوسط سے زیادہ ہے تو ، وہ لمبی پوزیشنوں کو بند کرنے کا انتخاب کرے گا۔ اسی طرح ، جب مختصر پوزیشنیں رکھتے ہیں ، اگر قیمت چلتی اوسط سے کم ہے تو ، وہ بھی مختصر پوزیشنوں کو بند کرنے کا انتخاب کرے گا۔

اسٹاپ نقصان کے ل it ، یہ انٹری قیمت پر مبنی ایک سادہ فیصد ٹریلنگ اسٹاپ نقصان کا استعمال کرتا ہے۔ اس سے رجحان سازی کی منڈیوں میں بڑے نقصانات سے مؤثر طریقے سے بچا جاسکتا ہے۔

فوائد کا تجزیہ

اس حکمت عملی کے اہم فوائد یہ ہیں:

  1. بولنگر بینڈ کا استعمال مؤثر طریقے سے قیمت کی اتار چڑھاؤ کو پکڑ سکتا ہے اور اتار چڑھاؤ بڑھنے پر زیادہ تجارتی مواقع حاصل کرسکتا ہے۔
  2. مارکیٹ بنانے والے حکمت عملی دونوں اطراف کی تجارت کرکے بولی مانگ کے پھیلاؤ سے فائدہ اٹھا سکتے ہیں۔
  3. فی صد سٹاپ نقصان سے خطرات کو فعال طور پر کنٹرول کیا جاسکتا ہے اور رجحان سازی کی مارکیٹوں میں بڑے نقصانات سے بچا جاسکتا ہے۔

خطرے کا تجزیہ

اس حکمت عملی کے ساتھ کچھ خطرات بھی ہیں:

  1. بولنگر بینڈ ہمیشہ قابل اعتماد انٹری سگنل نہیں ہوتے اور بعض اوقات غلط سگنل دے سکتے ہیں۔
  2. مارکیٹ بنانے والے کی حکمت عملیاں مختلف مارکیٹوں میں شکست کا شکار ہوتی ہیں۔
  3. فیصد سٹاپ نقصان بہت زیادہ طاقت ہو سکتا ہے اور پیچیدہ مارکیٹ کے حالات کو اپنانے کے قابل نہیں ہو سکتا.

ان خطرات کو کم کرنے کے لئے، ہم دوسرے فلٹرز کو شامل کرنے، سٹاپ نقصان کی ترتیبات کو بہتر بنانے، یا پوزیشن سائز کو مناسب طریقے سے محدود کرنے پر غور کر سکتے ہیں.

اصلاح کی ہدایات

مزید اصلاحات کی گنجائش ہے:

  1. ہم زیادہ سے زیادہ پیرامیٹرز تلاش کرنے کے لئے مختلف پیرامیٹر مجموعے کی جانچ کر سکتے ہیں.
  2. ہم ملٹی فیکٹر تصدیق کے لیے مزید فلٹرز شامل کر سکتے ہیں۔
  3. ہم مشین لرننگ کے طریقوں کا استعمال پیرامیٹرز کو خود بخود بہتر بنانے کے لئے کر سکتے ہیں.
  4. ہم زیادہ نفیس سٹاپ نقصان کے طریقوں پر غور کر سکتے ہیں جیسے پیرابولک SAR.

نتیجہ

مجموعی طور پر یہ ایک بہت ہی منافع بخش ہائی فریکوئنسی مارکیٹ بنانے کی حکمت عملی ہے۔ یہ تجارتی سگنلز کے لئے بولنگر بینڈ پر سرمایہ لگاتا ہے اور خطرے کو کنٹرول کرتا ہے۔ لیکن ہمیں اس کی خامیوں سے بھی آگاہ ہونے کی ضرورت ہے اور براہ راست تجارت میں احتیاط سے تصدیق کرنے کی ضرورت ہے۔ مزید اصلاحات کے ساتھ ، اس حکمت عملی میں اس سے بھی زیادہ مستحکم اور بڑے پیمانے پر واپسی پیدا کرنے کی صلاحیت ہے۔


/*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()

مزید