बोलिंगर बैंड पर आधारित दोहरी चलती औसत मिलान रणनीति

लेखक:चाओझांग, दिनांक: 2023-11-24 15:32:57
टैगः

img

अवलोकन

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

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

यह रणनीति मुख्य रूप से व्यापार के लिए बोलिंगर बैंड्स संकेतक और चलती औसत संकेतक के क्रॉसओवर संकेतों पर आधारित है। विशेष रूप से, यह एक ही समय में 5 से 200 दिनों की लंबाई के साथ मध्य रेल, बोलिंगर बैंड्स की ऊपरी रेल और 7 चलती औसत का उपयोग करता है। यह एक खरीद संकेत उत्पन्न करता है जब कीमत नीचे से ऊपर तक बोलिंगर बैंड्स की मध्य और निचली रेलों के माध्यम से टूटती है; यह एक बिक्री संकेत उत्पन्न करता है जब कीमत ऊपर से नीचे से बोलिंगर बैंड्स की ऊपरी रेल के माध्यम से टूटती है ताकि प्रवृत्ति का पालन किया जा सके।

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

लाभ विश्लेषण

  1. लचीला विन्यास जो विभिन्न बाजार वातावरणों के अनुरूप पैरामीटर संयोजनों को अनुकूलित कर सकता है
  2. फिल्टर के रूप में दो अलग-अलग संकेतकों का संयोजन गलत संकेतों को कम कर सकता है
  3. ट्रेंड जजिंग इंडिकेटर अस्थिर बाजारों में रिवर्स ऑपरेशन से बच सकता है
  4. स्टॉप लॉस सेटिंग को ट्रैक करने से लाभ अधिकतम होता है

जोखिम विश्लेषण

  1. अत्यधिक व्यापार से बचने के लिए विभिन्न समय सीमाओं के चक्रों के अनुरूप मापदंडों को उचित रूप से समायोजित किया जाना चाहिए
  2. स्टॉप लॉस का ट्रैक करने से तेजी से गिरावट में नुकसान बढ़ सकता है
  3. पर्याप्त धनराशि सुनिश्चित करनी होगी, अन्यथा निरंतर नुकसान के जोखिम का सामना नहीं कर पाएगी।

अनुकूलन दिशाएँ

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

निष्कर्ष

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


/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
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("BuyTheDip", overlay=true, initial_capital = 100000, 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)

MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
exitType = input(title="Exit Strategy", defval="Signal", options=["Signal", "TrailingStop", "Both"])
LookbackPeriod = input(30, minval=10,step=10)

BBStdDev = input(2, minval=1, maxval=10, step=0.5)
BBLength = input(60, minval=5, step=5)

atrLength = input(22)
atrMult = input(6)

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)
includePartiallyAligned = true
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

f_getTrailingStop(atr, atrMult)=>
    stop = close - atrMult*atr
    stop := strategy.position_size > 0 ? max(stop, stop[1]) : stop
    stop

f_getMaAlignment(MAType, includePartiallyAligned)=>
    ma5 = f_getMovingAverage(close,MAType,5)
    ma10 = f_getMovingAverage(close,MAType,10)
    ma20 = f_getMovingAverage(close,MAType,20)
    ma30 = f_getMovingAverage(close,MAType,30)
    ma50 = f_getMovingAverage(close,MAType,50)
    ma100 = f_getMovingAverage(close,MAType,100)
    ma200 = f_getMovingAverage(close,MAType,200)

    upwardScore = 0
    upwardScore := close > ma5? upwardScore+1:upwardScore
    upwardScore := ma5 > ma10? upwardScore+1:upwardScore
    upwardScore := ma10 > ma20? upwardScore+1:upwardScore
    upwardScore := ma20 > ma30? upwardScore+1:upwardScore
    upwardScore := ma30 > ma50? upwardScore+1:upwardScore
    upwardScore := ma50 > ma100? upwardScore+1:upwardScore
    upwardScore := ma100 > ma200? upwardScore+1:upwardScore
    
    upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200
    downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200
    upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 5? 0.5: upwardScore < 2?-0.5:upwardScore>3?0.25:-0.25) : 0
    
inDateRange = time >= timestamp(syminfo.timezone, year(timenow) - backtestYears, 01, 01, 0, 0)

exitBySignal = exitType == "Signal" or exitType == "Both"
exitByTrailingStop = exitType == "TrailingStop" or exitType == "Both"
maAlignment = f_getMaAlignment(MAType,includePartiallyAligned)
atr = atr(atrLength)

trailingStop = f_getTrailingStop(atr, atrMult)
maAligned = highest(maAlignment,LookbackPeriod)
[middle, upper, lower] = bb(close, BBLength, BBStdDev)

buyCondition = maAligned == 1 and (crossover(close, lower) or crossover(close, middle))
buyExitCondition = crossunder(close, upper)

strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca_buy")
strategy.close("Buy", when=buyExitCondition and exitBySignal)
strategy.exit("ExitBuy", "Buy", stop = trailingStop, when=exitByTrailingStop )




अधिक