یہ ایک باہر نکلنے کی حکمت عملی ہے جو جزوی منافع لینے کے ساتھ ایک مرحلہ وار ٹریلنگ اسٹاپ کا استعمال کرتی ہے۔ یہ پہلے منافع لینے کی سطح تک پہنچنے کے بعد اسٹاپ نقصان کو بریک اینڈ میں منتقل کرتی ہے ، اور دوسری سطح تک پہنچنے کے بعد پہلے منافع لینے کی طرف بڑھتی ہے۔ اس سے منافع کی صلاحیت کو برقرار رکھتے ہوئے کچھ منافع میں تالے لگانے کی اجازت ملتی ہے۔
اس حکمت عملی کے اہم اجزاء یہ ہیں:
خاص طور پر، یہ سب سے پہلے 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)