बोलिंगर बैंड प्रतिशत ट्रेडिंग रणनीति


निर्माण तिथि: 2023-12-11 11:14:53 अंत में संशोधित करें: 2023-12-11 11:14:53
कॉपी: 0 क्लिक्स: 750
1
ध्यान केंद्रित करना
1621
समर्थक

बोलिंगर बैंड प्रतिशत ट्रेडिंग रणनीति

अवलोकन

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

रणनीति सिद्धांत

  1. ब्रिन बैंड चैनल और चैनल के भीतर कीमतों के सापेक्ष स्थान का प्रतिशत
  2. एक चलती औसत को खोलने, बंद करने, उच्चतम और निम्नतम कीमतों के लिए गणना की जाती है
  3. एटीआर सूचकांक की गणना करें और एटीआर के साथ स्टॉप-लॉस लाइन सेट करें
  4. यह निर्धारित करने के लिए कि क्या कीमत एक नई ऊंचाई या एक नई निचली सीमा के पास है
  5. वार्षिक उच्चतम न्यूनतम मूल्य के साथ बड़े स्तर की स्थिति का आकलन करें
  6. ब्रिन बैंड प्रतिशत परिवर्तन और नए उच्च और नए निम्न के माध्यम से व्यापार संकेतों को निर्धारित करना

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

रणनीतिक लाभ

  1. सख्त ब्रिन बेल्ट गेटवे ब्रेकआउट निर्णय, झूठे संकेतों को कम करता है
  2. मूविंग एवरेज को सपाट करें और वास्तविक रुझानों को पहचानें
  3. एटीआर सूचकांक गतिशील ट्रैक स्टॉप लॉस, एकल नुकसान को सीमित करता है
  4. नई ऊंचाई, नई ऊंचाई और वार्षिक ऊंचाई और ऊंचाई का निर्धारण, संकेतों को अधिक विश्वसनीय बनाता है
  5. रणनीतिक दक्षता में सुधार के लिए कई तकनीकी संकेतकों का प्रभावी संयोजन

रणनीतिक जोखिम और समाधान

  1. गलत तरीके से सेट किए गए ब्रिन बेल्ट गेटवे पैरामीटर के कारण बहुत अधिक नकली ब्रेकआउट हो सकते हैं, सर्वोत्तम प्रभाव के लिए विभिन्न संयोजनों का परीक्षण किया जाना चाहिए
  2. ATR द्वारा निर्धारित स्टॉप-लॉस सीमा से अधिक के लिए बेंचमार्क के रूप में समापन मूल्य में वापसी हो सकती है, जो कि उच्चतम न्यूनतम मूल्य की गणना के प्रतिशत के रूप में विचार किया जा सकता है, जो कि बड़े पैमाने पर है
  3. सख्त ब्रीफिंग के साथ, लंबी लाइनों पर प्रवृत्ति के अवसरों को याद किया जा सकता है, उचित रूप से फ़िल्टरिंग शर्तों और होल्डिंग समय को ढीला करना
  4. एटीआर संकेतक बड़े पैमाने पर मूल्य उतार-चढ़ाव को ट्रैक करने के लिए धीमा है, वास्तविक तरंगों जैसे उच्च आवृत्ति वाले उतार-चढ़ाव के संकेतकों को ध्यान में रखा जाना चाहिए
  5. नए उच्च और नए निम्न ब्रेकडाउन को अल्पकालिक शोर से बाधित किया जा सकता है, सांख्यिकीय महत्व और रुझान की स्थिरता का मूल्यांकन किया जाना चाहिए

रणनीति अनुकूलन दिशा

  1. विभिन्न मापदंडों के संयोजनों का परीक्षण करने के लिए इष्टतम ब्रिन बैंड मापदंडों और चलती औसत लंबाई का निर्धारण करें
  2. विभिन्न ब्रिन बैंड मापदंडों या चलती औसत के संयोजन के साथ मॉडल संयोजन का उपयोग करके संकेत
  3. विभिन्न समय अवधि और विभिन्न किस्मों के लिए अनुकूलता का परीक्षण, स्थिरता में सुधार
  4. अधिक बड़े स्तर की शर्तों के साथ निर्णय, जैसे कि सूर्य रेखा स्तर ब्रिन बैंड सिग्नल या मौसमी कारक
  5. रणनीति कवरेज और मुनाफे के लिए अवसरों का आकलन करें

संक्षेप

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

रणनीति स्रोत कोड
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
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("Bollinger %B Candles Strategy", overlay=false, initial_capital = 1000, 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)

