بولنگر بینڈز پرسنٹیج ٹریڈنگ کی حکمت عملی


تخلیق کی تاریخ: 2023-12-11 11:14:53 آخر میں ترمیم کریں: 2023-12-11 11:14:53
کاپی: 0 کلکس کی تعداد: 750
1
پر توجہ دیں
1621
پیروکار

بولنگر بینڈز پرسنٹیج ٹریڈنگ کی حکمت عملی

جائزہ

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

حکمت عملی کا اصول

  1. برین بینڈ چینل اور قیمتوں کے چینل میں متعلقہ مقام کا فیصد
  2. اوپن ، بند ، زیادہ سے زیادہ اور کم سے کم قیمتوں کے لئے اوسط اوسط
  3. اے ٹی آر اشارے کا حساب لگائیں اور اے ٹی آر کے ساتھ اسٹاپ لائن مقرر کریں
  4. قیمتوں کی نئی اونچائی یا نئی کم سے قریب ہونے کا تعین کرنا
  5. سالانہ کم سے کم قیمتوں کے ساتھ مل کر بڑے پیمانے پر قیمتوں کا تعین
  6. ٹریڈنگ سگنل کو بروئنگ بینڈ فی صد تبدیلیوں اور نئے اعلی اور کم کے ذریعہ فیصلہ کیا جائے

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

اسٹریٹجک فوائد

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

اسٹریٹجک خطرات اور حل

  1. برن بیلٹ ٹرانسمیشن پیرامیٹرز کو غلط طریقے سے ترتیب دینے سے بہت زیادہ جعلی ٹرانسمیشن ہوسکتی ہے، بہترین نتائج کے لئے مختلف پیرامیٹرز کے مجموعے کی جانچ پڑتال کی جانی چاہئے
  2. بندش کی قیمتوں میں بیس لائن کے طور پر ATR کے مقرر کردہ اسٹاپ نقصان کی حد سے زیادہ واپسی ہوسکتی ہے ، جس میں زیادہ طول و عرض کے ساتھ کم سے کم قیمتوں کا حساب لگانے کا فیصد سمجھا جاسکتا ہے
  3. سخت برین کی طرف سے فلٹرنگ ممکنہ طور پر لمبی لائنوں پر رجحانات کے مواقع سے محروم ہوسکتی ہے ، فلٹرنگ کے حالات اور پوزیشن کی مدت کو مناسب طریقے سے نرمی دی جائے
  4. اے ٹی آر اشارے بڑے پیمانے پر قیمتوں میں اتار چڑھاؤ کی پیروی کرنے میں سست ہیں ، اعلی تعدد کے اتار چڑھاؤ کے اشارے جیسے حقیقی طول و عرض وغیرہ پر غور کیا جانا چاہئے
  5. نئی اونچائی اور نئی نچلی سطح پر آنے والی تبدیلیوں کو قلیل مدتی شور کی وجہ سے متاثر کیا جاسکتا ہے ، جس کی اسٹیٹسٹیٹک نمایاں اور رجحان کی پائیداری کا اندازہ لگایا جانا چاہئے

