ट्रिपल एक्सपोनेंशियल मूविंग एवरेज प्रॉफिट टेकिंग एंड स्टॉप लॉस रणनीति बाजार में प्रवेश और निकास के लिए अलग-अलग अवधि के साथ तीन घातीय मूविंग एवरेज पर आधारित एक प्रवृत्ति-अनुसरण रणनीति है। यह जोखिम प्रबंधन के लिए लाभ लेने और स्टॉप-लॉस स्तरों को निर्धारित करने के लिए औसत सच्ची रेंज संकेतक का भी उपयोग करता है।
यह रणनीति तीन घातीय चलती औसत का उपयोग करती हैः तेज रेखा, मध्य रेखा और धीमी रेखा। यह लंबी हो जाती है जब मध्य रेखा धीमी रेखा के ऊपर पार करती है, और स्थिति बंद हो जाती है जब तेज रेखा मध्य रेखा के नीचे पार करती है। यह एक विशिष्ट प्रवृत्ति-अनुसरण रणनीति है जो तीन चलती औसत के पार होने के माध्यम से प्रवृत्ति की दिशा निर्धारित करती है।
साथ ही, रणनीति लाभ लेने और स्टॉप-लॉस स्तरों की गणना करने के लिए औसत सच्ची रेंज संकेतक का लाभ उठाती है। विशेष रूप से, लंबी स्थिति के लिए लाभ लेना प्रवेश मूल्य + औसत सच्ची रेंज * लाभ कारक है, और छोटी स्थिति के लिए यह प्रवेश मूल्य - औसत सच्ची रेंज * लाभ कारक है। स्टॉप लॉस तर्क समान है। यह प्रभावी रूप से बड़े नुकसान के जोखिम को सीमित करता है।
जोखिम को कम करने के उपायों में निम्न शामिल हैंः चलती औसत अवधि को छोटा करना, लाभ/रोक कारक का अनुकूलन करना और सहायक संकेतक जोड़ना।
कुल मिलाकर यह स्थिर प्रदर्शन और सरल मापदंडों के माध्यम से आसान कार्यान्वयन के साथ एक प्रभावी प्रवृत्ति-अनुसरण रणनीति है। औसत सच्ची सीमा के आधार पर गतिशील लाभ लेने और स्टॉप लॉस प्रति-साइड जोखिम को सीमित करता है। लेकिन पैरामीटर अनुकूलन और संकेतक संयोजन को ओवरफिट या निर्णय देरी से बचने के लिए सावधानीपूर्वक करने की आवश्यकता है। संतुलन पर, इस रणनीति में अच्छी जोखिम-इनाम प्रोफ़ाइल है और विचार करने योग्य है।
/*backtest start: 2024-01-04 00:00:00 end: 2024-02-03 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //© Densz strategy("3EMA with TP & SL (ATR)", overlay=true ) // INPUTS startTime = input(title="Start Time", type = input.time, defval = timestamp("01 Jan 2017 00:00 +0000")) endTime = input(title="End Time", type = input.time, defval = timestamp("01 Jan 2022 00:00 +0000")) slowEMALength = input(title="Slow EMA Length", type = input.integer, defval = 55) middleEMALength = input(title="Middle EMA Length", type = input.integer, defval = 21) fastEMALength = input(title="Fast EMA Length", type = input.integer, defval = 9) trendMALength = input(title="Trend indicator MA Length", type = input.integer, defval = 200) atrLength = input(title="ATR Length", type = input.integer, defval = 14) tpATRMult = input(title="Take profit ATR multiplier", type = input.integer, defval = 3) slATRMult = input(title="Stop loss ATR multiplier", type = input.integer, defval = 2) rsiLength = input(title="RSI Length", type = input.integer, defval = 14) // Indicators slowEMA = ema(close, slowEMALength) middEMA = ema(close, middleEMALength) fastEMA = ema(close, fastEMALength) atr = atr(atrLength) rsiValue = rsi(close, rsiLength) isRsiOB = rsiValue >= 80 isRsiOS = rsiValue <= 20 sma200 = sma(close, trendMALength) inDateRange = true // Plotting plot(slowEMA, title="Slow EMA", color=color.red, linewidth=2, transp=50) plot(middEMA, title="Middle EMA", color=color.orange, linewidth=2, transp=50) plot(fastEMA, title="Fast EMA", color=color.green, linewidth=2, transp=50) plot(sma200, title="SMA Trend indicator", color=color.purple, linewidth=3, transp=10) plotshape(isRsiOB, title="Overbought", location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, text="OB") plotshape(isRsiOS, title="Oversold", location=location.belowbar, color=color.green, transp=0, style=shape.triangledown, text="OS") float takeprofit = na float stoploss = na var line tpline = na var line slline = na if strategy.position_size != 0 takeprofit := takeprofit[1] stoploss := stoploss[1] line.set_x2(tpline, bar_index) line.set_x2(slline, bar_index) line.set_extend(tpline, extend.none) line.set_extend(slline, extend.none) // STRATEGY goLong = crossover(middEMA, slowEMA) and inDateRange closeLong = crossunder(fastEMA, middEMA) and inDateRange if goLong takeprofit := close + atr * tpATRMult stoploss := close - atr * slATRMult // tpline := line.new(bar_index, takeprofit, bar_index, takeprofit, color=color.green, width=2, extend=extend.right, style=line.style_dotted) // slline := line.new(bar_index, stoploss, bar_index, stoploss, color=color.red, width=2, extend=extend.right, style=line.style_dotted) // label.new(bar_index, takeprofit, "TP", style=label.style_labeldown) // label.new(bar_index, stoploss, "SL", style=label.style_labelup) strategy.entry("Long", strategy.long, when = goLong) strategy.exit("TP/SL", "Long", stop=stoploss, limit=takeprofit) if closeLong takeprofit := na stoploss := na strategy.close(id = "Long", when = closeLong) if (not inDateRange) strategy.close_all()