بولنگر بینڈ پر مبنی دوہری حرکت پذیر اوسط میچنگ حکمت عملی ایک رجحان کی پیروی کرنے والی حکمت عملی ہے جو مارکیٹ میں قیمت اور حجم کے ساتھ چلتی ہے۔ یہ ایک مقداری حکمت عملی کو نافذ کرنے کے لئے تجارتی سگنل کے طور پر بولنگر بینڈ اور حرکت پذیر اوسط کے کراس اوور کا استعمال کرتی ہے جو خود بخود مارکیٹ کے رجحانات کی نشاندہی کرسکتی ہے اور اسٹاپ منافع اور اسٹاپ نقصان کے قواعد کے ساتھ تجارت کرسکتی ہے۔
یہ حکمت عملی بنیادی طور پر بولنگر بینڈز اشارے اور تجارت کے لئے چلتی اوسط اشارے کے کراس اوور سگنلز پر مبنی ہے۔ خاص طور پر ، یہ ایک ہی وقت میں 5 سے 200 دن تک کی لمبائی کے ساتھ درمیانی ریل ، بولنگر بینڈز کی اوپری ریل ، اور 7 چلتی اوسط استعمال کرتی ہے۔ جب قیمت نیچے سے اوپر تک بولنگر بینڈز کی درمیانی اور نچلی ریلوں سے ٹوٹ جاتی ہے تو یہ خرید کا اشارہ پیدا کرتی ہے۔ جب قیمت اوپر سے نیچے سے بولنگر بینڈز کی اوپری ریل سے ٹوٹ جاتی ہے تو یہ فروخت کا اشارہ پیدا کرتی ہے تاکہ رجحان کی پیروی کی جاسکے۔
اس کے علاوہ ، حکمت عملی میں لمبی اور مختصر پوزیشنوں کا فیصلہ کرنے کے لئے موٹ ٹو فراکٹ اشارے کا بھی تعارف کرایا گیا ہے۔ یہ اشارے مختصر مدت اور طویل مدتی حرکت پذیر اوسط کے ترتیب کے حساب سے موجودہ مارکیٹ کا رجحان اوپر یا نیچے ہے یا نہیں اس کا تعین کرتا ہے ، اس طرح رینج سے وابستہ مارکیٹوں میں غلط سگنل پیدا کرنے سے بچ جاتا ہے۔ آخر میں ، تشکیل شدہ اسٹاپ منافع اور اسٹاپ نقصان کے قواعد کے ساتھ مل کر ، یہ تجارتی حکمت عملی کے بعد ایک زیادہ مکمل رجحان تشکیل دیتا ہے۔
عام طور پر ، یہ ایک بہت ہی عملی رجحان کی پیروی کرنے والی حکمت عملی ہے۔ یہ فیصلہ سازی کے لئے اشارے کے کراس اوور کا استعمال کرتا ہے ، اور غلط سگنلز کو مؤثر طریقے سے فلٹر کرنے کے لئے ایک رجحان کا فیصلہ کرنے والا ماڈیول بھی شامل کرتا ہے۔ اسٹاپ منافع اور اسٹاپ نقصان کو ترتیب دینے کے بعد ، یہ تجارت کے لئے رجحانات کی مکمل پیروی کرسکتا ہے اور اچھی واپسی حاصل کرسکتا ہے۔ پیرامیٹر کے مجموعوں کو ایڈجسٹ کرکے اور مزید فلٹرز شامل کرکے ، اس حکمت عملی کو مزید بہتر بنایا جاسکتا ہے تاکہ زیادہ سے زیادہ مارکیٹ کے ماحول کو اپنایا جاسکے ، اور اس میں بہتری اور درخواست کے امکانات ہیں۔
/*backtest start: 2023-10-24 00:00:00 end: 2023-11-23 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/ // © HeWhoMustNotBeNamed //@version=4 strategy("BuyTheDip", overlay=true, initial_capital = 100000, 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) MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"]) exitType = input(title="Exit Strategy", defval="Signal", options=["Signal", "TrailingStop", "Both"]) LookbackPeriod = input(30, minval=10,step=10) BBStdDev = input(2, minval=1, maxval=10, step=0.5) BBLength = input(60, minval=5, step=5) atrLength = input(22) atrMult = input(6) 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) includePartiallyAligned = true 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 f_getTrailingStop(atr, atrMult)=> stop = close - atrMult*atr stop := strategy.position_size > 0 ? max(stop, stop[1]) : stop stop f_getMaAlignment(MAType, includePartiallyAligned)=> ma5 = f_getMovingAverage(close,MAType,5) ma10 = f_getMovingAverage(close,MAType,10) ma20 = f_getMovingAverage(close,MAType,20) ma30 = f_getMovingAverage(close,MAType,30) ma50 = f_getMovingAverage(close,MAType,50) ma100 = f_getMovingAverage(close,MAType,100) ma200 = f_getMovingAverage(close,MAType,200) upwardScore = 0 upwardScore := close > ma5? upwardScore+1:upwardScore upwardScore := ma5 > ma10? upwardScore+1:upwardScore upwardScore := ma10 > ma20? upwardScore+1:upwardScore upwardScore := ma20 > ma30? upwardScore+1:upwardScore upwardScore := ma30 > ma50? upwardScore+1:upwardScore upwardScore := ma50 > ma100? upwardScore+1:upwardScore upwardScore := ma100 > ma200? upwardScore+1:upwardScore upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200 downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200 upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 5? 0.5: upwardScore < 2?-0.5:upwardScore>3?0.25:-0.25) : 0 inDateRange = time >= timestamp(syminfo.timezone, year(timenow) - backtestYears, 01, 01, 0, 0) exitBySignal = exitType == "Signal" or exitType == "Both" exitByTrailingStop = exitType == "TrailingStop" or exitType == "Both" maAlignment = f_getMaAlignment(MAType,includePartiallyAligned) atr = atr(atrLength) trailingStop = f_getTrailingStop(atr, atrMult) maAligned = highest(maAlignment,LookbackPeriod) [middle, upper, lower] = bb(close, BBLength, BBStdDev) buyCondition = maAligned == 1 and (crossover(close, lower) or crossover(close, middle)) buyExitCondition = crossunder(close, upper) strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca_buy") strategy.close("Buy", when=buyExitCondition and exitBySignal) strategy.exit("ExitBuy", "Buy", stop = trailingStop, when=exitByTrailingStop )