بولنگر بینڈس ٹرینڈ اسٹریٹجی کے بعد

مصنف:چاؤ ژانگ، تاریخ: 2024-01-15 14:31:21
ٹیگز:

img

جائزہ

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

اصول

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

  1. درمیانی لائن: n دن کی چلتی اوسط
  2. اوپری لائن: n دن کا معیاری انحراف اوپر کی طرف
  3. نچلی لائن: n دن کا معیاری انحراف نیچے کی طرف

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

خاص طور پر، حکمت عملی کا منطق یہ ہے:

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

جھوٹے بریک آؤٹس سے بچنے کے لئے ، ایک چلتی اوسط فلٹر شامل کیا جاتا ہے۔ اندراج صرف اس وقت ہوتا ہے جب چلتی اوسط کو توڑنے کے ساتھ ساتھ بند بینڈ کو توڑ دیتا ہے۔

یہاں اشارے کے طور پر ایکسپونینشل موونگ میڈین استعمال کیا جاتا ہے۔

خلاصہ میں، رجحان کے وقفے کا تعین کرنے کے لئے معیار یہ ہیں:

  1. لمبا سگنل: بند توڑتا ہے بینڈ اوپری لائن && بند توڑتا ہے چلتی اوسط
  2. مختصر سگنل: بند توڑتا ہے بینڈ نچلی لائن && بند توڑتا ہے چلتی اوسط

داخل ہونے کے بعد، سٹاپ نقصان وسط لائن کو ٹریک کرتا ہے۔ جب قیمت دوبارہ وسط لائن کو چھوتی ہے تو باہر نکل جاتا ہے۔

طاقت کا تجزیہ

اس حکمت عملی کی اہم طاقتوں میں شامل ہیں:

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

خطرے کا تجزیہ

فوائد کے باوجود، اس حکمت عملی میں مندرجہ ذیل خطرات بھی شامل ہیں:

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

مندرجہ بالا خطرات کو کنٹرول کرنے کے لئے، مندرجہ ذیل اصلاحات کی جا سکتی ہیں:

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

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

خطرے کے تجزیے کی بنیاد پر، مندرجہ ذیل شعبوں میں مزید اصلاحات کی جا سکتی ہیں:

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

  2. سٹاپ نقصان کی اصلاح: بہترین سٹاپ میکانزم کا تعین کرنے کے لیے مختلف سٹاپ نقصان کی تکنیک جیسے اے ٹی آر اسٹاپ، ٹریلنگ اسٹاپ وغیرہ کا تجربہ کریں۔

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

  4. داخلے کے معیار کی اصلاح: غیر ضروری اندراجات سے بچنے کے لئے سختی سے اندراج کا وقت منتخب کرنے کے لئے رجحان کی حالت، غیر معمولی حجم وغیرہ جیسے دیگر غور شامل کریں.

  5. مشین لرننگ: ایل ایس ٹی ایم ، آر این این اور دیگر گہری سیکھنے کے ماڈلز کی تعمیر کے لئے مزید تاریخی ڈیٹا اکٹھا کریں ، تاکہ اے آئی سے چلنے والے بہترین اندراج اور باہر نکلنے کا وقت ممکن ہو۔

  6. متحرک رسک انعام مینجمنٹ: مقررہ تناسب رک جاتا ہے شامل کریں، منافع کی ہدف میں اضافہ بعض منافع کی سطح تک پہنچنے کے بعد وغیرہ متحرک طور پر خطرے کی ادائیگی کو کنٹرول کرنے کے لئے.

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

نتیجہ

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


