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

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

مصنف:چاؤ ژانگ، تاریخ: 2023-10-31 15:54:41
ٹیگز:

img

جائزہ

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

اصول

حکمت عملی میں مندرجہ ذیل اہم حصے شامل ہیں:

  1. بولنگر بینڈ کی ترتیبات: لمبائی 40 کے ساتھ بڑے بینڈ، لمبائی 20 کے ساتھ چھوٹے بینڈ، بینڈ کی چوڑائی 2 معیاری انحراف ہے.

  2. بینڈ دھماکے کا فیصلہ: اگر بڑا بینڈ اوپری چھوٹے بینڈ اوپری سے نیچے ہے ، اور بڑا بینڈ نچلا چھوٹے بینڈ نچلے سے اوپر ہے ، تو اس سے بڑھتی ہوئی اتار چڑھاؤ کی نشاندہی ہوتی ہے اور رجحان کی سمت کے نئے سگنل پیدا ہوتے ہیں۔

  3. رفتار اشارے: 240 ٹائم فریم 14 ای ایم اے رجحان کی سمت کا اندازہ کرتا ہے۔

  4. اے ٹی آر سٹاپ نقصان اور منافع لیں: اسٹاپ نقصان کے فاصلے کے لئے اے ٹی آر 14 گنا ہے ، منافع لیں اسٹاپ نقصان کے فاصلے کا 1.5 گنا ہے۔

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

فوائد

  1. ڈبل بولنگر بینڈ کا استعمال کرتے ہوئے ٹرینڈ بریک پوائنٹس کا تعین کرنے کے لئے ٹائم فریموں میں اتار چڑھاؤ کا موازنہ کیا جاسکتا ہے۔

  2. رفتار کے اشارے کا استعمال کرتے ہوئے مارکیٹوں کی حد سے باہر نکلنے سے بچتا ہے.

  3. اے ٹی آر اسٹاپس مارکیٹ کی اتار چڑھاؤ کی بنیاد پر اسٹاپ فاصلے کو ایڈجسٹ کرتا ہے۔

  4. معقول خطرہ انعام تناسب، نہ تو بہت جارحانہ اور نہ ہی زیادہ محتاط۔

خطرات

  1. واضح رجحانات کے بغیر مارکیٹوں میں پھنس سکتے ہیں۔ غلط سگنل کو کم کرنے کے لئے رفتار کے پیرامیٹرز کو بہتر بنا سکتے ہیں۔

  2. اے ٹی آر اسٹاپ بہت محتاط ہوسکتے ہیں۔ دیگر اسٹاپ طریقوں پر غور کریں جیسے ٹیلنگ اسٹاپ۔

  3. مقررہ اے ٹی آر ضربات تمام مصنوعات کے لئے موزوں نہیں ہوسکتے ہیں۔ اسے ایڈجسٹ کرنے پر غور کریں۔

  4. دوہری بولنگر کی افادیت ثابت نہیں ہوئی۔ دیگر چینلز جیسے کے ڈی کی جانچ کریں۔

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

  1. بہترین مجموعے تلاش کرنے کے لئے مختلف رفتار پیرامیٹرز کی جانچ کریں.

  2. مختلف روک تھام کے طریقوں کی کوشش کریں جیسے پیچھے رکنے، موافقت پذیر اے ٹی آر.

  3. اے ٹی آر کے ضارب کو مصنوعات اور مارکیٹ کے حالات کی بنیاد پر ایڈجسٹ کرنے کے قابل بنائیں۔

  4. زیادہ استحکام کے لئے مختلف چینل اشارے کی جانچ کریں.

  5. منافع کو بہتر کنٹرول کرنے کے لئے مرکب انتظام شامل کرنے پر غور کریں.

  6. جیت کی شرح کو بہتر بنانے کے لئے سوئنگ، وقت وغیرہ کی طرف سے داخلہ سگنل فلٹر.

نتیجہ

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


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1h
basePeriod: 15m
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/
// © kasaism
//@version=4
// strategy(title="[EURUSD60] BB Expansion Strategy", shorttitle="[EURUSD60] BBEXP",overlay=true, max_bars_back=5000, max_labels_count=500)

