इस रणनीति का मुख्य विचार एटीआर संकेतक के आधार पर लंबी और छोटी स्टॉप-लॉस लाइनों की गणना करना है। यह ट्रेडिंग सिग्नल उत्पन्न करता है जब कीमत इन स्टॉप-लॉस लाइनों को तोड़ती है। इसमें ट्रेंड ट्रैकिंग और ऑसिलेशन कैप्चर दोनों क्षमताएं हैं।
रणनीति में लंबी और छोटी स्टॉप-लॉस लाइनों की गणना करने के लिए एन अवधि एटीआर को गुणा करके गुणांक का उपयोग किया जाता है। विशिष्ट गणना सूत्र निम्नलिखित हैंः
Long Stop = Highest Price - ATR * Coefficient
Short Stop = Lowest Price + ATR * Coefficient
जब कीमत बढ़ती है और लंबी स्टॉप-लॉस लाइन को तोड़ती है, और जब कीमत गिरती है और छोटी स्टॉप-लॉस लाइन को तोड़ती है तो यह लंबी जाती है। लंबी या छोटी जाने के बाद, यह स्टॉप-लॉस लाइनों को स्थानांतरित करने के लिए वास्तविक समय में मूल्य उतार-चढ़ाव का पालन करेगा।
स्टॉप-लॉस स्तर के रूप में एटीआर बैंड का उपयोग करके, यह विधि स्टॉप-लॉस जोखिम को सुनिश्चित करते हुए मूल्य प्रवृत्ति को पूरी तरह से पकड़ सकती है। यह संकेत उत्पन्न करता है जब मूल्य में महत्वपूर्ण सफलता होती है, जो प्रभावी रूप से झूठे ब्रेकआउट को फ़िल्टर कर सकती है।
इस रणनीति का सबसे बड़ा लाभ यह है कि यह जोखिमों को नियंत्रित करते हुए कीमत के रुझानों को पकड़ने के लिए स्टॉप-लॉस स्तर को स्वचालित रूप से समायोजित कर सकती है। विशिष्ट लाभ निम्नलिखित हैंः
एटीआर संकेतक पर आधारित फ्लोटिंग स्टॉप-लॉस बाजार की अस्थिरता के अनुसार स्टॉप-लॉस रेंज को समायोजित कर सकता है ताकि एकल हानि को प्रभावी ढंग से नियंत्रित किया जा सके।
सिग्नल उत्पन्न करने के लिए एक अभिनव विधि अपनाकर कुछ शोर को फ़िल्टर किया जा सकता है और शिखर और तल का पीछा करने से बचा जा सकता है।
मूल्य उतार-चढ़ाव को ट्रैक करने के लिए स्टॉप-लॉस लाइनों का वास्तविक समय समायोजन स्टॉप-लॉस को बहुत ढीला होने से रोकता है और अधिक लाभ में लॉक करता है।
इस रणनीति में कुछ जोखिम भी हैं, जो मुख्य रूप से स्टॉप-लॉस स्तर और सिग्नल जनरेशन की स्थापना में केंद्रित हैं। विशिष्ट जोखिम बिंदु हैंः
अनुचित एटीआर चक्र और गुणांक अत्यधिक व्यापक या संकीर्ण स्टॉप-लॉस का कारण बन सकते हैं।
सफलता संकेत विधि शुरुआती रुझान के अवसरों को याद कर सकती है।
प्रवृत्ति समाप्त होने के दौरान स्टॉप-लॉस ट्रैकिंग में कुछ देरी हो सकती है, पूरी तरह से बाहर निकलने में असमर्थ।
प्रतिरोधात्मक उपाय मुख्य रूप से स्टॉप-लॉस को अधिक उचित बनाने के लिए मापदंडों को समायोजित करने के लिए हैं, या प्रवृत्ति और संकेतों को निर्धारित करने के लिए अन्य संकेतकों के साथ सहायता करते हैं।
इस रणनीति को निम्नलिखित पहलुओं में और अधिक अनुकूलित किया जा सकता हैः
जोखिमों को और नियंत्रित करने के लिए दूसरी परत का स्टॉप-लॉस सेट करें।
प्रवृत्ति को निर्धारित करने और संकेत की गुणवत्ता में सुधार के लिए अन्य संकेतकों को मिलाएं।
यदि प्रवृत्ति आगे भी जारी रहती है तो लाभ बढ़ाने के लिए चलती स्टॉप-प्रॉफिट रणनीतियों को जोड़ें।
एटीआर चक्र और गुणांक मापदंडों को अनुकूलित करना ताकि स्टॉप-लॉस वास्तविक मूल्य उतार-चढ़ाव के करीब हो सके।
कुल मिलाकर, यह रणनीति बहुत व्यावहारिक है। यह स्टॉप-लॉस स्तर को स्वचालित रूप से समायोजित करके जोखिमों को प्रभावी ढंग से नियंत्रित कर सकती है, जबकि प्रवृत्ति ट्रैकिंग के माध्यम से अच्छे लाभ प्राप्त कर सकती है। हम इसे अधिक स्थिर और बुद्धिमान बनाने के लिए मौजूदा आधार पर अन्य विश्लेषणात्मक तरीकों को जोड़कर रणनीति को और अनुकूलित और सुधार सकते हैं।
/*backtest start: 2024-01-04 00:00:00 end: 2024-02-03 00:00:00 period: 1h basePeriod: 15m 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/ // © melihtuna //@version=4 strategy("Chandelier Exit - Strategy",shorttitle="CE-STG" , overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency=currency.USD, commission_value=0.03, commission_type=strategy.commission.percent) length = input(title="ATR Period", type=input.integer, defval=22) mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=false) useClose = input(title="Use Close Price for Extremums ?", type=input.bool, defval=true) highlightState = input(title="Highlight State ?", type=input.bool, defval=true) atr = mult * atr(length) longStop = (useClose ? highest(close, length) : highest(length)) - atr longStopPrev = nz(longStop[1], longStop) longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = (useClose ? lowest(close, length) : lowest(length)) + atr shortStopPrev = nz(shortStop[1], shortStop) shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop var int dir = 1 dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir var color longColor = color.green var color shortColor = color.red longStopPlot = plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor) buySignal = dir == 1 and dir[1] == -1 plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0) plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0) shortStopPlot = plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor) sellSignal = dir == -1 and dir[1] == 1 plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0) plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0) midPricePlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0, display=display.none, editable=false) longFillColor = highlightState ? (dir == 1 ? longColor : na) : na shortFillColor = highlightState ? (dir == -1 ? shortColor : na) : na fill(midPricePlot, longStopPlot, title="Long State Filling", color=longFillColor) fill(midPricePlot, shortStopPlot, title="Short State Filling", color=shortFillColor) long_short = input(true, "Long-Short",type=input.bool, group="Strategy Settings") start = input(timestamp("2019-01-01"), "Date", type=input.time, group="Strategy Settings") finish = input(timestamp("2025-01-01"), "Date", type=input.time, group="Strategy Settings") window() => true slRatio=input(5, "Manuel Stop Loss Ratio", type=input.float, minval=0, group="Strategy Settings") tpRatio=input(20, "Take Profit Ratio", type=input.float, minval=0, group="Strategy Settings") tsStartRatio=input(10, "Trailing Stop Start Ratio", type=input.float, minval=0, group="Strategy Settings") tsRatio=input(5, "Trailing Stop Ratio", type=input.float, minval=1, group="Strategy Settings") lastBuyPrice = strategy.position_avg_price diffHiPriceRatio = (high-lastBuyPrice)/lastBuyPrice*100 diffLoPriceRatio = (close-lastBuyPrice)/lastBuyPrice*100 posHiRatio=0.0 posHiRatio:= strategy.position_size > 0 ? diffHiPriceRatio > posHiRatio[1] ? diffHiPriceRatio : posHiRatio[1] : 0 s_diffHiPriceRatio = (low-lastBuyPrice)/lastBuyPrice*100 s_diffLoPriceRatio = (close-lastBuyPrice)/lastBuyPrice*100 s_posHiRatio=0.0 s_posHiRatio:= strategy.position_size < 0 ? s_diffLoPriceRatio < s_posHiRatio[1] ? s_diffLoPriceRatio : s_posHiRatio[1] : 0 strategy.entry("LONG", strategy.long, when = window() and buySignal) strategy.close("LONG", when = window() and sellSignal) strategy.close("LONG", when = diffLoPriceRatio<(slRatio*(-1)), comment="STOP-LONG") strategy.close("LONG", when = diffHiPriceRatio>tpRatio, comment="TAKE-PROFIT-LONG") strategy.close("LONG", when = ((posHiRatio[1]>tsStartRatio) and (posHiRatio[1]-diffHiPriceRatio)>tsRatio), comment="TRAILING-STOP-LONG") if long_short strategy.entry("SHORT", strategy.short, when = window() and sellSignal) strategy.close("SHORT", when = window() and buySignal) strategy.close("SHORT", when = s_diffLoPriceRatio>(slRatio), comment="STOP-SHORT") strategy.close("SHORT", when = s_diffHiPriceRatio<(tpRatio*(-1)), comment="TAKE-PROFIT-SHORT") strategy.close("SHORT", when = ((s_posHiRatio[1]*(-1)>tsStartRatio) and ((s_posHiRatio[1]-s_diffLoPriceRatio))*(-1)>tsRatio), comment="TRAILING-STOP-SHORT")