यह रणनीति मूल्य की प्रवृत्ति की दिशा की पहचान करने के लिए एसएमए और ईएमए जैसे कई चलती औसत को जोड़ती है, और एक प्रवृत्ति के बाद की रणनीति डिजाइन करने के लिए मूल्य सफलता के आधार पर स्टॉप लॉस लाइनें निर्धारित करती है। जब कीमतें बढ़ती हैं, तो यह स्टॉप लॉस के रूप में ऊपरी बैंड का अनुसरण करती है; जब कीमतें गिरती हैं, तो यह स्टॉप लॉस के रूप में निचली सीमा का अनुसरण करती है। रणनीति का लाभ यह है कि कई चलती औसत का संयोजन मूल्य डेटा को चिकना कर सकता है और रुझानों की पहचान कर सकता है; गतिशील स्टॉप लॉस डिजाइन अत्यधिक संवेदनशील स्टॉप से बचता है। रणनीति का जोखिम यह है कि स्टॉप लॉस लाइन का सेटअप समय में नुकसान को रोकने के लिए बहुत ढीला हो सकता है।
यह रणनीति ट्रेंड की दिशा का न्याय करने के लिए आधार के रूप में KAMA का उपयोग करती है, क्योंकि KAMA मूल्य परिवर्तनों पर अधिक संवेदनशीलता से प्रतिक्रिया करता है और अग्रिम में मोड़ की पहचान कर सकता है। उसी समय, रणनीति में कीमतों को फ़िल्टर करने और मुख्य ट्रेंड दिशाओं की पहचान करने के लिए अन्य कई चलती औसत जैसे SMA और EMA के संयोजन होते हैं।
रणनीति की स्टॉप-लॉस लाइन सेटिंग कीमत और चलती औसत पर आधारित है। विशेष रूप से, ऊपर की ओर ट्रेलिंग स्टॉप लॉस लाइन चलती औसत और बफर के रूप में एक अनुपात है; नीचे की ओर ट्रेलिंग स्टॉप लॉस लाइन बफर के रूप में एक अनुपात को छोड़कर चलती औसत है। यह कीमतों के उलट जाने पर तत्काल स्टॉप लॉस की अनुमति देता है।
प्रवेश की शर्तें लंबी होती हैं जब कीमतें नीचे से ऊपर की ओर से ऊपर की ओर स्टॉप लॉस लाइन को तोड़ती हैं; छोटी होती हैं जब कीमतें ऊपर से नीचे की ओर डाउनसाइड स्टॉप लॉस लाइन को तोड़ती हैं।
इस रणनीति का सबसे बड़ा लाभ यह है कि कई चलती औसत को जोड़कर, प्रवृत्ति निर्णय की सटीकता में सुधार किया जा सकता है और झूठे संकेतों को कम किया जा सकता है। साथ ही, रणनीति की स्टॉप लॉस लाइन गतिशील रूप से चलती औसत के आधार पर बदलती है, जो वास्तविक समय में समायोजित हो सकती है और अचानक घटनाओं का जवाब दे सकती है।
इसके अतिरिक्त, एकल संकेतक रणनीतियों की तुलना में, यह रणनीति प्रवृत्ति ट्रैकिंग और सफलता रणनीतियों के लाभों को जोड़ती है। एक प्रवृत्ति बाजार में, यह लाभ को अधिकतम कर सकता है; जबकि एक व्हिपसा बाजार में, यह स्टॉप लॉस सेटिंग्स के माध्यम से नुकसान को कम कर सकता है।
इस रणनीति का मुख्य जोखिम यह है कि स्टॉप लॉस लाइन सेटिंग समय पर स्टॉप लॉस करने के लिए बहुत ढीली हो सकती है। ऐसा इसलिए है क्योंकि स्टॉप लॉस लाइन का रिट्रेसमेंट अनुपात तय है, यदि बाजार में हिंसक बदलाव होता है, तो स्टॉप लॉस लाइन को समय पर अपडेट नहीं किया जा सकता है, जिससे अधिक नुकसान हो सकता है।
इसके अतिरिक्त, मूविंग एवरेज में ही उच्च हिस्टेरिसिस होता है और यह मूल्य परिवर्तनों पर तुरंत प्रतिक्रिया नहीं कर सकता है। इससे बाजार में तेजी से उलटा होने पर समय पर नुकसान रोकने में विफलता भी हो सकती है।
इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः
बेहतर पैरामीटर संयोजन खोजने के लिए स्टॉप लॉस लाइन अनुपात के लिए विभिन्न पैरामीटर सेटिंग्स का परीक्षण करें;
बाजार में उतार-चढ़ाव की डिग्री के अनुसार स्टॉप लॉस लाइन को गतिशील रूप से बदलने का प्रयास करें;
रणनीति की अनुकूलन क्षमता में सुधार के लिए अन्य संकेतकों को बढ़ाएं, स्टॉप लॉस आधार में अधिक चर पेश करें।
चलती औसत के चक्र मापदंडों को अनुकूलित करें ताकि कीमतों को सुचारू करने के लिए सर्वोत्तम चक्र सेटिंग मिल सके।
कुल मिलाकर, यह रणनीति काफी मजबूत है, जो प्रवृत्ति की दिशा निर्धारित करने के लिए कई चलती औसत को जोड़ती है, और प्रवृत्तियों का पालन करने के उद्देश्य से एक गतिशील ट्रेलिंग स्टॉप लॉस तंत्र डिजाइन करती है। इसके फायदे यह हैं कि यह झूठे संकेतों को कम कर सकता है, स्टॉप लॉस के माध्यम से जोखिमों को नियंत्रित कर सकता है; नुकसान यह है कि स्टॉप लॉस लाइन को तेजी से स्टॉप लॉस करने के लिए बहुत चौड़ा सेट किया जा सकता है। रणनीति को अनुकूलित करने के लिए अगला कदम स्टॉप लॉस लाइन के डिजाइन पर ध्यान केंद्रित करना चाहिए ताकि इसे बाजार परिवर्तनों के अनुसार गतिशील रूप से समायोजित किया जा सके।
/*backtest start: 2023-02-22 00:00:00 end: 2024-02-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Atlantean Trend Signal BUY SELL Strategy', overlay=true) ma_length = input.int(title='Moving Average Length', minval=1, defval=3) percent = input.float(3.3, 'STOP LOSS Percent', step=0.1, minval=0) src = input(title='Source', defval=close) mav = input.string(title="Moving Average Type", defval="KAMA", options=["SMA", "EMA", "WMA", "DEMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "HULL", "TILL", "KAMA"]) T3a1 = 0.7 _type = false //input(false, title='Activate Moving Average Screening Mode') _type1 = false //input(false, title='Activate Moving Average Color Change Screening Mode') activateScreener = input.bool(false, title="Activate Screener?") showsignallabels = input(title='Show Signal Labels?', defval=true) Var_Func(src, ma_length) => valpha = 2 / (ma_length + 1) vud1 = src > src[1] ? src - src[1] : 0 vdd1 = src < src[1] ? src[1] - src : 0 vUD = math.sum(vud1, 9) vDD = math.sum(vdd1, 9) vCMO = nz((vUD - vDD) / (vUD + vDD)) VAR = 0.0 VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1]) VAR VAR = Var_Func(src, ma_length) DEMA = 2 * ta.ema(src, ma_length) - ta.ema(ta.ema(src, ma_length), ma_length) Wwma_Func(src, ma_length) => wwalpha = 1 / ma_length WWMA = 0.0 WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1]) WWMA WWMA = Wwma_Func(src, ma_length) // KAMA Calculation Kama_Func(src, ma_length) => xvnoise = math.abs(src - src[1]) nfastend = 0.666 nslowend = 0.0645 nsignal = math.abs(src - src[ma_length]) nnoise = math.sum(xvnoise, ma_length) nefratio = nnoise != 0 ? nsignal / nnoise : 0 nsmooth = math.pow(nefratio * (nfastend - nslowend) + nslowend, 2) nAMA = 0.0 nAMA := nz(nAMA[1]) + nsmooth * (src - nz(nAMA[1])) nAMA Zlema_Func(src, ma_length) => zxLag = ma_length / 2 == math.round(ma_length / 2) ? ma_length / 2 : (ma_length - 1) / 2 zxEMAData = src + src - src[zxLag] ZLEMA = ta.ema(zxEMAData, ma_length) ZLEMA ZLEMA = Zlema_Func(src, ma_length) Tsf_Func(src, ma_length) => lrc = ta.linreg(src, ma_length, 0) lrc1 = ta.linreg(src, ma_length, 1) lrs = lrc - lrc1 TSF = ta.linreg(src, ma_length, 0) + lrs TSF TSF = Tsf_Func(src, ma_length) HMA = ta.wma(2 * ta.wma(src, ma_length / 2) - ta.wma(src, ma_length), math.round(math.sqrt(ma_length))) T3e1 = ta.ema(src, ma_length) T3e2 = ta.ema(T3e1, ma_length) T3e3 = ta.ema(T3e2, ma_length) T3e4 = ta.ema(T3e3, ma_length) T3e5 = ta.ema(T3e4, ma_length) T3e6 = ta.ema(T3e5, ma_length) T3c1 = -T3a1 * T3a1 * T3a1 T3c2 = 3 * T3a1 * T3a1 + 3 * T3a1 * T3a1 * T3a1 T3c3 = -6 * T3a1 * T3a1 - 3 * T3a1 - 3 * T3a1 * T3a1 * T3a1 T3c4 = 1 + 3 * T3a1 + T3a1 * T3a1 * T3a1 + 3 * T3a1 * T3a1 T3 = T3c1 * T3e6 + T3c2 * T3e5 + T3c3 * T3e4 + T3c4 * T3e3 getMA(src, ma_length) => ma = 0.0 ma := switch mav 'SMA' => ta.sma(src, ma_length) 'EMA' => ta.ema(src, ma_length) 'WMA' => ta.wma(src, ma_length) 'DEMA' => DEMA 'TMA' => ta.sma(ta.sma(src, math.ceil(ma_length / 2)), math.floor(ma_length / 2) + 1) 'VAR' => VAR 'WWMA' => WWMA 'ZLEMA' => ZLEMA 'TSF' => TSF 'HULL' => HMA 'TILL' => T3 'KAMA' => Kama_Func(src, ma_length) ma ALL = getMA(src, ma_length) exMov = ALL fark = exMov * percent * 0.01 longStop = exMov - fark longStopPrev = nz(longStop[1], longStop) longStop := exMov > longStopPrev ? math.max(longStop, longStopPrev) : longStop shortStop = exMov + fark shortStopPrev = nz(shortStop[1], shortStop) shortStop := exMov < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and exMov > shortStopPrev ? 1 : dir == 1 and exMov < longStopPrev ? -1 : dir MOST = dir == 1 ? longStop : shortStop cro = _type and _type1 ? ta.crossover(exMov, exMov[1]) : _type ? ta.crossover(close, exMov) : ta.crossover(exMov, MOST) cru = _type and _type1 ? ta.crossunder(exMov, exMov[1]) : _type ? ta.crossunder(close, exMov) : ta.crossunder(exMov, MOST) direction = 0 direction := cro ? 1 : cru ? -1 : direction[1] col1 = exMov > exMov[1] col3 = exMov < exMov[1] colorM = col1 and _type and _type1 ? color.rgb(14, 241, 52) : col3 and _type and _type1 ? color.red : color.new(#00bcd4, 0) if (cro) strategy.entry('LONG', strategy.long) if (cru) strategy.close('LONG') plot(_type ? na : MOST, color=color.new(color.maroon, 0), linewidth=3, title='MOST') plot(exMov, color=colorM, linewidth=2, title='exMov') plotshape(cro and showsignallabels, title='BUY', text='BUY', location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.new(#00bcd4, 0), textcolor=color.new(color.white, 0)) plotshape(cru and showsignallabels, title='SELL', text='SELL', location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.new(#e91e63, 0), textcolor=color.new(color.white, 0))