// === INPUTS === //
////BB
largeBbRes = input(title="Large BB Resolution", type=input.resolution, defval="", group="BB")
largeBbLength = input(title="Large BB Length", type=input.integer, defval=40, minval=1, group="BB")
smallBbRes = input(title="Small BB Resolution ", type=input.resolution, defval="", group="BB")
smallBbLength = input(title="Small BB Length", type=input.integer, defval=20, minval=1, group="BB")
multi = input(title="BB StdDev", type=input.float, defval=2.0, maxval=10, minval=0.01, group="BB")
validLen = input(title="BB expand valid length", defval=14, group="BB")

// 3 each EMA settings. EMA directions are as each time frame directions. 
resFirstTime = input(title="EMA Trend t/f", type=input.resolution, defval="240", group="SMT")
// resSecondTime = input(title="Second t/f", type=input.resolution, defval="30", group="SMT") 
// resThirdTime = input(title="Third t/f", type=input.resolution, defval="", group="SMT")
emaLen = input(14, minval=1, title="Length", group="SMT") 
smooth = input(3, minval=1, title="Smooth factor", group="SMT")

//Lisk Management
var riskManagementRule1 = "ATR"
var riskManagementRule2 = "Bracket"
riskManagementRule = input(riskManagementRule1, "Detect Risk Management Based On", options=[riskManagementRule1, riskManagementRule2, "No detection"], group="Trade")
atrMulti = input(3.0, title="ATR Multiple", type=input.float, minval = 1.0, group="ATR")
riskRewardRatio = input(1.5, title="Risk Reward Ratio for ATR", type=input.float, minval = 0.01, group="ATR")
stopLossPoint = input(100, title="Stop Loss Point for Braket(tick)", type=input.float, minval = 1.0, group="Bracket")
takeProfitPoint = input(200, title="Take Profit Point for Braket(tick)", type=input.float, minval = 1.0, group="Bracket")
// === /INPUTS/ === //

// === CONSTANT === //
//For barmerge.lookahead_off
index = barstate.isrealtime ? 1 : 0

//For Entry
NOENTRY=0
LONG=1
SHORT=2

//SMT color
int up=1
int dn=2
int up_HL=3
int dn_HL=4

//label color
color_bearish = color.red
color_bullish = color.blue
C_label_color_bearish = color.red
C_label_color_bullish = color.blue
// === /CONSTANT/ === //


// === FUNCTIONS === //
//BB trade direction
bbTradeDetection(lrgUpper, lrgLower, smlUpper, smlLower) =>
    if not(na(lrgUpper) or na(lrgLower) or na(smlUpper) or na(smlLower))
        if lrgUpper < smlUpper and lrgLower > smlLower
            true
        else
            false
    else
        na
// === /FUNCTIONS/ === //


// === CALCURATES === //
////BB
//large BB
lrgBbBasis = security(syminfo.tickerid, largeBbRes, sma(close[index], largeBbLength))
lrgBbDev = multi * security(syminfo.tickerid, largeBbRes, stdev(close[index], largeBbLength))
lrgBbUpper = lrgBbBasis + lrgBbDev
lrgBbLower = lrgBbBasis - lrgBbDev

//small BB
smlBbBasis = security(syminfo.tickerid, smallBbRes, sma(close[index], smallBbLength))
smlBbDev = multi * security(syminfo.tickerid, smallBbRes, stdev(close[index], smallBbLength))
smlBbUpper = smlBbBasis + smlBbDev
smlBbLower = smlBbBasis - smlBbDev

bbTrade = bbTradeDetection(lrgBbUpper, lrgBbLower, smlBbUpper, smlBbLower)

//EMA Trend
base=security(syminfo.tickerid, resFirstTime, ema(close[index],emaLen))
sig=security(syminfo.tickerid, resFirstTime, ema(base[index],smooth))
emaTrend = not(na(base) or na(sig)) ? base < sig ? dn : up : na

////LISK MANAGEMENT
float stopLossLineForLong = na
float stopLossLineForShort = na
float takeProfitLineForLong = na
float takeProfitLineForShort = na
atr_ = atr(14) * atrMulti

if riskManagementRule == riskManagementRule1
    stopLossLineForLong := strategy.position_size > 0 ? stopLossLineForLong[1] ? stopLossLineForLong[1] : round(close[index] - atr_,3) : na
    stopLossLineForShort := strategy.position_size < 0 ? stopLossLineForShort[1] ? stopLossLineForShort[1] : round(close[index] + atr_,3) : na
    takeProfitLineForLong := strategy.position_size > 0 ? takeProfitLineForLong[1] ? takeProfitLineForLong[1] : close[index] + atr_*riskRewardRatio : na
    takeProfitLineForShort := strategy.position_size < 0 ? takeProfitLineForShort[1] ? takeProfitLineForShort[1] :close[index] - atr_*riskRewardRatio : na

