यह रणनीति एक मात्रात्मक ट्रेडिंग प्रणाली है जो कई घातीय चलती औसत (ईएमए), सापेक्ष शक्ति सूचकांक (आरएसआई) और चलती औसत अभिसरण विचलन (एमएसीडी) को जोड़ती है। यह रणनीति कई तकनीकी संकेतकों के समन्वय के माध्यम से एक पूर्ण ट्रेडिंग निर्णय ढांचा बनाती है। यह चार ईएमए लाइनों (10, 20, 50, और 100 दिन) का उपयोग मुख्य प्रवृत्ति निर्णय उपकरण के रूप में करता है, आरएसआई और एमएसीडी के साथ संयुक्त सहायक पुष्टि संकेतकों के रूप में, जबकि जोखिम को नियंत्रित करने के लिए स्टॉप-लॉस और टेक-प्रॉफिट सेट करता है।
रणनीति का मूल तर्क निम्नलिखित प्रमुख तत्वों पर आधारित है:
यह एक अच्छी तरह से डिज़ाइन की गई मात्रात्मक ट्रेडिंग रणनीति है जिसमें कठोर तर्क है। कई तकनीकी संकेतकों के संयुक्त उपयोग के माध्यम से, यह व्यापक जोखिम नियंत्रण तंत्र को बनाए रखते हुए बाजार के रुझानों को प्रभावी ढंग से पकड़ सकता है। रणनीति में महत्वपूर्ण अनुकूलन क्षमता है, और निरंतर सुधार और समायोजन के माध्यम से, बेहतर ट्रेडिंग परिणामों की उम्मीद की जा सकती है। लाइव ट्रेडिंग से पहले गहन बैकटेस्टिंग करने और विशिष्ट बाजार स्थितियों के अनुसार मापदंडों को समायोजित करने की सिफारिश की जाती है।
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-04 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("4 EMA Strategy with RSI & MACD", shorttitle="4 EMA + RSI + MACD", overlay=true) // Input EMA periods ema1 = input(10, title="EMA 1") ema2 = input(20, title="EMA 2") ema3 = input(50, title="EMA 3") ema4 = input(100, title="EMA 4") // Input RSI & MACD settings rsiLength = input(14, title="RSI Length") rsiOverbought = input(70, title="RSI Overbought") rsiOversold = input(30, title="RSI Oversold") macdFast = input(12, title="MACD Fast Length") macdSlow = input(26, title="MACD Slow Length") macdSignal = input(9, title="MACD Signal Length") // Stop Loss and Take Profit Inputs stopLossPct = input.float(1.5, title="Stop Loss %") / 100 takeProfitPct = input.float(3, title="Take Profit %") / 100 // Calculate EMAs ema_1 = ta.ema(close, ema1) ema_2 = ta.ema(close, ema2) ema_3 = ta.ema(close, ema3) ema_4 = ta.ema(close, ema4) // Calculate RSI rsi = ta.rsi(close, rsiLength) // Calculate MACD [macdLine, signalLine, _] = ta.macd(close, macdFast, macdSlow, macdSignal) // Plot EMAs plot(ema_1, color=color.blue, title="EMA 10") plot(ema_2, color=color.green, title="EMA 20") plot(ema_3, color=color.orange, title="EMA 50") plot(ema_4, color=color.red, title="EMA 100") // Entry Conditions longCondition = ta.crossover(ema_1, ema_4) and ta.crossover(ema_2, ema_3) and rsi > 50 and macdLine > signalLine shortCondition = ta.crossunder(ema_1, ema_4) and ta.crossunder(ema_2, ema_3) and rsi < 50 and macdLine < signalLine // Declare Stop Loss and Take Profit Variables var float stopLossPrice = na var float takeProfitPrice = na var line stopLossLine = na var line takeProfitLine = na // Long Trade if (longCondition) strategy.entry("Buy", strategy.long) stopLossPrice := strategy.position_avg_price * (1 - stopLossPct) takeProfitPrice := strategy.position_avg_price * (1 + takeProfitPct) // stopLossLine := line.new(bar_index, stopLossPrice, bar_index + 1, stopLossPrice, color=color.red, width=2, style=line.style_dotted) // takeProfitLine := line.new(bar_index, takeProfitPrice, bar_index + 1, takeProfitPrice, color=color.green, width=2, style=line.style_dotted) // Short Trade if (shortCondition) strategy.entry("Sell", strategy.short) stopLossPrice := strategy.position_avg_price * (1 + stopLossPct) takeProfitPrice := strategy.position_avg_price * (1 - takeProfitPct) // stopLossLine := line.new(bar_index, stopLossPrice, bar_index + 1, stopLossPrice, color=color.red, width=2, style=line.style_dotted) // takeProfitLine := line.new(bar_index, takeProfitPrice, bar_index + 1, takeProfitPrice, color=color.green, width=2, style=line.style_dotted) // Clear Lines on Trade Exit // if (strategy.position_size == 0) // line.delete(stopLossLine) // line.delete(takeProfitLine) // Exit Trades if (strategy.position_size > 0) strategy.exit("Sell", from_entry="Buy", stop=stopLossPrice, limit=takeProfitPrice) if (strategy.position_size < 0) strategy.exit("Cover", from_entry="Sell", stop=stopLossPrice, limit=takeProfitPrice)