यह रणनीति औसत वास्तविक तरंगों (ATR) के आधार पर गतिशील स्टॉपलॉस लाइन सेट करती है, स्टॉक की कीमतों में बदलाव को ट्रैक करती है और स्टॉपलॉस सुरक्षा प्राप्त करते हुए अधिकतम लाभ को लॉक करती है।
इस रणनीति को मुख्य रूप से निम्नलिखित चरणों के माध्यम से लागू किया गया हैः
एटीआर सूचकांक की गणना करने के लिए, एटीआर अवधि nATRPeriod पैरामीटर द्वारा सेट की जाती है, डिफ़ॉल्ट रूप से 5;
एटीआर मूल्य के आधार पर गणना की गई रोकथाम लाइन, रोकथाम आयाम nATRMultip पैरामीटर द्वारा सेट किया गया है, जो एटीआर का 3.5 गुना है;
जब शेयर की कीमत बढ़ जाती है, तो स्टॉप-लॉस लाइन को शेयर की कीमत से घटाकर स्टॉप-लॉस मार्जिन तक बढ़ाया जाता है यदि यह पूर्व की स्टॉप-लॉस लाइन से अधिक है; जब शेयर की कीमत गिरती है, तो स्टॉप-लॉस लाइन को शेयर की कीमत से घटाकर स्टॉप-लॉस मार्जिन तक घटाया जाता है यदि यह पूर्व की स्टॉप-लॉस लाइन से कम है;
यह निर्धारित करने के लिए कि क्या शेयरों की कीमतें स्टॉप-लॉस लाइन को तोड़ती हैं, जो कि खरीदने या बेचने का संकेत देता है;
स्टॉप लाइन को तोड़ने के संकेत के अनुसार, अधिक या खाली स्थिति में प्रवेश करें, और स्टॉप लाइन को फिर से छूने पर स्थिति को खाली करें।
स्टॉक की कीमत में वृद्धि के दौरान, स्टॉप-लॉस लाइन लगातार ऊपर की ओर जाती है, जिससे मुनाफा बंद हो जाता है; जब स्टॉक की कीमत में गिरावट आती है, तो स्टॉप-लॉस लाइन लगातार नीचे की ओर जाती है, जिससे स्टॉप-लॉस होता है। एटीआर सूचक स्टॉक की कीमत में उतार-चढ़ाव की डिग्री को अधिक सटीक रूप से दर्शाता है। एटीआर गतिशीलता के अनुसार स्टॉप-लॉस लाइन को समायोजित करें, जिससे स्टॉप-लॉस को अत्यधिक उग्र या रूढ़िवादी होने से बचा जा सके।
पैरामीटर अनुकूलन के माध्यम से, एटीआर चक्र पैरामीटर और रोकथाम आयाम को समायोजित करके, रोकथाम और ट्रैकिंग को संतुलित करने के लिए सबसे अच्छा पैरामीटर संयोजन ढूंढें। अनावश्यक रोकथाम को कम करने के लिए अन्य तकनीकी संकेतकों के साथ-साथ समय पर प्रवेश फ़िल्टर भी किया जा सकता है।
यह रणनीति गतिशील रूप से एटीआर स्टॉप लाइन को समायोजित करने की विधि के माध्यम से, होल्डिंग प्रक्रिया में स्टॉप और प्रॉफिट लॉक को प्राप्त करती है। स्टॉक मूल्य में उतार-चढ़ाव के लिए बेहतर अनुकूलन, फिक्स्ड स्टॉप पोजीशन की तुलना में, बहुत अधिक कट्टरपंथी या रूढ़िवादी स्टॉप को रोकने से बचने के लिए। एटीआर सूचकांक स्टॉप लाइन को समायोजित करने के लिए अधिक लक्षित बनाता है। लेकिन पैरामीटर सेटिंग और फिर से प्रवेश रणनीति को और अधिक अनुकूलित करने की आवश्यकता है, ताकि अनावश्यक स्टॉप को कम किया जा सके और लाभ के लिए जगह बढ़ाई जा सके। यह रणनीति समग्र रूप से एक बेहतर गतिशील स्टॉप ट्रैक विचारधारा है, जो आगे के अध्ययन और आवेदन के लायक है।
/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//@okadoke
////////////////////////////////////////////////////////////
// Based on Average True Range Trailing Stops Strategy by HPotter
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort
// The related article is copyrighted material from Stocks & Commodities Jun 2009
////////////////////////////////////////////////////////////
strategy(title="ATR Trailing Stops Strategy", shorttitle="ATRTSS", overlay = true,
initial_capital=100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type="percent", commission_value=0.0)
nATRPeriod = input(5, "ATR Period")
nATRMultip = input(3.5, "ATR Multiplier")
useShorts = input(false, "Test w/Shorts?")
daysBackMax = input(defval = 360, title = "Max Days Back to Test", minval = 0)
daysBackMin = input(defval = 0, title = "Min Days Back to Test", minval = 0)
msBackMax = 1000 * 60 * 60 * 24 * daysBackMax
msBackMin = 1000 * 60 * 60 * 24 * daysBackMin
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = na
xATRTrailingStop :=
iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss),
iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos = na
pos :=
iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
color = pos == -1 ? red: pos == 1 ? green : blue
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")
isWithinTimeBounds = (msBackMax == 0 or (time > (timenow - msBackMax))) and (msBackMin == 0 or (time < (timenow - msBackMin)))
buy = crossover(close, xATRTrailingStop)
sell = crossunder(close, xATRTrailingStop)
strategy.entry("LONG", long=true, when=buy and isWithinTimeBounds)
strategy.close("LONG", when=sell and isWithinTimeBounds)
strategy.entry("SHORT", long=false, when=useShorts and sell and isWithinTimeBounds)
strategy.close("SHORT", when=useShorts and buy and isWithinTimeBounds)