अनुकूलनशील बोलिंगर ट्रेंड ट्रैकिंग रणनीति

लेखक:चाओझांग, दिनांक: 2023-11-16 16:35:01
टैगः

img

अवलोकन

यह रणनीति बोलिंगर बैंड्स संकेतक पर आधारित है, जो एक अनुकूलनशील चलती औसत के साथ संयुक्त है, ताकि ट्रेंड को सटीक रूप से न्याय और ट्रैक किया जा सके। गतिशील रूप से मापदंडों को समायोजित करके, रणनीति मजबूत स्थिरता और अनुकूलन क्षमता के साथ विभिन्न उत्पादों और बाजार वातावरण के अनुकूल हो सकती है।

रणनीति तर्क

इस रणनीति में निम्नलिखित मुख्य भाग शामिल हैंः

  1. अनुकूलनशील चलती औसत की गणना करें. एक निश्चित अवधि में चलती औसत के रूप में रैखिक प्रतिगमन वक्र की गणना करने के लिए रैखिक प्रतिगमन संकेतक का उपयोग करें.

  2. बोलिंगर बैंड की गणना करें. उपरी और निचले बैंड प्राप्त करने के लिए उपयोगकर्ता द्वारा निर्दिष्ट अनुपात2 पैरामीटर के साथ संयोजन में बैंड की गणना करने के लिए अनुकूलनशील एटीआर संकेतक का उपयोग करें.

  3. प्रवेश और निकास निर्धारित करें. बोलिंगर बैंड के माध्यम से मूल्य के टूटने के आधार पर प्रवृत्ति की दिशा और प्रवेश / निकास का न्याय करें। ऊपरी बैंड के संकेतों को तोड़ने से प्रवेश होता है जबकि निचले बैंड के संकेतों को तोड़ने से प्रवेश होता है।

  4. स्टॉप लॉस सेट करें और लाभ लें। जोखिमों को नियंत्रित करने के लिए फिक्स्ड पॉइंट स्टॉप लॉस का उपयोग करें और ट्रेंड मुनाफे को अधिकतम करने के लिए ट्रेलिंग स्टॉप लाभ का उपयोग करें।

  5. रणनीति अनुकूलन और सत्यापन के लिए बैकटेस्टिंग समय खिड़की के साथ संयोजन।

लाभ

  1. अनुकूलनशील मापदंड अनुकूलनशील चलती औसत और बैंड डिजाइन बाजार परिवर्तनों के अनुकूल है।

  2. स्पष्ट ब्रेकआउट संकेत बोलिंगर बैंड्स ब्रेकआउट स्पष्ट ट्रेंड रिवर्स संकेत प्रदान करते हैं।

  3. उचित स्टॉप सेट करना। फिक्स्ड स्टॉप लॉस जोखिमों को नियंत्रित करता है और ट्रेलिंग स्टॉप प्रॉफिट का उद्देश्य ट्रेंड मुनाफे को अधिकतम करना है।

  4. बैकटेस्टिंग विंडो रणनीति की प्रभावशीलता सत्यापित करता है।

  5. समझने और लागू करने में आसान है। तर्क स्पष्ट है और कोड आसानी से समझने के लिए संक्षिप्त है।

जोखिम

  1. बोलिंगर बैंड्स को पैरामीटर ट्यूनिंग की आवश्यकता होती है. बैंड की चौड़ाई और अवधि को विभिन्न उत्पादों के लिए अनुकूलन की आवश्यकता हो सकती है. अनुचित मापदंडों के कारण सिग्नल गायब या झूठे ट्रिगर होते हैं.

  2. सीमित बैकटेस्ट अवधि. हाल के बैकटेस्ट रेंज व्यापक ऐतिहासिक डेटा में स्थिरता को पूरी तरह से सत्यापित करने के लिए अपर्याप्त हो सकते हैं.

  3. ओवरफिटिंग का जोखिम वर्तमान अनुकूलित मापदंड हाल की विशिष्ट बाजार स्थितियों के अनुकूल हो सकते हैं।

  4. स्टॉप लॉस स्तर का मूल्यांकन करना आवश्यक है। छोटे स्टॉप लॉस बहुत संवेदनशील हो सकते हैं और छोटे उतार-चढ़ाव से बंद हो सकते हैं। उपयुक्त स्टॉप लॉस की जरूरतों का आकलन किया जाता है।

  5. मात्रात्मक सत्यापन की कमी वर्तमान में मात्रात्मक मेट्रिक्स सत्यापन के बिना व्यापार संकेतों के लिए केवल ग्राफिक ब्रेकआउट का उपयोग करें।

