
मल्टीपल मीटिंग स्विंग हंटर रणनीति एक उच्च क्वांटिटेशन रणनीति है जो विशेष रूप से कम समय सीमा के व्यापार के लिए डिज़ाइन की गई है। यह एक व्यापक अंक-आधारित स्कोरिंग प्रणाली का उपयोग करती है जो अनुकूलित तकनीकी संकेतकों, मूल्य व्यवहार विश्लेषण और रिवर्स पैटर्न पहचान को संयोजित करती है ताकि सटीक व्यापार संकेत उत्पन्न हो सकें। इस रणनीति की मुख्य नवीनता एक अद्वितीय दोहरे स्कोरिंग तंत्र की शुरुआत में है, जो एक तरफ, एक प्रवेश स्कोरिंग प्रणाली के माध्यम से स्विंग तल की पहचान करता है, और दूसरी ओर, एक आउटपुट स्कोरिंग प्रणाली के माध्यम से सबसे अच्छा बाहर निकलने का समय निर्धारित करता है। पारंपरिक रणनीतियों के विपरीत, जो सरल संकेतक क्रॉसिंग पर निर्भर हैं, यह प्रणाली बाजार को सशक्त बनाने के लिए एक भारित स्कोरिंग तंत्र का उपयोग करती है, जो निष्पक्ष डेटा-संचालित प्रवेश और निकास निर्णय प्रदान करती है।
रणनीति व्यापक रूप से अनुकूलित सूचक मापदंडों का उपयोग करती है, जिसमें विशेष रूप से कॉन्फ़िगर किए गए MACD ((3,10,3) और RSI ((21) शामिल हैं, जो मानक विन्यास की तुलना में तेजी से बाजार में बदलाव के लिए अधिक अनुकूल हैं। रणनीति में प्रवेश और निकास के लिए कम से कम 13 अंकों की उच्च स्कोर थ्रेशोल्ड की आवश्यकता होती है, यह सुनिश्चित करने के लिए कि केवल उच्च विश्वसनीयता वाले संकेत ही ट्रेडों को ट्रिगर करते हैं। रणनीति ने 200% से अधिक लाभप्रदता का प्रदर्शन किया है, जो कि बाजार में उतार-चढ़ाव के पैटर्न को पकड़ने में इसकी प्रभावशीलता को साबित करता है।
मल्टीपल मीटिंग्स के लिए एक प्रमुख रणनीति इसकी समग्र स्कोरिंग प्रणाली है, जो कई तकनीकी स्थितियों के मात्रात्मक मूल्यांकन के माध्यम से व्यापार के समय को निर्धारित करती है। प्रवेश स्कोरिंग प्रणाली में निम्नलिखित चार मुख्य घटक शामिल हैंः
आरएसआई संकेत(अधिकतम 5 अंक):
एमएसीडी संकेत(अधिकतम 8 अंक):
मूल्य व्यवहार(अधिकतम 4 अंक):
पैटर्न पहचान(अधिकतम 8 अंक):
आउटपुट स्कोरिंग सिस्टम एक समान भार प्रणाली का उपयोग करता है, लेकिन इसके विपरीत मानदंडों का उपयोग करके स्विंग टॉप की पहचान करता है। इस रणनीति के लिए कम से कम 13 अंकों के प्रवेश और आउटपुट स्कोर की आवश्यकता होती है, जो यह सुनिश्चित करता है कि केवल उच्च निश्चितता वाले सिग्नल निष्पादित किए जाएंगे, जिससे झूठे सिग्नल की संभावना कम हो जाएगी।
रणनीति का एक और महत्वपूर्ण घटक इसके अनुकूलित संकेतक पैरामीटर हैंः
इन मापदंडों को विशेष रूप से तेजी से मूल्य परिवर्तन और उच्च आवृत्ति उतार-चढ़ाव को पकड़ने के लिए अनुकूलित किया गया है।
निर्णय लेने की प्रक्रियाइस रणनीति के माध्यम से, व्यापारिक निर्णयों को भावनाओं के बजाय आंकड़ों पर आधारित किया जाता है, जिससे व्यापारिक अनुशासन में काफी वृद्धि होती है।
एकाधिक सत्यापन तंत्रइस रणनीति के लिए कई तकनीकी संकेतकों और मूल्य मॉडल की एक साथ पुष्टि की जाती है, जिससे संकेतों की विश्वसनीयता में उल्लेखनीय वृद्धि होती है। कम से कम 13 बिंदुओं के मानदंडों को पूरा करने पर ही व्यापार किया जाता है, जिससे झूठे संकेतों का जोखिम कम हो जाता है।
अनुकूलित समय संवेदनशीलता: अनुकूलित MACD ((3,10,3) और RSI ((21) पैरामीटर का उपयोग करके, रणनीति मूल्य गतिशीलता में बदलाव को पहले पकड़ने में सक्षम है, जबकि बाजार के शोर को फ़िल्टर करके बेहतर समय संवेदनशीलता प्रदान करती है।
लचीला जोखिम प्रबंधन: रणनीति में जोखिम-आधारित स्टॉप और रिटर्न लक्ष्य की गणना शामिल है, जो 5: 1 जोखिम-लाभ अनुपात को डिफ़ॉल्ट रूप से अपनाती है, जो ट्रेडिंग के लिए एक स्पष्ट जोखिम प्रबंधन ढांचा प्रदान करती है। गतिशील स्टॉप-लॉस हाल ही में उतार-चढ़ाव वाले निचले बिंदुओं पर आधारित है, जिसमें विन्यास योग्य बफर क्षेत्र हैं, जो जोखिम नियंत्रण में लचीलेपन को बढ़ाते हैं।
अत्यधिक दृश्य लेनदेन प्रणालीरणनीतिः स्कोर डिस्प्ले सिस्टम प्रदान करता है, जिसमें हरे रंग के टैग ((इनपुट स्कोर ≥10) और लाल टैग ((आउटपुट स्कोर ≥10) शामिल हैं, साथ ही साथ स्पष्ट ट्रेड इनपुट / आउटपुट मार्कर भी हैं जो व्यापारियों को सिस्टम के संचालन को स्पष्ट रूप से देखने की अनुमति देते हैं।
अत्यधिक अनुकूलनीय: हालांकि रणनीति पैरामीटर अनुकूलित हैं, वे विभिन्न बाजार स्थितियों और ट्रेडिंग किस्मों के लिए अनुकूलित किए जा सकते हैं, जिससे रणनीति को व्यापक रूप से लागू किया जा सकता है।
उच्च स्थिति जोखिम आवंटनरणनीतिः डिफ़ॉल्ट रूप से 100% फंड आवंटन का उपयोग किया जाता है, इस तरह के केंद्रीकृत निवेश से एकल ट्रेडों के लिए जोखिम की गुंजाइश बढ़ जाती है। जब बाजार में भारी उतार-चढ़ाव होता है या कोई अप्रत्याशित घटना होती है, तो इससे खाते में महत्वपूर्ण उतार-चढ़ाव हो सकता है।
बाजार की स्थिति पर निर्भरतायह रणनीति स्पष्ट रुझान और उतार-चढ़ाव वाले बाजारों में सबसे अच्छा प्रदर्शन करती है, लेकिन अत्यधिक अस्थिर, क्षैतिज बाजारों में कम प्रभावी हो सकती है। इसे विभिन्न बाजार स्थितियों में सावधानी से उपयोग करने की आवश्यकता है और पैरामीटर को समायोजित करने या व्यापार को निलंबित करने पर विचार करना चाहिए।
अनुकूलित अति-फिट जोखिम: रणनीति पैरामीटर अनुकूलित कर रहे हैं, तो वहाँ एक जोखिम है कि ऐतिहासिक डेटा overfitting हो सकता है. भविष्य में बाजार की स्थिति में परिवर्तन रणनीति के प्रदर्शन को कम कर सकते हैं के रूप में वापस परीक्षण के परिणाम. समय-समय पर फिर से सत्यापित और रणनीति की प्रभावशीलता को बनाए रखने के लिए पैरामीटर को समायोजित करना चाहिए.
विविधता संरक्षणएक एकल पोजीशन रणनीति के रूप में, विविधता सुरक्षा का अभाव विशिष्ट बाजार जोखिम को बढ़ाता है। व्यावहारिक अनुप्रयोगों में, इस रणनीति को एक व्यापक पोर्टफोलियो के हिस्से के रूप में या विविधता बढ़ाने के लिए बहु-प्रजाति व्यापार की शुरुआत करने पर विचार किया जा सकता है।
तकनीकी खराबी का खतराजटिल रेटिंग प्रणाली और कई शर्तें कुछ बाजार स्थितियों में काम नहीं कर सकती हैं, विशेष रूप से चरम बाजार स्थितियों में। अतिरिक्त जोखिम प्रबंधन उपायों को लागू करने की सिफारिश की जाती है, जैसे कि अधिकतम हानि सीमा या अस्थिरता फ़िल्टर का उपयोग करना।
अनुकूलन पैरामीटर का परिचय: वर्तमान रणनीति में निश्चित MACD और RSI पैरामीटर का उपयोग किया जाता है, बाजार की अस्थिरता या प्रवृत्ति की ताकत के आधार पर स्व-अनुकूली पैरामीटर को पेश करने पर विचार किया जा सकता है। उदाहरण के लिए, उच्च अस्थिरता वाले वातावरण में MACD पैरामीटर को स्वचालित रूप से समायोजित करना, या वर्तमान बाजार की स्थिति के आधार पर RSI ओवरसोल्ड / ओवरबॉय स्तर को समायोजित करना, विभिन्न बाजार स्थितियों में रणनीति की अनुकूलता बढ़ाने के लिए।
एकीकृत मूल्य और मात्रा विश्लेषण: वर्तमान रणनीति मुख्य रूप से मूल्य व्यवहार और गतिशीलता के संकेतकों पर आधारित है, जो संचयी लेन-देन विश्लेषण के माध्यम से संकेत की गुणवत्ता को बढ़ा सकती है। विशेष रूप से रिवर्स मोड की पुष्टि में, लेन-देन की पुष्टि अतिरिक्त विश्वसनीयता प्रदान कर सकती है। लेन-देन की मात्रा से संबंधित स्कोरिंग मानदंडों को जोड़ने पर विचार करें, जैसे लेन-देन की मात्रा में वृद्धि, लेन-देन की मात्रा में विचलन आदि।
बाज़ार परिवेश फ़िल्टर जोड़ें: बाजार की स्थिति की पहचान करने के लिए एक तंत्र को लागू करें, जो रणनीति के लिए उपयुक्त नहीं बाजार की स्थिति में स्वचालित रूप से ट्रेडिंग आवृत्ति को कम करता है या पैरामीटर को समायोजित करता है। उदाहरण के लिए, उच्च क्षैतिज बाजार में स्कोर थ्रेशोल्ड बढ़ाएं, या कम अस्थिरता वाले वातावरण में स्टॉप लॉस रेंज को कम करें।
धन प्रबंधन प्रणाली का अनुकूलनवर्तमान रणनीति 100% पोजीशन आवंटन का उपयोग करती है, जो अधिक जटिल धन प्रबंधन प्रणाली को सिग्नल की ताकत, बाजार की अस्थिरता या ऐतिहासिक प्रदर्शन के आधार पर पोजीशन आकार को गतिशील रूप से समायोजित करने की अनुमति देती है। उदाहरण के लिए, स्कोर जितना अधिक होगा उतना ही अधिक धन आवंटित किया जाएगा, या लगातार नुकसान के बाद पोजीशन आकार को कम किया जाएगा।
बहु-समय-सीमा विश्लेषण एकीकरणउदाहरण के लिए, ट्रेडों को केवल तभी निष्पादित किया जाता है जब उच्चतम समय सीमा की प्रवृत्ति की दिशा एकजुट हो, या मुख्य प्रवृत्ति के अनुरूप ट्रेडों को अधिक अंक आवंटित किए जाते हैं।
मशीन लर्निंग अनुकूलन: मशीन लर्निंग विधियों का उपयोग करके स्कोर भार और थ्रेशोल्ड को अनुकूलित करने पर विचार करें। ऐतिहासिक डेटा का विश्लेषण करके, यह निर्धारित किया जा सकता है कि विशिष्ट बाजार की स्थिति में कौन से सिग्नल संयोजन सबसे प्रभावी हैं, और स्कोर सिस्टम को तदनुसार समायोजित करें।
मल्टीपल मीटिंग स्विंग हंटर्स रणनीति एक व्यापक, व्यवस्थित, कम समय-सीमा ट्रेडिंग पद्धति का प्रतिनिधित्व करती है जो कई तकनीकी विश्लेषण संकेतकों और मूल्य व्यवहार विशेषताओं को एकीकृत करके एक डेटा-संचालित ट्रेडिंग निर्णय प्रणाली बनाती है। इस रणनीति का मुख्य लाभ इसकी वस्तुनिष्ठ बहु-मानक रेटिंग पद्धति में है, जो भावनात्मक निर्णय को प्रभावी रूप से समाप्त करती है, जबकि विभिन्न प्रकार के व्यापार और बाजार की परिस्थितियों के लिए पर्याप्त लचीलापन बनाए रखती है।
रणनीति के अनुकूलित MACD ((3,10,3) और RSI ((21)) मापदंडों के माध्यम से, सख्त प्रवेश और निकास की शर्तों के साथ, बाजार में उतार-चढ़ाव को प्रभावी ढंग से पकड़ने में सक्षम है, विशेष रूप से उच्च अस्थिरता वाले बाजारों में। अंतर्निहित जोखिम प्रबंधन सुविधाओं और दृश्यता उपकरण ने रणनीति की व्यावहारिकता और उपयोगकर्ता-अनुकूलता को और बढ़ा दिया है।
हालांकि, रणनीतियों में कुछ सीमाएं और जोखिम भी हैं, जिनमें उच्च स्थिति आवंटन, बाजार की स्थिति पर निर्भरता और अनुकूलित अति-फिट की संभावना शामिल है। अनुशंसित अनुकूलन दिशाओं को लागू करके, जैसे कि आत्म-अनुकूलन मापदंडों को पेश करना, मात्रा-मूल्य संबंध विश्लेषण को एकीकृत करना, बाजार की स्थिति फ़िल्टर को जोड़ना आदि। रणनीति की स्थिरता और अनुकूलनशीलता को और बढ़ाया जा सकता है।
अनुभवी व्यापारियों के लिए, मल्टीपल मीटिंग स्विंग हंटर्स रणनीति एक शक्तिशाली ढांचा प्रदान करती है जिसका उपयोग ट्रेंड कैप्चर और स्विंग ट्रेडिंग के लिए कम समय सीमा के लिए किया जा सकता है। इसके मुख्य सिद्धांतों को समझने और विशिष्ट आवश्यकताओं के अनुसार समायोजन करके, व्यापारी इस रणनीति का उपयोग तेजी से बदलते बाजारों में उच्च-संभाव्यता वाले व्यापारिक अवसरों की तलाश करने के लिए कर सकते हैं। यह ध्यान देने योग्य है कि किसी भी व्यापारिक रणनीति को सख्त जोखिम प्रबंधन और निरंतर निगरानी मूल्यांकन की आवश्यकता होती है ताकि दीर्घकालिक व्यापार सफलता सुनिश्चित हो सके।
/*backtest
start: 2024-06-30 00:00:00
end: 2025-06-28 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":50000000}]
*/
// ____ _ _______ _ _ _____
// / __ \ | | |__ __| | (_) | __ \
// | | | |_ _ __ _ _ __ | |_ | |_ __ __ _ __| |_ _ __ __ _ | |__) |
// | | | | | | |/ _` | '_ \| __| | | '__/ _` |/ _` | | '_ \ / _` | | ___/ '__/ _ \
// | |__| | |_| | (_| | | | | |_ | | | | (_| | (_| | | | | | (_| | | | | | | (_) |
// \___\_\\__,_|\__,_|_| |_|\__| |_|_| \__,_|\__,_|_|_| |_|\__, | |_| |_| \___/
// __/ |
// |___/
// Quant Trading Pro
//@version=6
strategy("Multi-Confluence Swing Hunter V1", overlay=true,
default_qty_type=strategy.percent_of_equity, default_qty_value=100,
commission_type=strategy.commission.percent, commission_value=0.1,
slippage=3, initial_capital=1000, margin_long=0, margin_short=0)
// === DESCRIPTION ===
// High-conviction swing bottom entry strategy using optimized MACD(3,10,3) and RSI(21)
// Entry: Point-based scoring system for swing bottoms (divergences, momentum, price action)
// Exit: Inverse scoring system for swing tops (no stop-loss, exit only on swing top signals)
// Position: Single position with 100% allocation, scores displayed only when ≥10 points
// Based on analysis showing 23.7% improvement over standard parameters
// === INPUT PARAMETERS ===
// Optimized Indicator Settings
macdFast = input.int(3, "MACD Fast Length", minval=1, maxval=50, group="Optimized Indicators")
macdSlow = input.int(10, "MACD Slow Length", minval=1, maxval=100, group="Optimized Indicators")
macdSignal = input.int(3, "MACD Signal Length", minval=1, maxval=50, group="Optimized Indicators")
rsiLength = input.int(21, "RSI Length", minval=2, maxval=100, group="Optimized Indicators")
// Entry Settings - Swing Bottom Scoring
minEntryScore = input.int(13, "Minimum Entry Score", minval=5, maxval=20, group="Entry Settings")
showEntryScores = input.bool(true, "Show Entry Scores (Above 10)", group="Entry Settings")
// Exit Settings - Swing Top Scoring (Inverse of Entry Criteria)
minExitScore = input.int(13, "Minimum Exit Score", minval=5, maxval=20, group="Exit Settings")
showExitScores = input.bool(true, "Show Exit Scores (Above 10)", group="Exit Settings")
// Price Action Settings
minLowerWickPercent = input.float(50.0, "Min Lower Wick %", minval=10.0, maxval=90.0, step=5.0, group="Price Action")
quickRecoveryPercent = input.float(0.3, "Quick Recovery %", minval=0.1, maxval=2.0, step=0.1, group="Price Action")
quickRecoveryBars = input.int(3, "Quick Recovery Bars", minval=1, maxval=10, group="Price Action")
// RSI Levels
rsiOversold = input.float(30.0, "RSI Oversold Level", minval=10.0, maxval=50.0, step=1.0, group="RSI Settings")
rsiExtremeOversold = input.float(25.0, "RSI Extreme Oversold", minval=10.0, maxval=40.0, step=1.0, group="RSI Settings")
rsiOverbought = input.float(70.0, "RSI Overbought Level", minval=50.0, maxval=90.0, step=1.0, group="RSI Settings")
rsiExtremeOverbought = input.float(75.0, "RSI Extreme Overbought", minval=60.0, maxval=90.0, step=1.0, group="RSI Settings")
// Reversal Signals Settings
reversalLookback = input.int(12, "Reversal Candle Lookback", minval=5, maxval=50, group="Reversal Signals")
reversalConfirm = input.int(3, "Reversal Confirm Within", minval=1, maxval=10, group="Reversal Signals")
useVolumeConfirmation = input.bool(false, "Use Volume Confirmation", group="Reversal Signals")
// Trade Management
allowShortTrades = input.bool(false, "Allow Short Trades?", group="Short Trades")
// Risk/Reward TP/SL Settings
useRiskReward = input.bool(true, "Use Risk/Reward TP/SL", group="Risk Management")
riskRewardRatio = input.float(5, "Risk/Reward Ratio", minval=1.0, maxval=5.0, step=0.1, group="Risk Management")
stopLossLookback = input.int(10, "Stop Loss Lookback Bars", minval=3, maxval=50, group="Risk Management")
stopLossBuffer = input.float(0.15, "Stop Loss Buffer %", minval=0.05, maxval=1.0, step=0.05, group="Risk Management")
// Advanced Settings
maxLookbackBars = input.int(8, "Divergence Lookback Bars", minval=3, maxval=20, group="Advanced")
// === 1️⃣ CALCULATIONS ===
// Optimized MACD Calculation
[macdLine, signalLine, macdHist] = ta.macd(close, macdFast, macdSlow, macdSignal)
// Optimized RSI Calculation
rsi = ta.rsi(close, rsiLength)
// Price Action Calculations
bodySize = math.abs(close - open)
lowerWick = math.min(open, close) - low
upperWick = high - math.max(open, close)
totalRange = high - low
lowerWickPercent = totalRange > 0 ? (lowerWick / totalRange) * 100 : 0
upperWickPercent = totalRange > 0 ? (upperWick / totalRange) * 100 : 0
bodyPercent = totalRange > 0 ? (bodySize / totalRange) * 100 : 0
// Reversal Signals Calculation
var int bullCandleScore = 0
var int bearCandleScore = 0
var bool bullReversalCandidate = false
var bool bearReversalCandidate = false
var float bullReversalLow = 0.0
var float bullReversalHigh = 0.0
var float bearReversalLow = 0.0
var float bearReversalHigh = 0.0
var bool bullSignalConfirmed = false
var bool bearSignalConfirmed = false
var int bullCandleCounter = 0
var int bearCandleCounter = 0
volumeIsHigh = volume > ta.sma(volume, 20)
// Reset scores
bullCandleScore := 0
bearCandleScore := 0
// Calculate reversal scores
if bar_index >= reversalLookback
for i = 0 to (reversalLookback - 1)
if close < low[i]
bullCandleScore += 1
if close > high[i]
bearCandleScore += 1
// Bear signal setup
if bearCandleScore == (reversalLookback - 1)
bearReversalCandidate := true
bearReversalLow := low
bearReversalHigh := high
bearSignalConfirmed := false
bearCandleCounter := 0
if bearReversalCandidate
bearCandleCounter += 1
if close > bearReversalHigh
bearReversalCandidate := false
bearCondition = bearReversalCandidate and close < bearReversalLow and not bearSignalConfirmed and bearCandleCounter <= (reversalConfirm + 1)
bearSignal = false
if bearCondition
bearSignalConfirmed := true
if not useVolumeConfirmation or volumeIsHigh
bearSignal := true
// Bull signal setup
if bullCandleScore == (reversalLookback - 1)
bullReversalCandidate := true
bullReversalLow := low
bullReversalHigh := high
bullSignalConfirmed := false
bullCandleCounter := 0
if bullReversalCandidate
bullCandleCounter += 1
if close < bullReversalLow
bullReversalCandidate := false
bullCondition = bullReversalCandidate and close > bullReversalHigh and not bullSignalConfirmed and bullCandleCounter <= (reversalConfirm + 1)
bullSignal = false
if bullCondition
bullSignalConfirmed := true
if not useVolumeConfirmation or volumeIsHigh
bullSignal := true
// === 2️⃣ ENTRY & EXIT LOGIC ===
// Helper Functions for Divergence Detection
findLowerLow(lookback) =>
var float lowestPrice = na
var int lowestIndex = na
if bar_index >= lookback
lowestPrice := low
lowestIndex := bar_index
for i = 1 to lookback
if low[i] < lowestPrice
lowestPrice := low[i]
lowestIndex := bar_index - i
[lowestPrice, lowestIndex]
findHigherHigh(lookback) =>
var float highestPrice = na
var int highestIndex = na
if bar_index >= lookback
highestPrice := high
highestIndex := bar_index
for i = 1 to lookback
if high[i] > highestPrice
highestPrice := high[i]
highestIndex := bar_index - i
[highestPrice, highestIndex]
// SWING BOTTOM SCORING SYSTEM
// 1. RSI Signals
rsiOversoldSignal = rsi < rsiOversold
rsiExtremeOversoldSignal = rsi < rsiExtremeOversold
rsiTurningUp = rsi > rsi[1]
// RSI Bullish Divergence
[prevLowPrice, prevLowIndex] = findLowerLow(maxLookbackBars)
rsiBullishDivergence = false
if not na(prevLowPrice) and not na(prevLowIndex) and bar_index > prevLowIndex
prevRSI = rsi[bar_index - prevLowIndex]
if low < prevLowPrice and rsi > prevRSI and not na(prevRSI)
rsiBullishDivergence := true
// 2. MACD Signals
macdNegative = macdLine < 0
macdTurningUp = macdLine > macdLine[1]
macdHistImproving = macdHist > macdHist[1]
// MACD Bullish Divergence
macdBullishDivergence = false
if not na(prevLowPrice) and not na(prevLowIndex) and bar_index > prevLowIndex
prevMACD = macdLine[bar_index - prevLowIndex]
if low < prevLowPrice and macdLine > prevMACD and not na(prevMACD)
macdBullishDivergence := true
// 3. Price Action Signals
longLowerWick = lowerWickPercent > minLowerWickPercent
smallBody = bodyPercent < 30.0
bullishClose = close > open
// 4. Quick Recovery Check
quickRecovery = false
if bar_index >= quickRecoveryBars
recoveryTarget = close * (1 + quickRecoveryPercent / 100)
for i = 1 to quickRecoveryBars
if high[i] > recoveryTarget
quickRecovery := true
break
// ENTRY SCORE CALCULATION
entryScore = 0
entryScore := entryScore + (rsiOversoldSignal ? 2 : 0)
entryScore := entryScore + (rsiExtremeOversoldSignal ? 2 : 0)
entryScore := entryScore + (rsiBullishDivergence ? 4 : 0)
entryScore := entryScore + (rsiTurningUp ? 1 : 0)
entryScore := entryScore + (macdNegative ? 1 : 0)
entryScore := entryScore + (macdTurningUp ? 2 : 0)
entryScore := entryScore + (macdHistImproving ? 2 : 0)
entryScore := entryScore + (macdBullishDivergence ? 3 : 0)
entryScore := entryScore + (longLowerWick ? 2 : 0)
entryScore := entryScore + (smallBody ? 1 : 0)
entryScore := entryScore + (bullishClose ? 1 : 0)
entryScore := entryScore + (quickRecovery ? 2 : 0)
entryScore := entryScore + (bullSignal ? 4 : 0) // Green reversal signal +4
// SWING TOP SCORING SYSTEM (for exits)
// 1. RSI Exit Signals
rsiOverboughtSignal = rsi > rsiOverbought
rsiExtremeOverboughtSignal = rsi > rsiExtremeOverbought
rsiTurningDown = rsi < rsi[1]
// RSI Bearish Divergence
[prevHighPrice, prevHighIndex] = findHigherHigh(maxLookbackBars)
rsiBearishDivergence = false
if not na(prevHighPrice) and not na(prevHighIndex) and bar_index > prevHighIndex
prevRSIHigh = rsi[bar_index - prevHighIndex]
if high > prevHighPrice and rsi < prevRSIHigh and not na(prevRSIHigh)
rsiBearishDivergence := true
// 2. MACD Exit Signals
macdPositive = macdLine > 0
macdTurningDown = macdLine < macdLine[1]
macdHistDeclining = macdHist < macdHist[1]
// MACD Bearish Divergence
macdBearishDivergence = false
if not na(prevHighPrice) and not na(prevHighIndex) and bar_index > prevHighIndex
prevMACDHigh = macdLine[bar_index - prevHighIndex]
if high > prevHighPrice and macdLine < prevMACDHigh and not na(prevMACDHigh)
macdBearishDivergence := true
// 3. Price Action Exit Signals
longUpperWick = upperWickPercent > minLowerWickPercent
bearishClose = close < open
// EXIT SCORE CALCULATION
exitScore = 0
exitScore := exitScore + (rsiOverboughtSignal ? 2 : 0)
exitScore := exitScore + (rsiExtremeOverboughtSignal ? 2 : 0)
exitScore := exitScore + (rsiBearishDivergence ? 4 : 0)
exitScore := exitScore + (rsiTurningDown ? 1 : 0)
exitScore := exitScore + (macdPositive ? 1 : 0)
exitScore := exitScore + (macdTurningDown ? 2 : 0)
exitScore := exitScore + (macdHistDeclining ? 2 : 0)
exitScore := exitScore + (macdBearishDivergence ? 3 : 0)
exitScore := exitScore + (longUpperWick ? 2 : 0)
exitScore := exitScore + (bearishClose ? 1 : 0)
exitScore := exitScore + (bearSignal ? 1 : 0) // Red reversal signal +1
// SIGNAL CONDITIONS
longCondition = entryScore >= minEntryScore and barstate.isconfirmed
exitCondition = exitScore >= minExitScore and barstate.isconfirmed
// === TP/SL LEVELS (Clean Logic) ===
var float stopLossLevel = na
var float takeProfitLevel = na
var bool tpslSet = false
// Clear levels when no position
if strategy.position_size == 0
stopLossLevel := na
takeProfitLevel := na
tpslSet := false
// Calculate TP/SL levels ONCE when position is opened
if strategy.position_size > 0 and strategy.position_size[1] == 0 and useRiskReward and not tpslSet
// Find recent low for stop loss
recentLow = low
for i = 1 to stopLossLookback
if low[i] < recentLow
recentLow := low[i]
// Set levels using actual entry price
entryPrice = strategy.opentrades.entry_price(0)
stopLossLevel := recentLow * (1 - stopLossBuffer / 100) // Configurable buffer below recent low
riskAmount = entryPrice - stopLossLevel
takeProfitLevel := entryPrice + (riskAmount * riskRewardRatio)
tpslSet := true
// === 3️⃣ TRADE EXECUTIONS ===
// Long Entry - Single Position Only
if longCondition and strategy.position_size == 0
strategy.entry("Long", strategy.long, comment="Entry Score: " + str.tostring(entryScore))
// Set TP/SL ONLY ONCE per trade (when levels are calculated and not yet set)
if strategy.position_size > 0 and useRiskReward and tpslSet and not na(stopLossLevel) and not na(takeProfitLevel)
strategy.exit("TP/SL", "Long", stop=stopLossLevel, limit=takeProfitLevel)
// Long Exit - Close Position on Swing Top Signal (Only when NOT using TP/SL)
if exitCondition and strategy.position_size > 0 and not useRiskReward
strategy.close("Long", comment="Exit Score: " + str.tostring(exitScore))
// === 4️⃣ VISUALIZATIONS ===
// Entry Score Display (Only When Score ≥ 10) - Shows on ALL qualifying bars
if showEntryScores and entryScore >= 10 and barstate.isconfirmed
label.new(bar_index, low,
text=str.tostring(entryScore),
yloc=yloc.belowbar,
color=na,
style=label.style_label_up,
textcolor=color.green,
size=size.small)
// Exit Score Display (Only When Score ≥ 10) - Shows on ALL qualifying bars
if showExitScores and exitScore >= 10 and barstate.isconfirmed
label.new(bar_index, high,
text=str.tostring(exitScore),
yloc=yloc.abovebar,
color=na,
style=label.style_label_down,
textcolor=color.red,
size=size.small)
// Large Trade Entry Triangle (Only when actually entering a position) - Using plotshape to avoid label limits
plotshape(longCondition and strategy.position_size == 0, title="Trade Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.normal, text="BUY")
// Large Trade Exit Triangle (Only when actually exiting a position) - Using plotshape to avoid label limits
plotshape(exitCondition and strategy.position_size > 0, title="Trade Exit", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.normal, text="SELL")
// Reversal Signal Triangles
plotshape(bullSignal, title="Bull Reversal", location=location.belowbar,
color=color.lime, style=shape.triangleup, size=size.tiny)
plotshape(bearSignal, title="Bear Reversal", location=location.abovebar,
color=color.red, style=shape.triangledown, size=size.tiny)
// === TP/SL LEVEL PLOTS ===
plot(strategy.position_size > 0 and useRiskReward ? stopLossLevel : na, title="Stop Loss", color=color.red, linewidth=2, style=plot.style_linebr)
plot(strategy.position_size > 0 and useRiskReward ? takeProfitLevel : na, title="Take Profit", color=color.green, linewidth=2, style=plot.style_linebr)
// MACD and RSI Plots (in separate panes)
macdPlot = plot(macdLine, title="MACD Line", color=color.blue, display=display.none)
signalPlot = plot(signalLine, title="Signal Line", color=color.red, display=display.none)
histPlot = plot(macdHist, title="MACD Histogram", color=color.gray, style=plot.style_histogram, display=display.none)
rsiPlot = plot(rsi, title="RSI", color=color.purple, display=display.none)
rsiOverboughtLine = hline(rsiOverbought, title="RSI Overbought", color=color.red, linestyle=hline.style_dashed, display=display.none)
rsiOversoldLine = hline(rsiOversold, title="RSI Oversold", color=color.green, linestyle=hline.style_dashed, display=display.none)