यह एक बहुत ही सरल रणनीति है. इसमें केवल एक ट्रेलिंग स्टॉप लॉस होता है. जब स्टॉप लॉस ट्रिगर होता है, तो स्थिति उलट जाती है और नई स्थिति के लिए एक ट्रेलिंग स्टॉप लॉस सेट किया जाता है.
रणनीति तीन स्टॉप लॉस प्रकारों में से एक के आधार पर बनाई गई हैः प्रतिशत स्टॉप लॉस, एटीआर स्टॉप लॉस, पूर्ण स्टॉप लॉस। जब स्टॉप लॉस ट्रिगर किया जाता है, तो स्थिति को उलट दिया जाता है और नई स्थिति के लिए ट्रेलिंग स्टॉप लॉस सेट किया जाता है।
विशेष रूप से, रणनीति पहले चुने गए स्टॉप लॉस प्रकार के आधार पर स्टॉप लॉस मूल्य की गणना करती है। फिर यह प्रवेश संकेतों की जांच करती है, जब उच्च पिछली स्टॉप लॉस मूल्य से ऊपर होता है और जब कम पिछली स्टॉप लॉस मूल्य से नीचे होता है तो शॉर्ट हो जाता है। प्रवेश करने के बाद, यह ट्रेल मूल्य परिवर्तनों के लिए स्टॉप लॉस मूल्य को अपडेट करता रहता है। लंबी स्टॉप लॉस मूल्य कम शून्य स्टॉप लॉस मूल्य है, छोटी स्टॉप लॉस मूल्य उच्च प्लस स्टॉप लॉस मूल्य है।
इस रणनीति का सबसे बड़ा लाभ इसकी सादगी है, जिसमें प्रवेश और निकास बिंदु चयनों पर विचार किए बिना केवल एक स्टॉप लॉस की ट्रैकिंग की आवश्यकता होती है। स्टॉप लॉस मूल्य की लचीली सेटिंग भी इसके अनुप्रयोग के दायरे को व्यापक बनाती है।
फिक्स्ड स्टॉप लॉस की तुलना में, इसका उपयोग करने वाला ट्रेलिंग स्टॉप लॉस अधिक मुनाफे में लॉक कर सकता है जबकि स्टॉप लॉस को हिट होने की संभावना को भी कम कर सकता है। स्टॉप लॉस को ट्रिगर किए जाने पर हर बार पोजीशन को रिवर्स करने से मूल्य रिवर्स अवसरों को कैप्चर करने की अनुमति मिलती है।
इस रणनीति के मुख्य जोखिम गलत स्टॉप लॉस मूल्य सेटिंग से आ सकते हैं। बहुत बड़ा स्टॉप लॉस मूल्य बढ़े हुए नुकसान का कारण बन सकता है, जबकि बहुत छोटा मूल्य अक्सर स्टॉप लॉस ट्रिगर करने का कारण बन सकता है। इसके लिए बाजार की स्थितियों के आधार पर अनुकूलन अनुकूलन की आवश्यकता होती है।
एक अन्य जोखिम है कि स्थिति को उलटते समय स्टॉप लॉस ट्रिगर करने के बाद दिशागत निर्णय गलत होता है, जिससे मूल्य उलटने के अवसर खो जाते हैं या घाटे बढ़ते हैं। यह इष्टतम उलट समय निर्धारित करने के लिए प्रवृत्ति और समर्थन / प्रतिरोध विश्लेषण को जोड़ने की आवश्यकता है।
इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः
यह रणनीति एक सरल ट्रेलिंग स्टॉप लॉस तंत्र के माध्यम से लाभ प्राप्त करती है और शुरुआती लोगों के लिए समझना आसान है। पारंपरिक स्टॉप लॉस रणनीतियों की तुलना में, यह अतिरिक्त लाभ प्राप्त करने के लिए पोस्ट स्टॉप लॉस ट्रिगर रिवर्स पोजीशन जोड़ता है। निरंतर परीक्षण और अनुकूलन के साथ, यह एक बहुत ही व्यावहारिक मात्रात्मक कार्यक्रम बन सकता है।
/*backtest start: 2022-11-24 00:00:00 end: 2023-11-30 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Trailing SL Strategy [QuantNomad]", shorttitle = "TrailingSL [QN]", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 50) //////////// // Inputs // sl_type = input("%", options = ["%", "ATR", "Absolute"]) sl_perc = input(4, title = "% SL", type = input.float) atr_length = input(10, title = "ATR Length") atr_mult = input(2, title = "ATR Mult", type = input.float) sl_absol = input(10, title = "Absolute SL", type = input.float) // BACKTESTING RANGE // From Date Inputs fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2016, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2100, title = "To Year", minval = 1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = time >= startDate and time <= finishDate ////////////////// // CALCULATIONS // // SL values sl_val = sl_type == "ATR" ? atr_mult * atr(atr_length) : sl_type == "Absolute" ? sl_absol : close * sl_perc / 100 // Init Variables pos = 0 trailing_sl = 0.0 // Signals long_signal = nz(pos[1]) != 1 and high > nz(trailing_sl[1]) short_signal = nz(pos[1]) != -1 and low < nz(trailing_sl[1]) // Calculate SL trailing_sl := short_signal ? high + sl_val : long_signal ? low - sl_val : nz(pos[1]) == 1 ? max(low - sl_val, nz(trailing_sl[1])) : nz(pos[1]) == -1 ? min(high + sl_val, nz(trailing_sl[1])) : nz(trailing_sl[1]) // Position var pos := long_signal ? 1 : short_signal ? -1 : nz(pos[1]) ////////////// // PLOTINGS // plot(trailing_sl, linewidth = 2, color = pos == 1 ? color.green : color.red) ////////////// // STRATEGY // if (time_cond and pos != 1) strategy.entry("long", true, stop = trailing_sl) if (time_cond and pos != -1) strategy.entry("short", false, stop = trailing_sl)