सुधार की दिशाएँ

  1. अधिक अनुकूली संकेतकों का परिचय दें। मजबूत रुझान ट्रैकिंग प्रणाली बनाने के लिए विभिन्न अनुकूली चलती औसत और चैनलों के संयोजनों का परीक्षण करें।

  2. पैरामीटर अनुकूलन. अनुकूलित पैरामीटर संयोजन खोजने के लिए आनुवंशिक एल्गोरिदम जैसे अधिक व्यवस्थित तरीकों का उपयोग करें.

  3. बैकटेस्ट अवधि का विस्तार करें. पैरामीटर स्थिरता की जांच करने के लिए व्यापक ऐतिहासिक डेटा पर परीक्षण करें. अधिक यथार्थवादी बैकटेस्ट के लिए लेनदेन लागत शामिल करें.

  4. मात्रात्मक फ़िल्टर पेश करें. झूठे ब्रेकआउट से बचने के लिए वॉल्यूम ब्रेकआउट, MACD हिस्टोग्राम गैप जैसे फ़िल्टर सेट करें.

  5. स्टॉप को अनुकूलित करें। इष्टतम स्टॉप खोजने के लिए विभिन्न फिक्स्ड स्टॉप लॉस स्तरों और ट्रेलिंग स्टॉप विधियों का मूल्यांकन करें।

  6. लाइव सत्यापन. आगे के सुधारों के लिए प्रदर्शन रिकॉर्ड करने के लिए अनुकूलित रणनीति लाइव चलाएं.

निष्कर्ष

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


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Linear Regression (Backtest / Trailing Stop)",overlay=true)
close_price = close[0]

len = input(40)
linear_reg = linreg(close_price, len, 0)

calculationToPlotAverageMeanLine=linear_reg
useUpperDeviation = input(true, "Upper Deviation", bool)
useLowerDeviation = input(true, "Lower Deviation", bool)
ratio2=input(defval=2,title=" Ratio 2")
avg=atr(len)
r2=avg*ratio2
top=linear_reg+r2
bott=linear_reg-r2

calculationToPlotUpperLine=top
calculationToPlotLowerLine=bott

plotUpperDeviationLine = plot(not useUpperDeviation ? na : calculationToPlotUpperLine, color=color(blue,0))
plotAverageMeanLine = plot(calculationToPlotAverageMeanLine, color=color(olive,0))
plotLowererDeviationLine = plot(not useLowerDeviation ? na : calculationToPlotLowerLine, color=color(red,0))
fill(plotUpperDeviationLine, plotAverageMeanLine, color=color(blue,85))
fill(plotLowererDeviationLine, plotAverageMeanLine, color=color(red,85))


//
length = input(title="linear Length",  defval=40, minval=1)
multiplier = input(title="linear Deviation", type=float, defval=2, minval=1)
overbought = input(title="Overbought",  defval=1, minval=1)
oversold = input(title="Oversold",  defval=0, minval=1)
custom_timeframe = input(title="Use another Timeframe?", type=bool, defval=false)
highTimeFrame = input(title="Select The Timeframe",  defval="60")
res1 = custom_timeframe ? highTimeFrame : timeframe.period

fixedSL = input(title="SL Activation", defval=70)
trailSL = input(title="SL Trigger", defval=10)
fixedTP = input(title="TP Activation", defval=50)
trailTP = input(title="TP Trigger", defval=10)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2015)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2015)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

smabasis = linreg(close_price, length, 0)
stdev = stdev(close, length)
cierre = request.security(syminfo.tickerid, res1, close, false)
alta = request.security(syminfo.tickerid, res1, high, false)
baja = request.security(syminfo.tickerid, res1, low, false)
basis1 = request.security(syminfo.tickerid, res1, smabasis, false)
stdevb = request.security(syminfo.tickerid, res1, stdev, false)
dev = multiplier * stdevb // stdev(cierre, length)
upper = basis1 + dev
lower = basis1 - dev

bbr = (cierre - lower)/(upper - lower)

// plot(bbr)

// // MARCA LAS RESISTENCIAS
pintarojo = 0.0
pintarojo := nz(pintarojo[1])
pintarojo := bbr[1] > overbought and bbr < overbought ? alta[1] :  nz(pintarojo[1])
p = plot(pintarojo, color = red, style=circles, linewidth=2)

// // MARCA LOS SOPORTES
pintaverde = 0.0
pintaverde := nz(pintaverde[1])
pintaverde := bbr[1] < oversold and bbr > oversold ? baja[1] :  nz(pintaverde[1])
g = plot(pintaverde, color = black, style=circles, linewidth=2)
zz= crossover(pintaverde,pintaverde[1]) or crossunder(pintaverde,pintaverde[1])
kp= crossover(pintarojo,pintarojo[1]) or crossunder(pintarojo,pintarojo[1]) 
plotshape(zz,  title="buy", style=shape.triangleup,location=location.belowbar, color=green, transp=0, size=size.small)
plotshape(kp, title="sell", style=shape.triangledown,location=location.abovebar, color=red, transp=0, size=size.small)


strategy.entry("BUY", strategy.long, qty=10, oca_name="BUY",  when=zz and window())
strategy.exit("B.Exit", "BUY", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)

strategy.entry("SELL", strategy.short, qty=10, oca_name="SELL",  when=kp and window())
strategy.exit("S.Exit", "SELL", qty_percent = 100, loss=fixedSL, trail_offset=trailSL, trail_points=fixedTP)


अधिक