सटीक ट्रेंड ब्रेकआउट ट्रेडिंग रणनीति ट्रेंड के संकेतकों और विशिष्ट कैंडलस्टिक पैटर्न का उपयोग ट्रेंड ब्रेकआउट को सटीक रूप से पकड़ने के लिए करती है। यह ट्रेंड की दिशा निर्धारित करने के लिए मूविंग एवरेज, ओवरबॉट और ओवरसोल्ड स्तरों को मापने के लिए आरएसआई और ब्रेकआउट प्रवेश बिंदुओं को निर्धारित करने के लिए उन्नत कैंडलस्टिक पैटर्न को जोड़ती है, जो ओवरसाइज्ड लाभ के लिए उपयुक्त क्षणों में ब्रेकआउट ट्रेडिंग के लिए सटीक ट्रेंड पहचान को सक्षम करती है।
प्रवृत्ति की दिशा को परिभाषित करने के लिए 8-अवधि ईएमए और 80-अवधि ईएमए का उपयोग करें। 80-अवधि ईएमए से ऊपर 8-अवधि ईएमए अपट्रेंड को इंगित करता है, और इसके विपरीत डाउनट्रेंड के लिए। ट्रेड संकेतों पर केवल तब विचार करें जब प्रवृत्ति की दिशा सहमत हो।
विशिष्ट 3-कैंडल गठन को परिभाषित करें जहां कैंडल 1 कम < कैंडल 2 कम और कैंडल 3 कम < कैंडल 2 कम। यह पैटर्न अपट्रेंड में लंबी प्रविष्टि और डाउनट्रेंड में छोटी प्रविष्टि का संकेत देता है।
तीसरी मोमबत्ती पिछले मोमबत्ती की सीमा के भीतर बंद मूल्य के साथ अंदर पट्टी के साथ गठन इष्टतम प्रवेश बिंदु का संकेत देता है। 123 पैटर्न के साथ अंदर पट्टी तत्काल व्यापार आदेश की जगह ट्रिगर करता है।
तीसरी मोमबत्ती के उच्च स्तर पर लंबा और तीसरी मोमबत्ती के निम्न स्तर पर छोटा प्रवेश करें। मोमबत्ती 2 के निम्न स्तर (लंबी प्रविष्टि) या मोमबत्ती 2 के उच्च स्तर (लघु प्रविष्टि) पर स्टॉप लॉस सेट करें। 2x जोखिम पर लाभ लें।
जब प्रवृत्ति, पैटर्न, संकेतक उच्च संभावना व्यापार के लिए सहमत हों तो ब्रेकआउट ऑर्डर रखें। मजबूत ब्रेकआउट दृष्टिकोण के लिए लाभ में लॉक करने के लिए स्टॉप लॉस और ले लाभ सेट करें।
इस रणनीति के निम्नलिखित प्रमुख फायदे हैंः
दोहरे ईएमए प्रवृत्ति के विरुद्ध व्यापार से बचने के लिए समग्र प्रवृत्ति दिशा को परिभाषित करते हैं।
मोमबत्तियों के पैटर्न उच्च-संभाव्यता ब्रेकआउट संरचनाओं के लिए स्क्रीन करते हैं।
प्रवृत्ति, पैटर्न, संकेतकों में आम सहमति संकेत की गुणवत्ता सुनिश्चित करती है।
अंदर की पट्टी सिग्नल की विश्वसनीयता को बढ़ाती है और प्रवेश समय को और सुरक्षित करती है।
पूर्व निर्धारित स्टॉप लॉस और टेक प्रॉफिट व्यक्तिगत ट्रेडिंग जोखिम का प्रबंधन करता है।
बैकटेस्ट सांख्यिकीय बढ़त के लिए 65% से अधिक जीत दर को मान्य करते हैं।
संक्षेप में, रणनीति सटीक ब्रेकआउट समय के लिए व्यापक रुझान, पैटर्न और संकेतक विश्लेषण का लाभ उठाती है, जिससे स्थिर जोखिम-लाभ बढ़त मिलती है।
मुख्य जोखिम निम्नलिखित से उत्पन्न होते हैंः
अस्थिर परिस्थितियों में झूठे संकेत उत्पन्न करने वाले गलत रुझान कॉल। अतिरिक्त रुझान मेट्रिक्स पुष्टि में सुधार कर सकते हैं।
स्थैतिक स्टॉप लॉस/टेक प्रॉफिट हर मूल्य उतार-चढ़ाव में पूरी तरह से फिट नहीं होता है। अनुकूलन क्षेत्र बेहतर हो सकते हैं।
मोमबत्ती के पैटर्न की पहचान पैरामीटर ट्यूनिंग पर निर्भर करती है जिसके लिए व्यापक अनुकूलन की आवश्यकता होती है।
ब्लैक स्वान घटनाएं व्यापार पर गंभीर प्रभाव के साथ अप्रत्याशित बनी हुई हैं। जोखिम नियंत्रण के लिए स्थिति आकार की सिफारिश की जाती है।
बैकटेस्ट के परिणाम अधिक फिट हो सकते हैं और लाइव प्रदर्शन को गलत तरीके से प्रस्तुत कर सकते हैं। मापदंडों को मज़बूती सत्यापन की आवश्यकता होती है।
उच्च व्यापार आवृत्ति लेनदेन की लागत को बढ़ाती है। जीत दर और जोखिम/लाभ अनुपात को लागत को पर्याप्त रूप से कवर करना चाहिए।
उचित पैरामीटर अनुकूलन, सिग्नल आयामों को जोड़ना और स्थिति आकार को प्रभावी ढंग से जोखिमों को कम करने और प्रदर्शन स्थिरता को बढ़ाने में मदद कर सकता है।
प्रमुख अनुकूलन आयामों में शामिल हैंः
अधिक स्थिरता के लिए अतिरिक्त मोमबत्ती अवधि मापदंडों का परीक्षण करें।
झूठे ब्रेकआउट से बचने के लिए वॉल्यूम पुष्टिकरण जोड़ें.
पैरामीटर की मजबूती के लिए शार्प अनुपात जैसे मीट्रिक को शामिल करें।
नियंत्रित गतिशील लाभ के लिए लाभ अनुवर्ती तंत्र की शुरूआत करें।
अनिश्चितता से बचने के लिए VIX घबराहट स्तरों द्वारा संकेतों को फ़िल्टर करें।
आदर्श व्यापार अवधि के लिए धारण अवधि का अनुकूलन करें।
स्थैतिक स्टॉप से परे स्टॉप लॉस यांत्रिकी में सुधार।
ये उपाय रणनीति की स्थिरता, लचीलापन और लाभप्रदता में और सुधार कर सकते हैं।
सटीक प्रवृत्ति ब्रेकआउट ट्रेडिंग रणनीति सफलतापूर्वक उच्च संभावना प्रवृत्ति ब्रेकआउट कैप्चर के लिए प्रवृत्ति, पैटर्न, स्टॉप लॉस / टेक प्रॉफिट विश्लेषण को जोड़ती है। स्पष्ट व्यापार संकेतों, मजबूत संकेतक पुष्टि और नियंत्रित जोखिमों के साथ, यह प्रवृत्ति बाजारों के लिए अच्छी तरह से उपयुक्त एक कुशल रणनीति है। निरंतर अनुकूलन और सुधार के साथ, रणनीति प्रवृत्ति ब्रेकआउट ट्रैकिंग और स्थिति प्रबंधन के लिए एक शक्तिशाली उपकरण के रूप में वादा करती है, जो बड़े पैमाने पर लाभ की तलाश करने वाले व्यापारियों को जबरदस्त मूल्य प्रदान करती है।
/*backtest start: 2022-11-01 00:00:00 end: 2023-10-14 05:20:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © julianossilva //@version=5 strategy(title="J2S Backtest: 123-Stormer Strategy", shorttitle="J2S Backtest: 123-Stormer Strategy", overlay=true, initial_capital=1000, default_qty_value=10, default_qty_type = strategy.percent_of_equity, pyramiding=0) // Initial Backtest Date Range useStartDate = timestamp("01 Jan 2020 21:00:00") useEndDate = timestamp("01 Jan 2023 21:00:00") // User Inputs SIGNAL_CONFIG = "BACKTEST: STORMER STRATEGY (123)" longEntryInput = input.bool(defval=true, title="Long Entry", group=SIGNAL_CONFIG) shortEntryInput = input.bool(defval=true, title="Short entry", group=SIGNAL_CONFIG) thresholdForEntryInput = input.int(defval=3, title="Threshold on clandes for entry", group=SIGNAL_CONFIG) insideBarStrategyTitle = "Only third candle inside bar is valid" insideBarStrategyTip = "According to Stomer, it would be the best signal for the strategy" insideBarStrategyInput = input.bool(defval=true, title=insideBarStrategyTitle, group=SIGNAL_CONFIG, tooltip=insideBarStrategyTip) EMA_CONFIG = "BACKTEST: EXPONENTIAL MOVING AVERAGES" sourceInput = input.source(defval=close, title="Source", inline="01", group=EMA_CONFIG) emaTimeframeInput = input.timeframe("1W", title="Timeframe", inline="01", group=EMA_CONFIG) emaOffsetInput = input.int(defval=8, title="Offset", inline="01", group=EMA_CONFIG) fastEMALengthInput = input.int(defval=8, title="Fast EMA Length", inline="02", group=EMA_CONFIG) useFastEMAInput = input.bool(defval=true, title="Use Fast EMA", inline="02", group=EMA_CONFIG) slowEMALengthInput = input.int(defval=80, title="Slow EMA Length", inline="03", group=EMA_CONFIG) useSlowEMAInput = input.bool(defval=true, title="Use Slow EMA", inline="03", group=EMA_CONFIG) PERIOD_CONFIG = "BACKTEST: TIME PERIOD" useDateFilterInput = input.bool(defval=true, title="Filter Date Range of Backtest", group=PERIOD_CONFIG) backtestStartDateInput = input(defval=useStartDate, title="Start Date", group=PERIOD_CONFIG) backtestEndDateInput = input(defval=useEndDate, title="End Date", group=PERIOD_CONFIG) // Colors bbBackgroundColor = color.rgb(33, 150, 243, 90) candleColorDown = color.rgb(239, 83, 80, 80) candleColorUp = color.rgb(38, 166, 154, 70) insideBarColorDown = color.rgb(239, 83, 80, 40) insideBarColorUp = color.rgb(38, 166, 154, 20) downTrendColor = color.rgb(239, 83, 80, 80) sidewaysTrendColor = color.rgb(252, 232, 131, 80) upTrendColor = color.rgb(38, 166, 154, 80) buySignalColor = color.lime sellSignalColor = color.orange // Candles isCandleUp() => close > open isCandleDown() => close <= open barcolor(isCandleUp() ? candleColorUp : isCandleDown() ? candleColorDown : na) // Exponential Moving Averages fastEMA = request.security(syminfo.tickerid, emaTimeframeInput, ta.ema(sourceInput, fastEMALengthInput), barmerge.gaps_on, barmerge.lookahead_on) currentFastEMA = request.security(syminfo.tickerid, emaTimeframeInput, ta.ema(sourceInput, fastEMALengthInput), barmerge.gaps_off, barmerge.lookahead_on) previousFastEMA = request.security(syminfo.tickerid, emaTimeframeInput, ta.ema(sourceInput[1], fastEMALengthInput), barmerge.gaps_off, barmerge.lookahead_on) slowEMA = request.security(syminfo.tickerid, emaTimeframeInput, ta.ema(sourceInput, slowEMALengthInput), barmerge.gaps_on, barmerge.lookahead_on) currentSlowEMA = request.security(syminfo.tickerid, emaTimeframeInput, ta.ema(sourceInput, slowEMALengthInput), barmerge.gaps_off, barmerge.lookahead_on) previousSlowEMA = request.security(syminfo.tickerid, emaTimeframeInput, ta.ema(sourceInput[1], slowEMALengthInput), barmerge.gaps_off, barmerge.lookahead_on) // Trend Rules for Exponential Moving Averages isSlowEMAUp() => currentSlowEMA > previousSlowEMA isSlowEMADown() => currentSlowEMA < previousSlowEMA isFastEMAUp() => currentFastEMA > previousFastEMA isFastEMADown() => currentFastEMA < previousFastEMA // Exponential Moving Average Colors fastEMAColor = isFastEMAUp() ? upTrendColor : isFastEMADown() ? downTrendColor : sidewaysTrendColor slowEMAColor = isSlowEMAUp() ? upTrendColor : isSlowEMADown() ? downTrendColor : sidewaysTrendColor // Display Exponential Moving Averages plot(useFastEMAInput ? fastEMA : na, offset=emaOffsetInput, color=fastEMAColor, title="Fast EMA", style=plot.style_line, linewidth=4) plot(useSlowEMAInput ? slowEMA : na, offset=emaOffsetInput, color=slowEMAColor, title="Slow EMA", style=plot.style_line, linewidth=7) // Price Trend pricesAboveFastEMA() => low[2] > currentFastEMA and low[1] > currentFastEMA and low > currentFastEMA pricesAboveSlowEMA() => low[2] > currentSlowEMA and low[1] > currentSlowEMA and low > currentSlowEMA pricesBelowFastEMA() => high[2] < currentFastEMA and high[1] < currentFastEMA and high < currentFastEMA pricesBelowSlowEMA() => high[2] < currentSlowEMA and high[1] < currentSlowEMA and high < currentSlowEMA // Market in Bullish Trend isBullishTrend() => if useFastEMAInput and useSlowEMAInput pricesAboveFastEMA() and pricesAboveSlowEMA() else if useFastEMAInput pricesAboveFastEMA() else if useSlowEMAInput pricesAboveSlowEMA() else na // Market in Bearish Trend isBearishTrend() => if useFastEMAInput and useSlowEMAInput pricesBelowFastEMA() and pricesBelowSlowEMA() else if useFastEMAInput pricesBelowFastEMA() else if useSlowEMAInput pricesBelowSlowEMA() else na // Stormer Strategy (123) isFirstCandleUp() => high[2] > high[1] and low[2] > low[1] isFirstCandleDown() => high[2] < high[1] and low[2] < low[1] isThirdCandleUp() => low > low[1] isThirdCandleDown() => high < high[1] isThirdCandleInsideBar() => high < high[1] and low > low[1] // Buy Signal isStormer123Buy() => if insideBarStrategyInput longEntryInput and isFirstCandleUp() and isThirdCandleInsideBar() and isBullishTrend() else longEntryInput and isFirstCandleUp() and isThirdCandleUp() and isBullishTrend() // Sell Signal isStormer123Sell() => if insideBarStrategyInput shortEntryInput and isFirstCandleDown() and isThirdCandleInsideBar() and isBearishTrend() else shortEntryInput and isFirstCandleDown() and isThirdCandleDown() and isBearishTrend() // Backtest Time Period inTradeWindow = true isInTradeWindow() => inTradeWindow isBacktestDateRangeOver() => not inTradeWindow and inTradeWindow[1] // Backtest Price Parameters highestPrice = ta.highest(high, 3) lowestPrice = ta.lowest(low,3) priceRange = highestPrice - lowestPrice // Stormer Strategy (123): LONG var myLongOrders = array.new_int(0) longtEntryID = "Long Entry:\n" + str.tostring(bar_index) longExitID = "Long Exit:\n" + str.tostring(bar_index) stopLossInLong = lowestPrice + 0.01 takeProfitInLong = priceRange + high longEntryHasBeenMet = isInTradeWindow() and isBullishTrend() and isStormer123Buy() // Scheduling LONG entry if longEntryHasBeenMet array.push(myLongOrders, bar_index) strategy.order(longtEntryID, strategy.long, stop=high) strategy.exit(longExitID, longtEntryID, stop=stopLossInLong, limit=takeProfitInLong) // In pine script, any order scheduled but not yet filled can be canceled. // Once a order is filled, the trade is only finished with use of close or exit functions. // As scheduled orders are not stored in the strategy.opentrades array, manual control is required. for myOrderIndex = 0 to (array.size(myLongOrders) == 0 ? na : array.size(myLongOrders) - 1) myLongOrder = array.get(myLongOrders, myOrderIndex) if bar_index - myLongOrder == thresholdForEntryInput longEntryID = "Long Entry:\n" + str.tostring(myLongOrder) strategy.cancel(longEntryID) // Stormer Strategy (123): SHORT var myShortOrders = array.new_int(0) shortEntryID = "Short Entry:\n" + str.tostring(bar_index) shortExitID = "Short Exit:\n" + str.tostring(bar_index) stopLossInShort = highestPrice + 0.01 takeProfitInShort = low - priceRange shortEntryHasBeenMet = isInTradeWindow() and isBearishTrend() and isStormer123Sell() // Scheduling SHORT entry if shortEntryHasBeenMet array.push(myShortOrders, bar_index) strategy.order(shortEntryID, strategy.short, stop=low) strategy.exit(shortExitID, shortEntryID, stop=stopLossInShort, limit=takeProfitInShort) // In pine script, any order scheduled but not yet filled can be canceled. // Once a order is filled, the trade is only finished with use of close or exit functions. // As scheduled orders are not stored in the strategy.opentrades array, manual control is required. for myOrderIndex = 0 to (array.size(myShortOrders) == 0 ? na : array.size(myShortOrders) - 1) myShortOrder = array.get(myShortOrders, myOrderIndex) if bar_index - myShortOrder == thresholdForEntryInput shortEntryID := "Short Entry:\n" + str.tostring(myShortOrder) strategy.cancel(shortEntryID) // Close all positions at the end of the backtest period if isBacktestDateRangeOver() strategy.cancel_all() strategy.close_all(comment="Date Range Exit") // Display Signals plotshape(series=longEntryHasBeenMet, title="123 Buy", style=shape.triangleup, location=location.belowbar, color=buySignalColor, text="123", textcolor=buySignalColor) plotshape(series=shortEntryHasBeenMet, title="123 Sell", style=shape.triangledown, location=location.abovebar, color=sellSignalColor, text="123", textcolor=sellSignalColor)