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