ड्यूल ईएमए क्रॉसओवर ऑसिलेशन ट्रैकिंग रणनीति एक रणनीति है जो ईएमए संकेतक का उपयोग करके रुझानों की पहचान करती है और अस्थिर बाजार स्थितियों के दौरान ऑसिलेशन को ट्रैक करती है। इस रणनीति में ट्रेंड ट्रैकिंग और ऑसिलेशन कैप्चर दोनों की अवधारणाएं शामिल हैं। इसका उद्देश्य मजबूत रुझानों के दौरान दीर्घकालिक ट्रैकिंग और ऑसिलेशन के दौरान अल्पकालिक ट्रेडिंग करके बेहतर रिटर्न प्राप्त करना है।
यह रणनीति रुझानों का आकलन करने के लिए एक संकेतक के रूप में 20 अवधि के ईएमए का उपयोग करती है। जब कीमत ईएमए से ऊपर जाती है, तो यह एक ऊपर की प्रवृत्ति का संकेत देती है, और जब कीमत नीचे जाती है, तो यह एक नीचे की प्रवृत्ति का संकेत देती है।
जब कीमत ईएमए से ऊपर जाती है, तो पिछले 20 अवधियों में उच्चतम मूल्य को लाभ लेने के रूप में और क्रॉसओवर के बाद सबसे कम कम मूल्य को स्टॉप लॉस के रूप में उपयोग करके लंबी स्थिति दर्ज की जाती है। जब कीमत ईएमए से नीचे जाती है, तो पिछले 20 अवधियों में सबसे कम मूल्य को लाभ लेने के रूप में और क्रॉसओवर के बाद सबसे उच्च मूल्य को स्टॉप लॉस के रूप में उपयोग करके एक छोटी स्थिति दर्ज की जाती है।
साथ ही, रणनीति यह भी जांचती है कि क्या ADX 30 से ऊपर है। ट्रेड केवल तब किए जाते हैं जब प्रवृत्ति पर्याप्त मजबूत होती है, अर्थात जब ADX 30 से अधिक होता है। इससे बाजार के उतार-चढ़ाव के दौरान स्टॉप आउट से बचा जाता है।
खुले ट्रेडों के दौरान, अधिक लाभ प्राप्त करने के लिए बाजार की स्थितियों के आधार पर ट्रेलिंग स्टॉप को समायोजित करना जारी रखता है।
यह रणनीति ट्रेंड ट्रैकिंग और ऑसिलेशन ट्रेडिंग दोनों के फायदे को जोड़ती है। यह ट्रेंडिंग बाजारों के दौरान उच्च रिटर्न और ऑसिलेशन के दौरान अधिक सुसंगत रिटर्न का उत्पादन कर सकती है। अनुकूलन क्षमता मजबूत है।
ईएमए का प्रयोग पैरामीटरों को सरल रखता है, अत्यधिक अनुकूलन के जोखिम को कम करता है और स्थिरता सुनिश्चित करता है।
इस रणनीति का मुख्य जोखिम तीव्र उतार-चढ़ाव के दौरान अधिक बार रुकने की संभावना है। यह वह जगह है जहां एडीएक्स खेल में आता है। एडीएक्स कम होने पर व्यापार को अक्षम करके, स्पष्ट प्रवृत्ति की अनुपस्थिति में नुकसान से बचा जा सकता है।
इसके अलावा, उचित स्टॉप लॉस प्लेसमेंट भी महत्वपूर्ण है। अत्यधिक व्यापक स्टॉप एकल व्यापार हानि राशि को बढ़ा सकते हैं। अत्यधिक तंग स्टॉप बहुत संवेदनशील हो सकते हैं और स्टॉप आउट संभावना को बढ़ा सकते हैं। लाभ लक्ष्यों और स्टॉप लॉस जोखिमों के बीच संतुलन खोजने की आवश्यकता है।
इस रणनीति के लिए संभावित अनुकूलन में शामिल हैंः
इष्टतम संयोजन खोजने के लिए अधिक ईएमए अवधि का परीक्षण करना।
ADX अवधि और सीमा मान सहित ADX मापदंडों का अनुकूलन।
लाभ लेने और स्टॉप लॉस एल्गोरिदम में सुधार करना, उदाहरण के लिए गतिशील स्टॉप की शुरूआत करके।
मल्टी-इंडिकेटर पुष्टिकरण प्रणाली बनाने के लिए केडीजे और एमएसीडी जैसे अतिरिक्त संकेतकों को मिलाकर।
संक्षेप में, डबल ईएमए क्रॉसओवर ऑसिलेशन ट्रैकिंग रणनीति एक अत्यधिक व्यावहारिक रणनीति है। यह ट्रेंड ट्रेडिंग रणनीतियों और ऑसिलेशन रणनीतियों दोनों की ताकतों को जोड़ती है। इसका उपयोग दीर्घकालिक ट्रैकिंग और अल्पकालिक ट्रेडिंग दोनों के लिए किया जा सकता है। पैरामीटर अनुकूलन और पुष्टिकरण संकेतकों को जोड़ने के माध्यम से प्रदर्शन में और सुधार हासिल किया जा सकता है। यह बाजार की स्थिति के बारे में कुछ हद तक विश्लेषणात्मक क्षमताओं वाले निवेशकों के लिए उपयुक्त है।
/*backtest start: 2023-12-26 00:00:00 end: 2024-01-02 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Linda Raschke's Holy Grail", shorttitle="RHG", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true) adxlen = input(14, title="ADX period") adxMin = input(30) dilen = adxlen f_highest(_src, _length)=> _adjusted_length = _length < 1 ? 1 : _length _value = _src for _i = 0 to (_adjusted_length-1) _value := _src[_i] >= _value ? _src[_i] : _value _return = _value f_lowest(_src, _length)=> _adjusted_length = _length < 1 ? 1 : _length _value = _src for _i = 0 to (_adjusted_length-1) _value := _src[_i] <= _value ? _src[_i] : _value _return = _value dirmov(len) => up = change(high) down = -change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = rma(tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) emaLength = input(20) curEma = ema(close, emaLength) highPeriod = input(20) d = na takeProfitLong = highest(high, highPeriod) stopLossLong = f_lowest(low, barssince(low >= curEma)) if strategy.position_size == 0 if adx(dilen, adxlen) <= adxMin or high < curEma strategy.cancel("Long") if adx(dilen, adxlen) > adxMin and low < curEma and high > curEma and curEma > curEma[highPeriod / 2] and curEma > curEma[highPeriod] and takeProfitLong > high strategy.order("Long", strategy.long, stop = high) strategy.exit("Exit", "Long", limit = takeProfitLong, stop = stopLossLong) d := high takeProfitShort = lowest(low, highPeriod) stopLossShort = f_highest(high, barssince(high <= curEma)) if strategy.position_size == 0 if adx(dilen, adxlen) <= adxMin or low > curEma strategy.cancel("Short") if adx(dilen, adxlen) > adxMin and high > curEma and low < curEma and curEma < curEma[highPeriod / 2] and curEma < curEma[highPeriod] and takeProfitShort < low strategy.order("Short", strategy.short, stop = low) strategy.exit("Exit", "Short", limit = takeProfitShort, stop = stopLossShort) d := low strategy.close("Exit") plot(d == high ? stopLossLong : d == low ? stopLossShort : na, style = circles, linewidth = 4, color = red) plot(d == high ? takeProfitLong : d == low ? takeProfitShort : na, style = circles, linewidth = 4, color = green) plot(d, style = circles, linewidth = 4, color = yellow) plot(curEma, color = black, linewidth = 2) // === Backtesting Dates === testPeriodSwitch = input(false, "Custom Backtesting Dates") testStartYear = input(2018, "Backtest Start Year") testStartMonth = input(3, "Backtest Start Month") testStartDay = input(6, "Backtest Start Day") testStartHour = input(08, "Backtest Start Hour") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0) testStopYear = input(2018, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(14, "Backtest Stop Day") testStopHour = input(14, "Backtest Stop Hour") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false isPeriod = testPeriodSwitch == true ? testPeriod() : true // === /END if not isPeriod strategy.cancel_all() strategy.close_all()