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

بولنگر بینڈ پر مبنی دوہری حرکت پذیر اوسط میچنگ حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-11-24 15:32:57
ٹیگز:

img

جائزہ

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

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

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

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

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

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

خطرے کا تجزیہ

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

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

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

نتیجہ

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


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




مزید