यह रणनीति एक हाइब्रिड प्रणाली है जो ट्रेंड फॉलोइंग और स्विंग ट्रेडिंग को जोड़ती है, कई तकनीकी संकेतक स्क्रीनिंग और सख्त पूंजी प्रबंधन के माध्यम से स्थिर ट्रेडिंग प्राप्त करती है। यह रणनीति लाभ को लॉक करने के लिए एक चरणबद्ध लाभ लेने के दृष्टिकोण को अपनाती है जबकि रिटर्न सुनिश्चित करते हुए जोखिम को प्रबंधित करने के लिए अधिकतम ड्रॉडाउन नियंत्रण निर्धारित करती है। यह प्रणाली व्यापार प्रभावशीलता सुनिश्चित करने के लिए वॉल्यूम, एटीआर और ईएमए के साथ संयुक्त मुख्य ट्रेडिंग सिग्नल ट्रिगर के रूप में आरएसआई गति संकेतक और एडीएक्स ट्रेंड स्ट्रेंथ संकेतक का उपयोग करती है।
रणनीति के मूल तर्क में निम्नलिखित प्रमुख तत्व शामिल हैंः
यह रणनीति एक व्यापक ट्रेडिंग प्रणाली है जो कई तकनीकी संकेतकों और सख्त पूंजी प्रबंधन के माध्यम से स्थिर व्यापार प्राप्त करती है। रणनीति के मुख्य फायदे इसकी पूर्ण जोखिम नियंत्रण प्रणाली और चरणबद्ध लाभ लेने के तंत्र में निहित हैं, लेकिन व्यावहारिक अनुप्रयोग में बाजार की स्थितियों के आधार पर समय पर पैरामीटर समायोजन पर ध्यान देने की आवश्यकता है। रणनीति का आगे अनुकूलन स्थान मुख्य रूप से पैरामीटर गतिशील अनुकूलन और संकेत फ़िल्टरिंग तंत्र में सुधार में निहित है।
/*backtest start: 2023-12-20 00:00:00 end: 2024-12-18 08:00:00 period: 2d basePeriod: 2d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="Swing Strategy (<30% DD)", shorttitle="SwingStratDD", overlay=true) //----------------------------------------------------- // Example Indicators and Logic //----------------------------------------------------- emaLen = input.int(200, "EMA Length", minval=1) emaValue = ta.ema(close, emaLen) plot(emaValue, color=color.yellow, linewidth=2, title="EMA 200") //----------------------------------------------------- // User Inputs //----------------------------------------------------- adxLen = input.int(14, "ADX Length", minval=1) rsiLen = input.int(14, "RSI Length", minval=1) atrLen = input.int(14, "ATR Length", minval=1) rsiBuyThresh = input.float(60, "RSI Buy Threshold", minval=1, maxval=100) adxThresh = input.float(25, "ADX Threshold (Trend)", minval=1, maxval=100) minVolume = input.float(1e6,"Minimum Volume", minval=1) minATR = input.float(2, "Minimum ATR(14)", minval=0.1, step=0.1) stopLossPerc = input.float(15, "Stop-Loss %", minval=0.1, step=0.1) // We’ll do two partial take-profit levels to aim for consistent cashflow: takeProfit1Perc = input.float(15, "Take-Profit1 %", minval=0.1, step=0.1) takeProfit2Perc = input.float(30, "Take-Profit2 %", minval=0.1, step=0.1) ddLimit = input.float(30, "Max Drawdown %", minval=0.1, step=0.1) //----------------------------------------------------- // Indicators //----------------------------------------------------- rsiValue = ta.rsi(close, rsiLen) atrValue = ta.atr(atrLen) //--- Fully Manual ADX Calculation --- upMove = high - high[1] downMove = low[1] - low plusDM = (upMove > downMove and upMove > 0) ? upMove : 0.0 minusDM = (downMove > upMove and downMove > 0) ? downMove : 0.0 smPlusDM = ta.rma(plusDM, adxLen) smMinusDM = ta.rma(minusDM, adxLen) smTR = ta.rma(ta.tr, adxLen) plusDI = (smPlusDM / smTR) * 100 minusDI = (smMinusDM / smTR) * 100 dx = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100 adxValue = ta.rma(dx, adxLen) //----------------------------------------------------- // Screener-Like Conditions (Technical Only) //----------------------------------------------------- volumeCondition = volume > minVolume adxCondition = adxValue > adxThresh rsiCondition = rsiValue > rsiBuyThresh atrCondition = atrValue > minATR aboveEmaCondition = close > emaValue longCondition = volumeCondition and adxCondition and rsiCondition and atrCondition and aboveEmaCondition //----------------------------------------------------- // Strategy Entry / Exit Logic //----------------------------------------------------- var bool inTrade = false // Entry if longCondition and not inTrade strategy.entry("Long", strategy.long) // Basic Exit Condition: RSI < 50 or Price < EMA exitCondition = (rsiValue < 50) or (close < emaValue) if inTrade and exitCondition strategy.close("Long") // Update inTrade status inTrade := strategy.position_size > 0 //----------------------------------------------------- // Multi-Level Stop-Loss & Partial Profits //----------------------------------------------------- if inTrade float entryPrice = strategy.position_avg_price // Stop-Loss float stopPrice = entryPrice * (1 - stopLossPerc / 100) // Two partial take-profit levels float tp1Price = entryPrice * (1 + takeProfit1Perc / 100) float tp2Price = entryPrice * (1 + takeProfit2Perc / 100) // Example approach: exit half at TP1, half at TP2 strategy.exit("TP1/SL", from_entry="Long", stop=stopPrice, limit=tp1Price, qty_percent=50) strategy.exit("TP2", from_entry="Long", limit=tp2Price, qty_percent=50) //----------------------------------------------------- // Dynamic Drawdown Handling //----------------------------------------------------- var float peakEquity = strategy.equity peakEquity := math.max(peakEquity, strategy.equity) currentDrawdownPerc = (peakEquity - strategy.equity) / peakEquity * 100 if currentDrawdownPerc > ddLimit strategy.close_all("Max Drawdown Exceeded") //----------------------------------------------------- // Plotting //----------------------------------------------------- plot(emaValue, title="EMA 200", color=color.yellow, linewidth=2) plotchar(rsiValue, title="RSI", char='●', location=location.bottom, color=color.new(color.teal, 50)) plot(adxValue, title="Manual ADX", color=color.orange)