यह रणनीति एक लंबी-लघु ट्रेडिंग प्रणाली है जो सरल चलती औसत (एसएमए) क्रॉसओवर संकेतों को पीक ड्रॉडाउन नियंत्रण के साथ जोड़ती है। यह रणनीति के पीक ड्रॉडाउन की निगरानी करते हुए एक साथ लंबी और छोटी ट्रेडिंग संकेत उत्पन्न करने के लिए 14-अवधि और 28-अवधि एसएमए के क्रॉसओवर का उपयोग करती है। जब ड्रॉडाउन एक पूर्व निर्धारित सीमा से अधिक हो जाता है, तो रणनीति स्वचालित रूप से व्यापार बंद कर देती है। इसके अलावा, रणनीति में व्यापारियों को रणनीति की जोखिम विशेषताओं को बेहतर ढंग से समझने में मदद करने के लिए एक विस्तृत पीक-टू-ट्रॉथ चक्र विश्लेषण सुविधा शामिल है।
ट्रेड सिग्नल जनरेशनः
पीक ड्रॉडाउन नियंत्रणः
पीक-टू-थ्रू चक्र विश्लेषणः
ट्रेंड फॉलो करने और जोखिम नियंत्रण को जोड़ती हैः एसएमए क्रॉसओवर रणनीति एक क्लासिक ट्रेंड फॉलो करने वाली विधि है, जबकि पीक ड्रॉडाउन कंट्रोल जोखिम प्रबंधन की एक अतिरिक्त परत प्रदान करता है। यह संयोजन बाजार के रुझानों को पकड़ते हुए डाउनसाइड जोखिम को प्रभावी ढंग से नियंत्रित कर सकता है।
उच्च अनुकूलन क्षमताः अधिकतम निकासी और न्यूनतम निकासी सीमाओं को पैरामीटर करके, रणनीति को विभिन्न बाजार वातावरण और व्यक्तिगत जोखिम वरीयताओं के लिए लचीलापन से समायोजित किया जा सकता है।
पारदर्शी जोखिम संकेतक: पीक-टू-डिफॉल्ट चक्र विश्लेषण विस्तृत ऐतिहासिक ड्रॉडाउन जानकारी प्रदान करता है, जिससे व्यापारियों को रणनीति की जोखिम विशेषताओं को सहज रूप से समझने की अनुमति मिलती है, जिससे अधिक सूचित व्यापारिक निर्णयों में सहायता मिलती है।
स्वचालित जोखिम नियंत्रण: जब ड्रॉडाउन पूर्व निर्धारित सीमा से अधिक हो जाता है, तो रणनीति स्वचालित रूप से व्यापार बंद कर देती है। यह तंत्र प्रतिकूल बाजार स्थितियों में लगातार नुकसान को प्रभावी ढंग से रोक सकता है।
व्यापक प्रदर्शन विश्लेषणः पारंपरिक बैकटेस्टिंग मीट्रिक के अलावा, रणनीति में शिखर से निम्नतम चक्र के विस्तृत डेटा, जिसमें रन-अप प्रतिशत, ड्रॉडाउन प्रतिशत और समय की जानकारी शामिल है, जो रणनीति के प्रदर्शन का गहन विश्लेषण करने में सुविधा प्रदान करता है।
ऐतिहासिक आंकड़ों पर अति निर्भरता: एसएमए क्रॉसओवर रणनीति ऐतिहासिक मूल्य डेटा पर आधारित है और तेजी से बदलते बाजारों में धीमी गति से प्रतिक्रिया कर सकती है, जिससे झूठे संकेत मिल सकते हैं।
बार-बार व्यापार करना: अस्थिर बाजारों में, एसएमए अक्सर पार हो सकते हैं, जिसके परिणामस्वरूप अत्यधिक व्यापार और उच्च लेनदेन लागत हो सकती है।
बड़ी मात्रा में निकासी की संभावनाः अधिकतम ड्रॉडाउन नियंत्रण के बावजूद, गंभीर बाजार अस्थिरता के दौरान एक बड़ी गिरावट के बाद भी महत्वपूर्ण नुकसान हो सकते हैं।
पैरामीटर संवेदनशीलताः रणनीति का प्रदर्शन एसएमए अवधि और ड्रॉडाउन सीमाओं की पसंद पर बहुत निर्भर करता है। अनुचित पैरामीटर सेटिंग्स से अपर्याप्त परिणाम हो सकते हैं।
खोए हुए अवसर: जब अधिकतम निकासी सीमा तक पहुँचने के बाद व्यापार बंद हो जाता है, तो रणनीति बाजार में उलटफेर के अवसरों को याद कर सकती है।
गतिशील पैरामीटर समायोजन का परिचय देंः बाजार की अस्थिरता के आधार पर विभिन्न बाजार वातावरणों के अनुकूल होने के लिए एसएमए अवधि और ड्रॉडाउन सीमाओं को गतिशील रूप से समायोजित करने पर विचार करें।
अतिरिक्त बाजार फ़िल्टरः संभावित झूठे संकेतों को फ़िल्टर करने के लिए अन्य तकनीकी संकेतकों या मौलिक कारकों, जैसे कि आरएसआई या वॉल्यूम को शामिल करें।
चरणबद्ध प्रवेश और निकास लागू करें: सभी या कुछ भी नहीं संचालन के बजाय, एकल निर्णयों के जोखिम को कम करने के लिए चरणबद्ध स्थिति निर्माण और समापन लागू करें।
लाभ लेने की व्यवस्था जोड़ें: ड्रॉडाउन कंट्रोल के ऊपर, लाभ को लॉक करने और समग्र रिटर्न में सुधार करने के लिए एक गतिशील लाभ लेने का कार्य जोड़ें।
धन प्रबंधन का अनुकूलन करें: जोखिम नियंत्रण में सुधार के लिए खाते के आकार और बाजार की अस्थिरता के आधार पर गतिशील स्थिति आकार लागू करें।
मशीन लर्निंग एल्गोरिदम पेश करें: पैरामीटर चयन और सिग्नल जनरेशन प्रक्रियाओं को अनुकूलित करने के लिए मशीन लर्निंग तकनीकों का उपयोग करना, रणनीति अनुकूलन और सटीकता में सुधार करना।
एसएमए क्रॉसओवर लंबी-लघु रणनीति पीक ड्रॉडाउन नियंत्रण और ऑटो-टर्मिनेशन के साथ संयुक्त एक मात्रात्मक ट्रेडिंग प्रणाली है जो प्रवृत्ति के बाद और जोखिम प्रबंधन को संतुलित करती है। यह पीक ड्रॉडाउन नियंत्रण का उपयोग करके डाउनसाइड जोखिम का प्रबंधन करते हुए सरल चलती औसत क्रॉसओवर के माध्यम से बाजार के रुझानों को पकड़ती है। रणनीति की अनूठी विशेषता इसके विस्तृत पीक-टू-ट्रॉथ चक्र विश्लेषण में निहित है, जो व्यापारियों को रणनीति की जोखिम विशेषताओं को गहराई से समझने के लिए एक उपकरण प्रदान करती है।
जबकि रणनीति में कुछ अंतर्निहित जोखिम हैं, जैसे कि ऐतिहासिक डेटा और पैरामीटर संवेदनशीलता पर अत्यधिक निर्भरता, यह उचित अनुकूलन और सुधारों के माध्यम से अपनी मजबूती और लाभप्रदता में काफी सुधार कर सकती है। इनमें गतिशील पैरामीटर समायोजन, अतिरिक्त बाजार फिल्टर जोड़ना और स्मार्ट धन प्रबंधन को लागू करना शामिल है।
कुल मिलाकर, यह रणनीति व्यापारियों को एक अच्छा प्रारंभिक बिंदु प्रदान करती है जिसे व्यक्तिगत व्यापारिक लक्ष्यों और जोखिम वरीयताओं को पूरा करने के लिए और अधिक अनुकूलित और अनुकूलित किया जा सकता है। रणनीति का मॉड्यूलर डिज़ाइन अन्य व्यापारिक रणनीतियों या जोखिम प्रबंधन तकनीकों के साथ एकीकृत करने में भी आसान बनाता है, अधिक जटिल और व्यापक व्यापारिक प्रणालियों के निर्माण की नींव रखता है।
/*backtest start: 2023-07-23 00:00:00 end: 2024-07-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ capital = 10000 //@version=5 strategy(title = "Correct Strategy Peak-Drawdown Cycles [Tradingwhale]", shorttitle = "Peak-Draw [Tradingwhale]", initial_capital = capital, overlay=true, margin_long=100, margin_short=100) // The code below is from Tradingwhale LLC /// ============================================================================== // Peak-Trough Cycles with Date and Prev. RunUp // Initialize variables showTable = input.bool(true, title = "Plot Peak to Bottom Drawdown Cycles table?") min_trough = input.float(3.0, title = "Define Minimum Drawdown/Trough to Display (%)", minval = 1, maxval = 100, step = 0.5, tooltip = "Peaks and Trough Cycles have to be roped in by either a lookback period or minmimum troughs to show. If you don't then every bar could be a peak or trough/bottom. I've decided to use minimum declines here because lookback seems more arbitrary.") maxdraw = input.float(40.0, title = "Max Drawdown", minval = 1, maxval = 100, step = 0.5, tooltip = "Define the drawdown level where the srtategy stops executing trades.") var float equityPeak = na var float equityTrough = na var int cycleCount = 0 var bool inDrawdown = false var float initialCapital = capital var float prevTrough = initialCapital var float prevRunUp = na var bool useLighterGray = true var int lastYear = na // Variable to indicate whether the strategy should end var bool end_strategy = false // Table to display data var table resultTable = table.new(position.top_right, 5, 30, bgcolor=#ffffff00, frame_color=#4f4040, frame_width=1) // Function to convert float to percentage string f_to_percent(value) => str.tostring(value, "#.##") + "%" // Function to get month/year string without commas get_month_year_string() => str.tostring(year) + "/" + str.tostring(month) // Update the table headers if (bar_index == 0 and showTable) table.cell(resultTable, 0, 0, "Show Min Trough: " + f_to_percent(min_trough), bgcolor=#a8a8a88f, text_size=size.normal) table.cell(resultTable, 1, 0, "Cycle Count", bgcolor=#a8a8a88f, text_size=size.normal) table.cell(resultTable, 2, 0, "Prev.RunUp(%)", bgcolor=#a8a8a88f, text_size=size.normal) table.cell(resultTable, 3, 0, "Drawdown(%)", bgcolor=#a8a8a88f, text_size=size.normal) table.cell(resultTable, 4, 0, "Year/Month", bgcolor=#a8a8a88f, text_size=size.normal) // Track peaks and troughs in equity if (na(equityPeak) or strategy.equity > equityPeak) if (inDrawdown and strategy.equity > equityPeak and not na(equityTrough)) // Confirm end of drawdown cycle drawdownPercentage = (equityPeak - equityTrough) / equityPeak * 100 if drawdownPercentage > min_trough cycleCount += 1 prevRunUp := (equityPeak - prevTrough) / prevTrough * 100 if cycleCount <= 20 and showTable currentYear = year if na(lastYear) or currentYear != lastYear useLighterGray := not useLighterGray lastYear := currentYear rowColor = useLighterGray ? color.new(color.gray, 80) : color.new(color.gray, 50) table.cell(resultTable, 1, cycleCount, str.tostring(cycleCount), bgcolor=rowColor, text_size=size.normal) table.cell(resultTable, 2, cycleCount, f_to_percent(prevRunUp), bgcolor=rowColor, text_size=size.normal) table.cell(resultTable, 3, cycleCount, f_to_percent(drawdownPercentage), bgcolor=rowColor, text_size=size.normal) table.cell(resultTable, 4, cycleCount, get_month_year_string(), bgcolor=rowColor, text_size=size.normal) prevTrough := equityTrough equityPeak := strategy.equity equityTrough := na inDrawdown := false else if (strategy.equity < equityPeak) equityTrough := na(equityTrough) ? strategy.equity : math.min(equityTrough, strategy.equity) inDrawdown := true // Calculate if the strategy should end if not na(equityPeak) and not na(equityTrough) drawdownPercentage = (equityPeak - equityTrough) / equityPeak * 100 if drawdownPercentage >= maxdraw end_strategy := true // This code below is from Tradingview, but with additions where commented (see below) longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28)) if (longCondition) and not end_strategy // Add 'and not end_strategy' to your order conditions to automatically end the strategy if max_draw is exceeded/ strategy.entry("My Long Entry Id", strategy.long) shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28)) if (shortCondition) and not end_strategy // Add 'and not end_strategy' to your order conditions to automatically end the strategy if max_draw is exceeded/ strategy.entry("My Short Entry Id", strategy.short)