बोलिंगर बैंड्स ट्रेंड फॉलोिंग स्ट्रेटेजी

लेखक:चाओझांग, दिनांकः 2024-01-15 14:31:21
टैगः

img

अवलोकन

इस रणनीति को बोलिंगर बैंड्स ट्रेंड फॉलोइंग रणनीति कहा जाता है। यह मूल्य रुझानों को निर्धारित करने के लिए बोलिंगर बैंड्स संकेतक का उपयोग करता है और जब कीमत बोलिंगर बैंड्स चैनल से बाहर निकलती है तो लंबा या छोटा प्रवेश करता है। इसमें ब्रेकआउट पर प्रवृत्ति की दिशा का न्याय करने के लिए एक चलती औसत फ़िल्टर शामिल होता है, इस प्रकार लंबी और छोटी प्रविष्टियों के बीच निर्णय लेता है।

सिद्धांत

रणनीति मुख्य रूप से मूल्य प्रवृत्ति और प्रवेश बिंदुओं को निर्धारित करने के लिए बोलिंगर बैंड्स संकेतक पर निर्भर करती है। बोलिंगर बैंड्स में तीन पंक्तियाँ होती हैंः

  1. मध्य रेखा: n-दिवसीय चलती औसत
  2. ऊपरी पंक्ति: n-दिवसीय मानक विचलन ऊपर की ओर
  3. निचली रेखा: n-दिवसीय मानक विचलन नीचे की ओर

जब कीमत निचली रेखा से ऊपर की ओर ऊपर की ओर टूटती है, तो ऊपरी रेखा के माध्यम से, एक तेजी की प्रवृत्ति की पहचान की जाती है। जब कीमत ऊपरी रेखा से नीचे की ओर नीचे की ओर टूटती है, तो एक मंदी की प्रवृत्ति शुरू हो गई है। रणनीति इन दो प्रकार के ब्रेकआउट की घटना पर लंबी या छोटी होती है।

विशेष रूप से, रणनीति तर्क हैः

  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)

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


अधिक