यह रणनीति प्रभावी रूप से ट्रेंड को ट्रैक करने और उलटने के लिए मूविंग एवरेज क्रॉसओवर और मोमेंटम इंडिकेटर को जोड़ती है। यह पहले गोल्डन क्रॉस लॉन्ग सिग्नल और डेथ क्रॉस शॉर्ट सिग्नल उत्पन्न करने के लिए तेज़ और धीमी गति से मूविंग एवरेज का उपयोग करती है। फिर कुछ मापदंडों के मोमेंटम इंडिकेटर के साथ, यदि गोल्डन क्रॉस के बाद तेजी से एमए पर गति फिर से बदल जाती है, तो प्रवृत्ति को निरंतर माना जाता है और लंबी स्थिति रखी जाएगी। जब गति कम हो जाती है, तो इसे ट्रेंड रिवर्स माना जाता है और मौजूदा स्थिति बंद हो जाएगी। ट्रेंड रिवर्स को ट्रैक करते समय डेथ क्रॉस शॉर्ट सिग्नल पर भी यही तर्क लागू होता है। एडीएक्स फिल्टर का उपयोग गलत संकेतों से बचने के लिए भी किया जाता है जब यह ट्रेंड की स्थिति में नहीं होता है।
इस रणनीति का मूल तर्क एमए क्रॉसओवर से ट्रेंड सिग्नल और गति संकेतक से ट्रेंड रिवर्स सिग्नल पर आधारित है।
त्वरित एमए मूल्य1 (5-अवधि एचएमए) और धीमी एमए मूल्य2 (7-अवधि एचएमए) की गणना करें।
मूल्य1 मूल्य2 से ऊपर पार करने के साथ स्वर्ण क्रॉस एक लंबा संकेत उत्पन्न करता है। मूल्य1 मूल्य2 से नीचे पार करने के साथ मृत्यु क्रॉस एक छोटा संकेत उत्पन्न करता है। यह एमए का सामान्य उपयोग है।
लंबे संकेत के बाद, यदि मूल्य1
जब गति roc1 कम हो जाती है, तो इसे प्रवृत्ति उलट माना जाता है और मौजूदा स्थिति बंद हो जाएगी।
ADX थ्रेशोल्ड को ट्रेंडिंग स्टेट में नहीं होने पर गलत सिग्नल से बचने के लिए इनपुट करें। सिग्नल तभी उत्पन्न होते हैं जब ADX थ्रेशोल्ड से ऊपर होता है।
सरल एमए रणनीतियों की तुलना में, इस रणनीति का सबसे बड़ा लाभ गति संकेतक की शुरूआत है ताकि तेजी से और सटीक रूप से रुझान उलटने का पता लगाया जा सके। विशिष्ट लाभः
एमए खुद मूल्य परिवर्तनों में देरी करते हैं, जबकि गति संकेतक समय पर स्टॉप लॉस या रिवर्स ट्रेडिंग के लिए रिवर्स सिग्नल को जल्दी से पकड़ सकते हैं।
गति के आधार पर रिवर्स सिग्नल अधिक विश्वसनीय होते हैं, ट्रेंड ट्रेडिंग के दौरान अनावश्यक ओपन/क्लोज ऑर्डर से बचते हैं।
एडीएक्स गैर-ट्रेंडिंग बाजारों में गलत संकेतों से बचता है, रणनीति को उच्च जीत की संभावना वाले रुझानों पर अधिक केंद्रित रखता है।
तर्क सरल और समझने में आसान है, अल्गो ट्रेडिंग के शुरुआती लोगों के लिए उपयुक्त है।
विभिन्न बाजारों के लिए एमए अवधि, गति मापदंड आदि को समायोजित करके अनुकूलन के लिए बड़ा स्थान।
इस रणनीति के मुख्य जोखिम निम्नलिखित से आते हैंः
एमए की विलंबित प्रकृति, जो विलंबित संकेतों का कारण बन सकती है, सर्वोत्तम प्रवेश बिंदुओं को याद करती है।
अनावश्यक प्रविष्टियों या निकासों का कारण बनने वाले झूठे ब्रेकआउट। पैरामीटर या अतिरिक्त फ़िल्टर के आगे अनुकूलन की आवश्यकता है।
रुझान उलट का पता लगाना गति पर निर्भर करता है, जो बाजार में भारी उतार-चढ़ाव के दौरान अस्थिर हो सकता है।
ADX रुझानों और समेकन का पता लगाने में अपूर्ण है। अनुचित सीमा सेटिंग्स समस्याओं का कारण बन सकती हैं।
ट्रेडिंग लागतों पर विचार नहीं किया गया है। वास्तविक ट्रेडिंग में लागू होने पर उचित स्टॉप लॉस सेट किया जाना चाहिए।
इस रणनीति को निम्नलिखित पहलुओं में और अधिक अनुकूलित किया जा सकता हैः
बेहतर चिकनाई प्रभाव के लिए अन्य प्रकार के एमए की कोशिश करें या एमए मापदंडों को समायोजित करें।
मूल्य उलटों को पकड़ने के लिए उच्च संवेदनशीलता के लिए गति संकेतक की लंबाई को अनुकूलित करें।
अल्पकालिक उतार-चढ़ाव से गुमराह होने से बचने के लिए गति उलटा होने पर मूल्य फ़िल्टर सेट करें।
विभिन्न ADX स्तरों पर अलग-अलग मापदंडों का उपयोग करके ADX उपयोग को बढ़ाएं।
सिग्नल की गुणवत्ता में सुधार और झूठे ब्रेकआउट को फ़िल्टर करने के लिए वॉल्यूम इंडिकेटर आदि की शुरूआत करें।
एकल व्यापार हानि को नियंत्रित करने के लिए स्टॉप लॉस तंत्र जोड़ें। उचित लाभ लक्ष्य और स्टॉप लॉस निर्धारित करने के लिए यथार्थवादी व्यापार लागतों का मूल्यांकन करें।
यह रणनीति ट्रेंड्स को ट्रैक करने और उलटफेर को पकड़ने के लिए एमए और गति संकेतक के फायदे को जोड़ती है। शुद्ध ट्रेंड फॉलो करने वाली रणनीतियों की तुलना में, यह ट्रेंड क्लाइमेक्स से नुकसान से बचने के लिए विभिन्न बाजार चरणों से निपटने में अधिक लचीला हो सकता है, जबकि ट्रेंड ट्रेडिंग को बनाए रखते हुए। पैरामीटर अनुकूलन और सहायक शर्तों को पेश करने के माध्यम से आगे सुधार किए जा सकते हैं। कुल मिलाकर, रणनीति में स्पष्ट और सरल तर्क है, जो एल्गो ट्रेडिंग शुरुआती लोगों के लिए सीखने और लागू करने के लिए बहुत उपयुक्त है।
/*backtest start: 2023-09-23 00:00:00 end: 2023-10-23 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //study(title="MA Crossover Strategy", overlay = true) strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true) src = input(open, title="Source") price = request.security(syminfo.tickerid, timeframe.period, src) ma1 = input(5, title="1st MA Length") type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA"]) ma2 = input(7, title="2nd MA Length") type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA"]) adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Length") adxthreshold = input(20, title="ADX threshold") 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) sig = adx(dilen, adxlen) //study("Average Directional Index", shorttitle="ADX", format=format.price, precision=2, resolution="") //plot(sig, color=color.red, title="ADX") f_hma(_src, _length)=> _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length))) price1 = if (type1 == "SMA") sma(price, ma1) else if (type1 == "EMA") ema(price, ma1) else f_hma(price, ma1) price2 = if (type2 == "SMA") sma(price, ma2) else if (type2 == "EMA") ema(price, ma2) else f_hma(price, ma2) //plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0) plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0) plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0) //longCondition = price1> price2 longCondition = price1> price2 and sig > adxthreshold if (longCondition) strategy.entry("Long", strategy.long) shortCondition = price1 < price2 and sig > adxthreshold if (shortCondition) strategy.entry("Short", strategy.short) lookback1 = input(1, "Lookback 1") roc1 = roc(price1, lookback1) ma1up = false ma1down = false ma2up = false ma2down = false ma1up := nz(ma1up[1]) ma1down := nz(ma1down[1]) ma2up := nz(ma2up[1]) ma2down := nz(ma2down[1]) trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01 if crossover(roc1, trendStrength1) ma1up := true ma1down := false if crossunder(roc1, -trendStrength1) ma1up := false ma1down := true shortexitCondition = ma1up and ma1down[1] and sig > adxthreshold if (shortexitCondition) strategy.close("Short") longexitCondition = ma1down and ma1up[1] and sig > adxthreshold if (longexitCondition) strategy.close("Long")