if riskManagementRule == riskManagementRule2
    stopLossLineForLong := strategy.position_size > 0 ? stopLossLineForLong[1] ? stopLossLineForLong[1] : close[index] - stopLossPoint * syminfo.mintick : na
    stopLossLineForShort := strategy.position_size < 0 ? stopLossLineForShort[1] ? stopLossLineForShort[1] : close[index] + stopLossPoint * syminfo.mintick : na
    takeProfitLineForLong := strategy.position_size > 0 ? takeProfitLineForLong[1] ? takeProfitLineForLong[1] : close[index] +takeProfitPoint * syminfo.mintick : na
    takeProfitLineForShort := strategy.position_size < 0 ? takeProfitLineForShort[1] ? takeProfitLineForShort[1] :close[index] - takeProfitPoint * syminfo.mintick : na
// === /CALCURATES/ === //


// === CONDITIONS === //
//BB
bool isBbEntry = na
for i=0 to validLen
    isBbEntry := bbTrade==true ? true : bbTrade[i]==true ? true : false
//plotshape(isBbEntry, style=shape.circle, location=location.bottom)

isBbLong = isBbEntry and open[index] < smlBbBasis[index] and close[index] > smlBbBasis[index]
isBbShort = isBbEntry and open[index] > smlBbBasis[index] and close[index] < smlBbBasis[index]  

//SMT
isEmaLong = emaTrend == up 
isEmaShort = emaTrend == dn

//ATR
isAtrLongStop = low[index] <= stopLossLineForLong
isAtrShortStop = high[index] >= stopLossLineForShort
isAtrLongLimit = high[index] >= takeProfitLineForLong
isAtrShortLimit = low[index] <= takeProfitLineForShort
// === /CONDITIONS/ === //


// === TRADE === //
//ENTRY
if (isBbLong and isEmaLong)
    strategy.entry("LongEntry", strategy.long,  comment="LongEntry")
    if riskManagementRule == riskManagementRule2
        strategy.exit("LongEntry", loss=stopLossPoint, profit=takeProfitPoint, comment="bracket")
if (isBbShort and isEmaShort)
    strategy.entry("ShortEntry", strategy.short,  comment="ShortEntry")
    if riskManagementRule == riskManagementRule2	        
        strategy.exit("ShortEntry", loss=stopLossPoint, profit=takeProfitPoint, comment="bracket")
//EXIT
if riskManagementRule == riskManagementRule1
    if(isAtrLongStop)
        strategy.close("LongEntry", when=isAtrLongStop, comment="ATR Stop")
    if(isAtrShortStop)
        strategy.close("ShortEntry", when=isAtrShortStop, comment="ATR Stop")
    if(isAtrLongLimit)
        strategy.close("LongEntry", when=isAtrLongLimit, comment="ATR Limit")
    if(isAtrShortLimit)
        strategy.close("ShortEntry", when=isAtrShortLimit, comment="ATR Limit")
//  === /TRADE/ === //


// === PLOTS === //
plot(lrgBbBasis, title="Large BB Basis", linewidth=2, color=color.gray)
plot(lrgBbUpper, title="Large BB Upper", linewidth=2, color=color.gray)
plot(lrgBbLower, title="Large BB Lower", linewidth=2, color=color.gray)
plot(smlBbBasis, title="Small BB Basis", color=color.white)
plot(smlBbUpper, title="Small BB Upper", color=color.white)
plot(smlBbLower, title="Small BB Lower", color=color.white)
plot(base, title="EMA Line", color= emaTrend==dn ? color_bearish : emaTrend==up ? color_bullish : color.gray)

plot(stopLossLineForLong ? stopLossLineForLong : na, title="S/L Line For Long", color=color.yellow, style=plot.style_circles)
plot(stopLossLineForShort ? stopLossLineForShort : na, title="S/L Line For Short", color=color.yellow, style=plot.style_circles)
plot(takeProfitLineForLong ? takeProfitLineForLong : na, title="T/P Line For Long", color=color.purple, style=plot.style_circles)
plot(takeProfitLineForShort ? takeProfitLineForShort : na, title="T/P Line For Short", color=color.purple, style=plot.style_circles)
// /=== PLOTS ===/ //

مزید