/*backtest
start: 2023-12-15 00:00:00
end: 2024-01-14 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//VERSION =================================================================================================================
//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// This strategy is intended to study.
// It can also be used to signal a bot to open a deal by providing the Bot ID, email token and trading pair in the strategy settings screen.
// As currently written, this strategy uses a Bollinger Bands for trend folling, you can use a EMA as a filter.
//Autor Credsonb (M4TR1X_BR)

//▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
//STRATEGY ================================================================================================================

strategy(title = 'BT-Bollinger Bands - Trend Following',
         shorttitle = 'BBTF',
         overlay = true )


//▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
// CONFIG =================================================================================================================

// TIME INPUTS
usefromDate = input.bool(defval = true, title = 'Start date', inline = '0', group = "Time Filters")
initialDate = input(defval = timestamp('01 Jan 2022 00:00 UTC'), title = '', inline = "0",group = 'Time Filters',tooltip="This start date is in the time zone of the exchange ")
usetoDate = input.bool(defval = true, title = 'End date', inline = '1', group = "Time Filters")
finalDate = input(defval = timestamp('31 Dec 2029 23:59 UTC'), title = '', inline = "1",group = 'Time Filters',tooltip="This end date is in the time zone of the exchange")

// TIME LOGIC 
inTradeWindow = true

// ENABLE LONG SHORT OPTIONS
string entrygroup ='Long/Short Options ==================================='
checkboxLong = input.bool(defval=true, title="Enable Long Entrys",group=entrygroup)
checkboxShort = input.bool(defval=true, title="Enable Short Entrys",group=entrygroup)


// BOLLINGER BANDS INPUTS ==================================================================================================
string bbgroup ='Bollinger Bands ======================================'
bbLength = input.int(defval=20,title='BB Length', minval=1, step=5, group=bbgroup)
bbStddev = input.float(defval=2, title='BB StdDev', minval=0.5, group=bbgroup)

//BOLLINGER BANDS LOGIC
[bbMiddle, bbUpper, bbLower] = ta.bb(close, bbLength, bbStddev)


// MOVING AVERAGES INPUTS ================================================================================================
string magroup =  'Moving Average ======================================='
useEma = input.bool(defval = true, title = 'Moving Average Filter',inline='', group= magroup,tooltip='This will enable or disable Exponential Moving Average Filter on Strategy')
emaType=input.string (defval='Ema',title='Type',options=['Ema','Sma'],inline='', group= magroup)
emaSource = input.source(defval=close,title="  Source",inline="", group= magroup)
emaLength = input.int(defval=100,title="Length",minval=0,inline='', group= magroup)

// MOVING AVERAGE LOGIC
float ema = emaType=='Ema'? ta.ema(emaSource,emaLength): ta.sma(emaSource,emaLength)

// BOT MESSAGES
string msgroup='Alert Message For Bot ================================'
messageEntry = input.string("", title="Strategy Entry Message",group=msgroup)
messageExit  =input.string("",title="Strategy Exit Message",group=msgroup)
messageClose = input.string("", title="Strategy Close Message",group=msgroup)




// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
// POSITIONS =============================================================================================================

//VERIFY IF THE BUY FILTERS ARE ON OR OFF 
bool emaFilterBuy = useEma? (close > ema):(close >= ema) or (close <= ema)                      

//LONG / SHORT POSITIONS LOGIC
bool openLongPosition  = (close[1] < bbUpper) and (close > bbUpper)   and (emaFilterBuy)
bool openShortPosition = (close[1] > bbLower) and (close < bbLower) and (emaFilterBuy)
//bool closeLongPosition = (close > bbMiddle)
//bool closeShortPosition= (close < bbLower)


// CHEK OPEN POSITONS =====================================================================================================
// open signal when not already into a position
bool validOpenLongPosition = openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) <= 0
bool longIsActive = validOpenLongPosition or strategy.opentrades.size(strategy.opentrades - 1) > 0

bool validOpenShortPosition = openShortPosition and strategy.opentrades.size(strategy.opentrades - 1) <= 0
bool shortIsActive = validOpenShortPosition or strategy.opentrades.size(strategy.opentrades - 1) < 0

longEntryPoint = high
if (openLongPosition) and (inTradeWindow) and (checkboxLong)
    strategy.entry(id = 'Long Entry', direction = strategy.long, stop = longEntryPoint, alert_message=messageEntry)

if not (openLongPosition)
    strategy.cancel('Long Entry')

//submit exit orders for trailing take profit price 
if (longIsActive) and (inTradeWindow)
    strategy.exit(id = 'Long Exit',  stop=bbMiddle, alert_message=messageExit)

//if (closeLongPosition)
   // strategy.close(id = 'Long Entry', alert_message=messageClose)
      

shortEntryPoint = low 
if (openShortPosition) and (inTradeWindow) and (checkboxShort)
    strategy.entry(id = 'Short Entry', direction = strategy.short, stop = shortEntryPoint, alert_message=messageEntry)

if not(openShortPosition)
    strategy.cancel('Short Entry')

if (shortIsActive)
    strategy.exit(id = 'Short Exit',  stop = bbMiddle, alert_message=messageExit)

//if (closeShortPosition)
    //strategy.close(id = 'Short Close', alert_message=messageClose)

// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
// PLOTS ===============================================================================================================

// TRADE WINDOW ========================================================================================================
bgcolor(color = inTradeWindow ? color.new(#089981,90):na, title = 'Time Window')

// EMA/SMA 
var emafilterColor = color.new(color.white, 0)
plot(series=useEma? ema:na, title = 'EMA Filter', color = emafilterColor, linewidth = 2, style = plot.style_line)

// BOLLINGER BANDS
plot(series=bbUpper, title = "Upper Band", color = color.aqua)//, display = display.none)
plot(series=bbMiddle, title = "MA Band", color = color.red)//, display = display.none)
plot(series=bbLower, title = "Lower Band", color = color.aqua)//, display = display.none)

// PAINT BARS COLORS
bool bulls = (close[1] < bbUpper[1]) and (close > bbUpper)
bool bears = (close[1] > bbLower [1]) and (close < bbLower)
neutral_color = color.new(color.black, 100)
barcolors = bulls ? color.green : bears ? color.red : neutral_color
barcolor(barcolors)

// ======================================================================================================================


مزید