यह एक बाहर निकलने की रणनीति है जो आंशिक लाभ लेने के साथ एक चरणबद्ध ट्रैलिंग स्टॉप का उपयोग करती है। यह पहले लाभ लेने के स्तर तक पहुंचने के बाद स्टॉप लॉस को ब्रेक-इवन में ले जाती है, और दूसरे स्तर तक पहुंचने के बाद पहले लाभ लेने के लिए जाती है। यह लाभ की क्षमता को बनाए रखते हुए कुछ लाभों में लॉक करने की अनुमति देता है।
इस रणनीति के प्रमुख घटक निम्नलिखित हैंः
विशेष रूप से, यह पहले 100 अंक का स्टॉप लॉस सेट करता है और 100/200/300 अंक पर लाभ लेता है।curProfitInPts
वर्तमान मूल्य और प्रवेश मूल्य के आधार पर वर्तमान लाभ की गणना करता है।calcStopLossPrice
फ़ंक्शन बिंदु दूरी के आधार पर स्टॉप लॉस मूल्य की गणना करता है।
मुख्य तर्कgetCurrentStage
उदाहरण के लिए चरण 2 100 अंक लाभ के बाद और चरण 3 200 अंक लाभ के बाद प्राप्त किया जाता है।
अंत में, स्टॉप लॉस को चरण के अनुसार संशोधित किया जाता है। चरण 1 मूल स्टॉप का उपयोग करता है, चरण 2 ब्रेक एवेंज, और चरण 3 पहले लाभ स्तर को ट्रेल करता है।
इस चरणबद्ध ट्रेलिंग स्टॉप रणनीति के फायदे:
विचार करने के लिए कुछ जोखिम हैंः
इस रणनीति में सुधार करने के कुछ तरीके हैंः
/*backtest start: 2023-11-20 00:00:00 end: 2023-11-27 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © adolgov // @description // when tp1 is reached, sl is moved to break-even // when tp2 is reached, sl is moved to tp1 // when tp3 is reached - exit //@version=4 strategy("Stepped trailing strategy example", overlay=true) // random entry condition longCondition = crossover(sma(close, 14), sma(close, 28)) if (longCondition) strategy.entry("My Long Entry Id", strategy.long) // sl & tp in points sl = input(100) tp1 = input(100) tp2 = input(200) tp3 = input(300) curProfitInPts() => if strategy.position_size > 0 (high - strategy.position_avg_price) / syminfo.mintick else if strategy.position_size < 0 (strategy.position_avg_price - low) / syminfo.mintick else 0 calcStopLossPrice(OffsetPts) => if strategy.position_size > 0 strategy.position_avg_price - OffsetPts * syminfo.mintick else if strategy.position_size < 0 strategy.position_avg_price + OffsetPts * syminfo.mintick else 0 calcProfitTrgtPrice(OffsetPts) => calcStopLossPrice(-OffsetPts) getCurrentStage() => var stage = 0 if strategy.position_size == 0 stage := 0 if stage == 0 and strategy.position_size != 0 stage := 1 else if stage == 1 and curProfitInPts() >= tp1 stage := 2 else if stage == 2 and curProfitInPts() >= tp2 stage := 3 stage stopLevel = -1. profitLevel = calcProfitTrgtPrice(tp3) // based on current stage set up exit // note: we use same exit ids ("x") consciously, for MODIFY the exit's parameters curStage = getCurrentStage() if curStage == 1 stopLevel := calcStopLossPrice(sl) strategy.exit("x", loss = sl, profit = tp3, comment = "sl or tp3") else if curStage == 2 stopLevel := calcStopLossPrice(0) strategy.exit("x", stop = stopLevel, profit = tp3, comment = "breakeven or tp3") else if curStage == 3 stopLevel := calcStopLossPrice(-tp1) strategy.exit("x", stop = stopLevel, profit = tp3, comment = "tp1 or tp3") else strategy.cancel("x") // this is debug plots for visulalize TP & SL levels plot(stopLevel > 0 ? stopLevel : na, style = plot.style_linebr) plot(profitLevel > 0 ? profitLevel : na, style = plot.style_linebr)