यह रणनीति विभिन्न प्रकार के मूविंग एवरेज (सिंपल मूविंग एवरेज एसएमए, एक्सपोनेंशियल मूविंग एवरेज ईएमए, हॉल मूविंग एवरेज एचएमए और वेटेड मूविंग एवरेज वीडब्ल्यूएमए) की गणना करके और उनके बीच क्रॉसओवर बिंदुओं का पता लगाकर, बाजार की प्रवृत्ति निर्धारित करने और उसका अनुसरण करने के लिए ट्रेडिंग सिग्नल उत्पन्न करती है। यह खरीद सिग्नल उत्पन्न करती है जब कम अवधि के एमए नीचे से लंबी अवधि के एमए के ऊपर से पार करते हैं, और विपरीत क्रॉसिंग होने पर सिग्नल बेचते हैं।
इस रणनीति का मुख्य विचार दो चलती औसत की तुलना करके बाजार की प्रवृत्ति का न्याय करना है। विशेष रूप से, यह इनपुट मापदंडों के माध्यम से विभिन्न प्रकार और लंबाई के साथ दो एमए को कॉन्फ़िगर करने की अनुमति देता है। पहले एमए में प्रमुख प्रवृत्ति का प्रतिनिधित्व करने के लिए एक लंबी अवधि होती है, जबकि दूसरे एमए में वर्तमान अल्पकालिक प्रवृत्ति के लिए एक छोटी अवधि होती है।
जब अल्पकालिक एमए नीचे से दीर्घकालिक एमए को पार करता है, तो यह संकेत देता है कि अल्पकालिक प्रवृत्ति मजबूत हो रही है और बाजार ऊपर की ओर प्रवृत्ति में प्रवेश कर रहा है। इस प्रकार इस क्रॉसओवर बिंदु पर एक खरीद संकेत उत्पन्न होता है। इसके विपरीत, जब अल्पकालिक एमए दीर्घकालिक एमए से नीचे पार करता है, तो यह संकेत देता है कि अल्पकालिक प्रवृत्ति कमजोर हो रही है और बाजार नीचे की ओर उलट रहा है। तदनुसार, एक बिक्री संकेत उत्पन्न होता है।
इस तरह के एमए क्रॉसवर्स का पता लगाकर, यह रणनीति व्यापार के लिए बाजार की प्रवृत्ति का पालन करती है।
समाधान:
यह रणनीति प्रमुख प्रवृत्ति का पता लगाने के लिए एमए क्रॉसओवर का उपयोग करने के क्लासिक विचार पर आधारित है। लचीले एमए संयोजनों के साथ, यह लागू करना सरल है और एल्गोरिथम ट्रेडिंग स्वचालन के लिए उपयुक्त है। कुल मिलाकर यह काफी व्यावहारिक है लेकिन प्रदर्शन में और सुधार के लिए पैरामीटर ट्यूनिंग, अतिरिक्त फ़िल्टर आदि जैसे संवर्द्धन के लिए जगह छोड़ देता है।
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //study(title="MA Crossover Strategy", overlay = true) strategy("MA Crossover Strategy", overlay=true) src = input(close, title="Source") price = request.security(syminfo.tickerid, timeframe.period, src) ma1 = input(25, title="1st MA Length") type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"]) ma2 = input(7, title="2nd MA Length") type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"]) 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 if (type1 == "VWMA") vwma(price, ma1) else f_hma(price, ma1) price2 = if (type2 == "SMA") sma(price, ma2) else if (type2 == "EMA") ema(price, ma2) else if (type2 == "VWMA") vwma(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 = crossover(price1, price2) if (longCondition) strategy.entry("Long", strategy.long) shortCondition = crossunder(price1, price2) if (shortCondition) strategy.entry("Short", strategy.short)