BBLength = input(100, minval=1, step=1)
StdDev = 10
useMovingAverage = input(true)
MAType = input(title="Moving Average Type", defval="rma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
lookbackPeriod = input(22, minval=10, step=10)
colorByPreviousClose = input(true)

AtrMAType = input(title="Moving Average Type", defval="hma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
AtrLength = input(10)
AtrMult = input(4)
wicks = input(false)

considerYearlyHighLow = input(false)
considerNewLongTermHighLows = input(false)
shortHighLowPeriod = 100
longHighLowPeriod = 200
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)


//////////////////////////////////// Calculate new high low condition //////////////////////////////////////////////////
f_calculateNewHighLows(shortHighLowPeriod, longHighLowPeriod, considerNewLongTermHighLows)=>
    newHigh = highest(shortHighLowPeriod) == highest(longHighLowPeriod) or not considerNewLongTermHighLows
    newLow = lowest(shortHighLowPeriod) == lowest(longHighLowPeriod) or not considerNewLongTermHighLows
    [newHigh,newLow]

//////////////////////////////////// Calculate Yearly High Low //////////////////////////////////////////////////
f_getYearlyHighLowCondition(considerYearlyHighLow)=>
    yhigh = security(syminfo.tickerid, '12M', high[1]) 
    ylow = security(syminfo.tickerid, '12M', low[1]) 
    yhighlast = yhigh[365]
    ylowlast = ylow[365]
    yhighllast = yhigh[2 * 365]
    ylowllast = ylow[2 * 365]
    
    yearlyTrendUp = na(yhigh)? true : na(yhighlast)? close > yhigh : na(yhighllast)? close > max(yhigh,yhighlast) : close > max(yhigh, min(yhighlast, yhighllast))
    yearlyHighCondition = (  (na(yhigh) or na(yhighlast) ? true : (yhigh > yhighlast) ) and ( na(yhigh) or na(yhighllast) ? true : (yhigh > yhighllast))) or yearlyTrendUp or not considerYearlyHighLow
    yearlyTrendDown = na(ylow)? true : na(ylowlast)? close < ylow : na(ylowllast)? close < min(ylow,ylowlast) : close < min(ylow, max(ylowlast, ylowllast))
    yearlyLowCondition = (  (na(ylow) or na(ylowlast) ? true : (ylow < ylowlast) ) and ( na(ylow) or na(ylowllast) ? true : (ylow < ylowllast))) or yearlyTrendDown or not considerYearlyHighLow
    
    label_x = time+(60*60*24*1000*1)
    [yearlyHighCondition,yearlyLowCondition]

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

inDateRange = true
[yearlyHighCondition,yearlyLowCondition] = f_getYearlyHighLowCondition(considerYearlyHighLow)
[newHighS,newLowS] = f_calculateNewHighLows(shortHighLowPeriod, longHighLowPeriod, considerNewLongTermHighLows)
[middleclose, upperclose, lowerclose] = bb(close, BBLength, StdDev)
[middleopen, upperopen, loweropen] = bb(open, BBLength, StdDev)
[middlehigh, upperhigh, lowerhigh] = bb(high, BBLength, StdDev)
[middlelow, upperlow, lowerlow] = bb(low, BBLength, StdDev)

percentBClose = (close - lowerclose)*100/(upperclose-lowerclose)
percentBOpen = (open - loweropen)*100/(upperopen-loweropen)
percentBHigh = (high - lowerhigh)*100/(upperhigh-lowerhigh)
percentBLow = (low - lowerlow)*100/(upperlow-lowerlow)

percentBMAClose = f_getMovingAverage(percentBClose, MAType, lookbackPeriod)
percentBMAOpen = f_getMovingAverage(percentBOpen, MAType, lookbackPeriod)
percentBMAHigh = f_getMovingAverage(percentBHigh, MAType, lookbackPeriod)
percentBMALow = f_getMovingAverage(percentBLow, MAType, lookbackPeriod)

newOpen = useMovingAverage? percentBMAOpen : percentBOpen
newClose = useMovingAverage? percentBMAClose : percentBClose
newHigh = useMovingAverage? percentBMAHigh : percentBHigh
newLow = useMovingAverage? percentBMALow : percentBLow

truerange = max(newHigh, newClose[1]) - min(newLow, newClose[1])

averagetruerange = f_getMovingAverage(truerange, AtrMAType, AtrLength)
atr = averagetruerange * AtrMult

longStop = newClose - atr
longStopPrev = nz(longStop[1], longStop)
longStop := (wicks ? newLow[1] : newClose[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = newClose + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := (wicks ? newHigh[1] : newClose[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and (wicks ? newHigh : newClose) > shortStopPrev ? 1 : dir == 1 and (wicks ? newLow : newClose) < longStopPrev ? -1 : dir

trailingStop = dir == 1? longStop : shortStop

candleColor = colorByPreviousClose ?
                 (newClose[1] < newClose ? color.green : newClose[1] > newClose ? color.red : color.silver) : 
                 (newOpen < newClose ? color.green : newOpen > newClose ? color.red : color.silver)
plotcandle(newOpen, newHigh, newLow, newClose, title='PercentBCandle', color = candleColor, wickcolor=candleColor)
plot(trailingStop, title="TrailingStop", style=plot.style_linebr, linewidth=1, color= dir == 1 ? color.green : color.red)

buyCondition = dir==1 and yearlyHighCondition and newHighS
exitBuyCondition = dir == -1
sellCondition = dir == -1 and yearlyLowCondition and newLowS
exitSellCondition = dir == 1
strategy.risk.allow_entry_in(tradeDirection)

barcolor(buyCondition? color.lime : sellCondition ? color.orange : color.silver)
strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca_buy")
strategy.close("Buy", when=exitBuyCondition)

strategy.entry("Sell", strategy.short, when=sellCondition and inDateRange, oca_name="oca_sell")
strategy.close("Sell", when=exitSellCondition)