
یہ حکمت عملی ایک مختصر دورانیے کے بریک سسٹم کو لاگو کرنے کے لئے بلین بینڈ اشارے پر مبنی ہے ، جو چلتی اوسط اور اے ٹی آر تکنیکی اشارے کے ساتھ مل کر ہے۔ حکمت عملی بلین بینڈ چینل کے اندر قیمتوں کے متعلقہ پوزیشن فیصد کا حساب کتاب کرکے قیمتوں میں اوور بیئر اوور سیل کی تشخیص کرتی ہے ، جس میں نئے اعلی اور نچلے مقامات کے ساتھ تجارت کا اشارہ پیدا ہوتا ہے۔
اس حکمت عملی کا استعمال کرتے ہوئے بورن کی پٹی کے راستے کی مارکیٹ میں اتار چڑھاؤ کا تعین کرنے کے لئے ، بورن کی پٹی کے راستے کی چوڑائی معیاری فرق کے ذریعہ طے کی جاتی ہے۔ جب قیمت بورن کی پٹی سے نیچے کی طرف ٹوٹ جاتی ہے تو خریدنے کا مقام ہوتا ہے ، اور جب قیمت بورن کی پٹی سے اوپر کی طرف ٹوٹ جاتی ہے تو بیچنے کا مقام ہوتا ہے۔ متحرک اوسط بورن کی پٹی میں اتار چڑھاؤ کو ہموار کرتا ہے ، جعلی توڑ کو کم کرتا ہے۔ اے ٹی آر اشارے کو متحرک اسٹاپ لائن کے ساتھ جوڑا جاتا ہے ، اور اس کی روک تھام کی حد طے کی جاتی ہے۔ نئے اعلی اور کم فیصلے سے سالانہ خاتمے کو روکنے سے بچا جاسکتا ہے۔ اعلی اور کم فیصلے سے بڑے پیمانے پر کراس ترتیب کو خارج کردیا جاتا ہے۔ مجموعی طور پر ، اس حکمت عملی میں مارکیٹ کی رفتار اور مواقع کا تعین کرنے کے لئے متعدد تکنیکی تجزیہ ٹولز کا استعمال کیا جاتا ہے۔
اس حکمت عملی میں متعدد تکنیکی ٹولز کا استعمال کیا گیا ہے ، بشمول برن بینڈ فی صد ، متحرک اوسط ، اے ٹی آر اشارے ، نئی اونچائی ، نئی کم اور سالانہ اونچائی۔ مختصر مدت میں ایک نسبتا 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)