यह मूल्य चैनल पर आधारित ब्रेकआउट रणनीति है, जिसमें प्रवेश और निकास के लिए चलती औसत संकेतकों और ट्रैलिंग स्टॉप/टेक प्रॉफिट के साथ संयुक्त है। यह मूल्य चैनल बनाने के लिए उच्च/निम्न कीमतों के चलती औसत का उपयोग करता है, और जब मूल्य चैनल से बाहर निकलता है, तो जोखिमों को नियंत्रित करने के लिए निश्चित स्टॉप लॉस या ट्रैलिंग स्टॉप के साथ लंबा/लघु प्रवेश करता है।
यह रणनीति एक मूल्य चैनल बनाने के लिए उच्च / निम्न कीमतों के चलती औसत की गणना करती है। विशेष रूप से, यह चैनल के ऊपरी और निचले बैंड को प्लॉट करने के लिए उच्च / निम्न कीमतों की लंबाई 10 एसएमए की गणना करती है। जब कीमत निचले बैंड से ऊपर ऊपरी बैंड में टूटती है, तो यह लंबी होती है। जब कीमत ऊपरी बैंड से निचले बैंड में टूटती है, तो यह छोटी होती है।
प्रविष्टि के बाद, रणनीति या तो फिक्स्ड स्टॉप लॉस या ट्रेलिंग स्टॉप का उपयोग बाहर निकलने के लिए करती है। ट्रेलिंग स्टॉप में दो मापदंड होते हैंः फिक्स्ड टेक प्रॉफिट लेवल, और एक्टिवेटिंग ऑफसेट। जब कीमत एक्टिवेटिंग ऑफसेट तक पहुंच जाती है, तो टेक प्रॉफिट लेवल कीमत को ट्रेल करना शुरू कर देता है। इससे कुछ खुली जगह रखते हुए मुनाफे में लॉक होने की अनुमति मिलती है।
रणनीति में समय सीमा फ़िल्टर भी शामिल है, जो विभिन्न बाजार चरणों में प्रदर्शन का परीक्षण करने के लिए केवल निर्दिष्ट ऐतिहासिक समय सीमा के भीतर बैकटेस्ट चलाता है।
यह रणनीति ट्रेलिंग स्टॉप के साथ मूल्य चैनल और प्रवृत्ति का लाभ उठाती है, जो इसे मध्यम से दीर्घकालिक प्रवृत्ति दिशाओं को पकड़ने की अनुमति देती है। सरल चलती औसत रणनीतियों की तुलना में, यह मूल्य उतार-चढ़ाव के कारण अप्रभावी ट्रेडों से बचता है। ट्रेलिंग स्टॉप के साथ, यह लाभ में लॉक करने के लिए गतिशील रूप से कीमतों को ट्रेल कर सकता है।
कुल मिलाकर, रणनीति में स्पष्ट तर्क, न्यूनतम संकेतक और मापदंड हैं, बैकटेस्ट करना आसान है, मध्यम से दीर्घकालिक ट्रेंड ट्रेडिंग के लिए उपयुक्त है, और मजबूत रुझानों से लाभ उठा सकता है।
यह रणनीति उतार-चढ़ाव वाले बाजारों के दौरान आसानी से बंद हो जाती है, जो मुनाफे को बनाए रखने में असमर्थ होती है। चरम चाल के दौरान भी, कीमत बड़े नुकसान के लिए अग्रणी स्टॉप लॉस को आक्रामक रूप से तोड़ सकती है।
पैरामीटर ट्यूनिंग काफी व्यक्तिपरक है, जिसके लिए विभिन्न बाजार चरणों में समायोजन की आवश्यकता होती है। फिक्स्ड टेक प्रॉफिट और एक्टिवेटिंग ऑफसेट बदलते बाजार अस्थिरता के अनुकूल नहीं होते हैं।
अन्य संकेतक जैसे वॉल्यूम, बोलिंगर बैंड्स को प्रवेश संकेतों को फ़िल्टर करने के लिए शामिल किया जा सकता है, जाल से बचने के लिए। या एटीआर या मूल्य अस्थिरता के आधार पर गतिशील स्टॉप का उपयोग किया जा सकता है।
बाहर निकलने के नियमों को ट्रेलिंग स्टॉप या चैंडिलर एग्जिट में अपग्रेड किया जा सकता है। जब कीमत चैनल में फिर से प्रवेश करती है तो आंशिक लाभ लक्ष्यों पर विचार किया जा सकता है। प्रवेश फिल्टर और बाहर निकलने के नियमों का अनुकूलन रणनीति की स्थिरता में काफी सुधार कर सकता है।
संक्षेप में, यह मूल्य चैनल, प्रवृत्ति के बाद, स्टॉप लॉस / लाभ लेने के प्रबंधन पर आधारित एक मात्रात्मक रणनीति है। इसमें स्पष्ट तर्क प्रवाह, सरल पैरामीटर संरचना, समझने में आसान और बैकटेस्ट है। यह एल्गोरिदमिक ट्रेडिंग अवधारणाओं को सीखने के लिए उपयुक्त है। रणनीति को स्थिरता और लाभप्रदता में सुधार के लिए विभिन्न पहलुओं में बढ़ाया जा सकता है। मूल विचार प्रवृत्ति की दिशा को पकड़ना है, और स्टॉप लॉस और लाभ लेने के माध्यम से जोखिमों का प्रबंधन करना है। इसे विभिन्न समय सीमाओं पर विभिन्न उत्पादों पर लागू किया जा सकता है।
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-21 23:59:59 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Generalized SSL Backtest w/ TSSL", shorttitle="GSSL Backtest", overlay=true ) // Generalized SSL: // This is the very first time the SSL indicator, whose acronym I ignore, is on Tradingview. // It is based on moving averages of the highs and lows. // Similar channel indicators can be found, whereas // this one implements the persistency inside the channel, which is rather tricky. // The green line is the base line which decides entries and exits, possibly with trailing stops. // With respect to the original version, here one can play with different moving averages. // The default settings are (10,SMA) // // Vitelot/Yanez/Vts March 2019 lb = input(10, title="Lb", minval=1) maType = input( defval="SMA", title="MA Type", options=["SMA","EMA","HMA","McG","WMA","Tenkan"]) fixedSL = input(title="SL Activation", defval=300) trailSL = input(title="SL Trigger", defval=1) fixedTP = input(title="TP Activation", defval=150) trailTP = input(title="TP Trigger", defval=1) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2019, title = "From Year", minval = 2017) ToMonth = input(defval = 6, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 19, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2020, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window startTimeOk() => true // create function "within window of time" if statement true // QUANDL:BCHAIN/ETRVU is USD-denominated daily transaction value on BTC blockchain // QUANDL:BCHAIN/MKTCP is USD-denominated Bitcoin marketcap hma(sig, n) => // Hull moving average definition wma( 2*wma(sig,round(n/2))-wma(sig,n), round(sqrt(n))) mcg(sig,length) => // Mc Ginley MA definition mg = 0.0 mg := na(mg[1]) ? ema(sig, length) : mg[1] + (sig - mg[1]) / (length * pow(sig/mg[1], 4)) tenkan(sig,len) => 0.5*(highest(sig,len)+lowest(sig,len)) ma(t,sig,len) => sss=na if t =="SMA" sss := sma(sig,len) if t == "EMA" sss := ema(sig,len) if t == "HMA" sss := hma(sig,len) if t == "McG" // Mc Ginley sss := mcg(sig,len) if t == "Tenkan" sss := tenkan(sig,len) if t == "WMA" sss := wma(sig,len) sss base(mah, mal) => bbb = na inChannel = close<mah and close>mal belowChannel = close<mah and close<mal bbb := inChannel? bbb[1]: belowChannel? -1: 1 uuu = bbb==1? mal: mah ddd = bbb==1? mah: mal [uuu, ddd] maH = ma(maType, high, lb) maL = ma(maType, low, lb) [up, dn] = base(maH,maL) plot(up, title="High MA", color=lime, linewidth=3) plot(dn, title="Low MA", color=orange, linewidth=3) long = crossover(dn,up) short = crossover(up,dn) // === STRATEGY - LONG POSITION EXECUTION === strategy.entry("Long", strategy.long, when= long and startTimeOk()) strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) strategy.exit("Exit", when= short) // === STRATEGY - SHORT POSITION EXECUTION === strategy.entry("Short", strategy.short, when= short and startTimeOk()) strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) strategy.exit("Exit", when= long)