यह रणनीति दोहरी चलती औसत के क्रॉसओवर का उपयोग ट्रेडिंग सिग्नल के रूप में करती है, जो ट्रेडिंग के बाद ट्रेंड के लिए एटीआर स्टॉप के साथ संयुक्त है। मुख्य विचार यह है कि जब तेजी से चलती औसत धीमी चलती औसत से ऊपर पार करती है, तो लंबी हो जाती है, और नीचे पार करते समय छोटी हो जाती है, जबकि एटीआर का उपयोग गतिशील रूप से ट्रेलिंग स्टॉप के लिए स्टॉप लॉस स्तर सेट करने के लिए किया जाता है।
यह रणनीति मुख्य रूप से प्रवृत्ति की दिशा निर्धारित करने के लिए दो सेट चलती औसत का उपयोग करती है। फास्ट मूविंग एवरेज की लंबाई 25 दिन है, और स्लो मूविंग एवरेज की लंबाई 100 दिन है। एक खरीद संकेत तब उत्पन्न होता है जब तेजी से एमए धीमी एमए के ऊपर से गुजरता है, और एक बिक्री संकेत तब उत्पन्न होता है जब नीचे से गुजरता है।
कुछ झूठे संकेतों को फ़िल्टर करने के लिए, रणनीति एक क्रॉसओवर काउंटर जोड़ती है जिसे क्रॉसकाउंट कहा जाता है। सिग्नल केवल तभी ट्रिगर किए जाते हैं जब लुकबैक अवधि (डिफ़ॉल्ट 25 दिन) में तेजी से एमए के लिए क्रॉस की संख्या maxNoCross (डिफ़ॉल्ट 10) से कम होती है।
इसके अतिरिक्त, रणनीति में एक पुष्टिकरण तंत्र है, जहां संकेत की पुष्टि भी की जाती है यदि मूल्य प्रारंभिक संकेत के बाद दो चलती औसत के बीच फिर से प्रवेश करता है।
स्थिति में प्रवेश करने के बाद, रणनीति स्टॉप लॉस स्तर निर्धारित करने के लिए एटीआर का उपयोग करती है। एटीआर एक निश्चित अवधि में मूल्य उतार-चढ़ाव सीमा को मापता है, और यहां इसकी 14x को स्टॉप दूरी के रूप में उपयोग किया जाता है। स्टॉप स्तर मूल्य आंदोलन के अनुसार तैरता है।
इस रणनीति के निम्नलिखित फायदे हैंः
फ़िल्टरिंग के साथ दोहरे एमए क्रॉस का उपयोग करके, यह गलत संकेतों से बचते हुए प्रभावी रूप से मजबूत प्रवृत्ति आंदोलनों को पकड़ सकता है।
पुष्टिकरण तंत्र झूठे पलायनों से नकली होने से रोकता है।
फ्लोटिंग एटीआर स्टॉप लॉस लाभ को अधिकतम करने में मदद करता है जबकि ड्रॉडाउन को सीमित करता है।
इसमें कुछ अनुकूलन योग्य पैरामीटर हैं और इसे लागू करना आसान है।
क्रिप्टो और पारंपरिक परिसंपत्तियों सहित सभी बाजारों पर लागू।
स्थायित्व के लिए कई तकनीकी संकेतकों को जोड़ती है।
रणनीति के मुख्य जोखिमों में निम्नलिखित शामिल हैंः
सीमा-सीमित अवधि के दौरान अक्सर एमए पार होने से कई नुकसान हो सकते हैं।
एटीआर पैरामीटर की अनुचित सेटिंग से स्टॉप बहुत चौड़े या बहुत तंग हो सकते हैं।
बड़ी खाई सीधे रुकने का कारण बन सकती है।
बड़ी समाचार घटनाएं जो भारी अस्थिरता का कारण बनती हैं, वे भी पदों को रोक सकती हैं।
अपर्याप्त एमए मापदंडों के कारण प्रवृत्तियों की कमी या बहुत सारे झूठे संकेत हो सकते हैं।
हालिया मूल्य कार्रवाई एटीआर स्टॉप को अप्रचलित बना सकती है।
इस रणनीति को निम्नलिखित पहलुओं में और अधिक अनुकूलित किया जा सकता हैः
बेहतर संयोजन खोजने के लिए एमए मापदंडों को अनुकूलित करें, विभिन्न अवधियों और भारित औसत का परीक्षण करें।
बेहतर स्टॉप दूरी खोजने के लिए विभिन्न एटीआर अवधि का परीक्षण करें।
सिग्नल की गुणवत्ता में सुधार के लिए वॉल्यूम स्पाइक, अस्थिरता संकेतक जैसे अतिरिक्त फ़िल्टर जोड़ें।
चंचल बाजारों में झटके से बचने के लिए रुझान मेट्रिक्स को शामिल करें।
बैकटेस्टिंग के माध्यम से पैरामीटर ऑटो अनुकूलित करने के लिए मशीन सीखने के एल्गोरिदम जोड़ें.
अल्पकालिक शोर से बचने के लिए अधिक समय सीमा पर अधिक पुष्टि की तलाश करें।
लाभदायक पदों से बाहर स्केल करने के लिए चरणबद्ध लाभ लेने के नियम लागू करें।
यह रणनीति दोहरे एमए क्रॉस, ट्रेंड फिल्टरिंग, पुष्टि और गतिशील एटीआर स्टॉप को मजबूत ट्रेंड फॉलो करने के लिए जोड़ती है। जबकि अनुकूलन और जोखिम नियंत्रण में सुधार के लिए जगह है, ट्रेडिंग तर्क सरल और दोहराने में आसान है, जिससे यह एक स्थिर ट्रेंड ट्रेडिंग सिस्टम बन जाता है।
/*backtest start: 2023-10-02 00:00:00 end: 2023-11-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("QuantCat Intraday Strategy (15M)", overlay=true) //MA's for basic signals, can experiment with these values fastEMA = sma(close, 25) slowEMA = sma(close, 100) //Parameters for validation of position lookback_value = 25 maxNoCross=10 //value used for maximum number of crosses on a certain MA to mitigate noise and maximise value from trending markets //Amount of crosses on MA to filter out noise ema25_crossover = (cross(close, fastEMA)) == true ? 1 : 0 ema25_crossover_sum = sum(ema25_crossover, lookback_value) ///potentially change lookback value to alter results crossCount = (ema25_crossover_sum <= maxNoCross) //Entries long agrLong = ((crossover(fastEMA, slowEMA)) and (crossCount == true)) ? true : false consLong = ((close < fastEMA) and (close > slowEMA) and (fastEMA > slowEMA) and (crossCount == true)) ? true : false //Entries short agrShort = ((crossunder(fastEMA, slowEMA)) and (crossCount == true)) ? true : false consShort = ((close > fastEMA) and (close < slowEMA) and (fastEMA < slowEMA) and (crossCount == true)) ? true : false //ATR atrLkb = input(14, minval=1, title='ATR Stop Period') atrRes = input("15", title='ATR Resolution') atr = request.security(syminfo.tickerid, atrRes, atr(atrLkb)) //Strategy longCondition = ((agrLong or consLong) == true) if (longCondition) strategy.entry("Long", strategy.long) shortCondition = ((agrShort or consShort) == true) if (shortCondition) strategy.entry("Short", strategy.short) //Stop multiplier stopMult = 4 //horizontal stoplosses longStop = na longStop := shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atr * stopMult) : longStop[1] shortStop = na shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atr * stopMult) : shortStop[1] //Strategy exit functions strategy.exit("Long ATR Stop", "Long", stop=longStop) strategy.exit("Short ATR Stop", "Short", stop=shortStop) //Plots redgreen = (fastEMA > slowEMA) ? green : red p1 = plot(fastEMA, title="Fast EMA", color=redgreen, linewidth=2) p2 = plot(slowEMA, title="Slow EMA", color=redgreen, linewidth=2) fill(p1, p2, color=redgreen) s1 = plot(longStop, style=linebr, color=red, linewidth=2, title='Long ATR Stop') s2 = plot(shortStop, style=linebr, color=red, linewidth=2, title='Short ATR Stop') fill(p2, s1, color=red, transp=95) fill(p2, s2, color=red, transp=95)