حکمت عملی کی اصلاح کی سمت

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

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("Bollinger %B Candles Strategy", overlay=false, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

BBLength = input(100, minval=1, step=1)
StdDev = 10
useMovingAverage = input(true)
MAType = input(title="Moving Average Type", defval="rma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
lookbackPeriod = input(22, minval=10, step=10)
colorByPreviousClose = input(true)

AtrMAType = input(title="Moving Average Type", defval="hma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
AtrLength = input(10)
AtrMult = input(4)
wicks = input(false)

considerYearlyHighLow = input(false)
considerNewLongTermHighLows = input(false)
shortHighLowPeriod = 100
longHighLowPeriod = 200
tradeDirection = input(title="Trade Direction", defval=strategy.direction.all, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])

backtestYears = input(10, minval=1, step=1)


//////////////////////////////////// Calculate new high low condition //////////////////////////////////////////////////
f_calculateNewHighLows(shortHighLowPeriod, longHighLowPeriod, considerNewLongTermHighLows)=>
    newHigh = highest(shortHighLowPeriod) == highest(longHighLowPeriod) or not considerNewLongTermHighLows
    newLow = lowest(shortHighLowPeriod) == lowest(longHighLowPeriod) or not considerNewLongTermHighLows
    [newHigh,newLow]

//////////////////////////////////// Calculate Yearly High Low //////////////////////////////////////////////////
f_getYearlyHighLowCondition(considerYearlyHighLow)=>
    yhigh = security(syminfo.tickerid, '12M', high[1]) 
    ylow = security(syminfo.tickerid, '12M', low[1]) 
    yhighlast = yhigh[365]
    ylowlast = ylow[365]
    yhighllast = yhigh[2 * 365]
    ylowllast = ylow[2 * 365]
    
    yearlyTrendUp = na(yhigh)? true : na(yhighlast)? close > yhigh : na(yhighllast)? close > max(yhigh,yhighlast) : close > max(yhigh, min(yhighlast, yhighllast))
    yearlyHighCondition = (  (na(yhigh) or na(yhighlast) ? true : (yhigh > yhighlast) ) and ( na(yhigh) or na(yhighllast) ? true : (yhigh > yhighllast))) or yearlyTrendUp or not considerYearlyHighLow
    yearlyTrendDown = na(ylow)? true : na(ylowlast)? close < ylow : na(ylowllast)? close < min(ylow,ylowlast) : close < min(ylow, max(ylowlast, ylowllast))
    yearlyLowCondition = (  (na(ylow) or na(ylowlast) ? true : (ylow < ylowlast) ) and ( na(ylow) or na(ylowllast) ? true : (ylow < ylowllast))) or yearlyTrendDown or not considerYearlyHighLow
    
    label_x = time+(60*60*24*1000*1)
    [yearlyHighCondition,yearlyLowCondition]

f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma

inDateRange = true
[yearlyHighCondition,yearlyLowCondition] = f_getYearlyHighLowCondition(considerYearlyHighLow)
[newHighS,newLowS] = f_calculateNewHighLows(shortHighLowPeriod, longHighLowPeriod, considerNewLongTermHighLows)
[middleclose, upperclose, lowerclose] = bb(close, BBLength, StdDev)
[middleopen, upperopen, loweropen] = bb(open, BBLength, StdDev)
[middlehigh, upperhigh, lowerhigh] = bb(high, BBLength, StdDev)
[middlelow, upperlow, lowerlow] = bb(low, BBLength, StdDev)

percentBClose = (close - lowerclose)*100/(upperclose-lowerclose)
percentBOpen = (open - loweropen)*100/(upperopen-loweropen)
percentBHigh = (high - lowerhigh)*100/(upperhigh-lowerhigh)
percentBLow = (low - lowerlow)*100/(upperlow-lowerlow)

percentBMAClose = f_getMovingAverage(percentBClose, MAType, lookbackPeriod)
percentBMAOpen = f_getMovingAverage(percentBOpen, MAType, lookbackPeriod)
percentBMAHigh = f_getMovingAverage(percentBHigh, MAType, lookbackPeriod)
percentBMALow = f_getMovingAverage(percentBLow, MAType, lookbackPeriod)

newOpen = useMovingAverage? percentBMAOpen : percentBOpen
newClose = useMovingAverage? percentBMAClose : percentBClose
newHigh = useMovingAverage? percentBMAHigh : percentBHigh
newLow = useMovingAverage? percentBMALow : percentBLow

truerange = max(newHigh, newClose[1]) - min(newLow, newClose[1])

averagetruerange = f_getMovingAverage(truerange, AtrMAType, AtrLength)
atr = averagetruerange * AtrMult

longStop = newClose - atr
longStopPrev = nz(longStop[1], longStop)
longStop := (wicks ? newLow[1] : newClose[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = newClose + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := (wicks ? newHigh[1] : newClose[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and (wicks ? newHigh : newClose) > shortStopPrev ? 1 : dir == 1 and (wicks ? newLow : newClose) < longStopPrev ? -1 : dir

trailingStop = dir == 1? longStop : shortStop

candleColor = colorByPreviousClose ?
                 (newClose[1] < newClose ? color.green : newClose[1] > newClose ? color.red : color.silver) : 
                 (newOpen < newClose ? color.green : newOpen > newClose ? color.red : color.silver)
plotcandle(newOpen, newHigh, newLow, newClose, title='PercentBCandle', color = candleColor, wickcolor=candleColor)
plot(trailingStop, title="TrailingStop", style=plot.style_linebr, linewidth=1, color= dir == 1 ? color.green : color.red)

buyCondition = dir==1 and yearlyHighCondition and newHighS
exitBuyCondition = dir == -1
sellCondition = dir == -1 and yearlyLowCondition and newLowS
exitSellCondition = dir == 1
strategy.risk.allow_entry_in(tradeDirection)

barcolor(buyCondition? color.lime : sellCondition ? color.orange : color.silver)
strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca_buy")
strategy.close("Buy", when=exitBuyCondition)

strategy.entry("Sell", strategy.short, when=sellCondition and inDateRange, oca_name="oca_sell")
strategy.close("Sell", when=exitSellCondition)