
یہ حکمت عملی ایک ایسی خارجی حکمت عملی ہے جس میں مرحلہ وار اسٹاپ کا استعمال کیا جاتا ہے جس میں سلائڈ اسٹاپ نقصان ہوتا ہے۔ یہ اسٹاپ نقصان کو پہلے اسٹاپ نقصان کے توازن پر منتقل کرتا ہے جب پہلا اسٹاپ نقصان ہوتا ہے ، اور دوسرا اسٹاپ نقصان پہنچنے کے بعد اسٹاپ نقصان کو پہلے اسٹاپ نقصان پر منتقل کرتا ہے۔ اس طرح ایک مرحلہ وار اسٹاپ نقصان سلائڈ میکانیزم حاصل ہوتا ہے۔ یہ منافع کے کچھ حصوں کو لاک کرنے کے ساتھ ساتھ منافع کی ایک بڑی گنجائش کو برقرار رکھ سکتا ہے۔
یہ حکمت عملی بنیادی طور پر درج ذیل حصوں کے ذریعے مرحلہ وار اسٹاپ سلائڈنگ پوائنٹس کو حاصل کرتی ہے۔
خاص طور پر ، اس نے پہلے 100 پوائنٹس کی روک تھام کا فاصلہ اور 100/200/300 پوائنٹس کی 3 رکاوٹوں کا فاصلہ طے کیا۔ اس کے بعد موجودہ قیمت اور پوزیشن کی قیمت پر مبنی فائدہ اٹھانے والے فنکشن کی وضاحت کی گئی ہے۔curProfitInPts، اور ایک فنکشن جس میں پوائنٹس کی فاصلے پر اسٹاپ نقصان کی قیمت کا حساب لگایا جاتا ہےcalcStopLossPrice。
اور اس کی بنیادی منطق یہ ہے کہgetCurrentStageفنکشن ، یہ فیصلہ کرتا ہے کہ آیا اس وقت کوئی پوزیشن موجود ہے ، اور کیا فائدہ اٹھانے والے افراد کی تعداد کسی اسٹاپ پوائنٹ سے زیادہ ہے ، اگر اس سے زیادہ ہو تو اگلے مرحلے میں داخل ہوجائیں۔ مثال کے طور پر 100 اسٹاپ پوائنٹ تک پہنچنے کے بعد دوسرے مرحلے میں داخل ہوجائیں ، 200 اسٹاپ پوائنٹ تک پہنچنے کے بعد تیسرے مرحلے میں داخل ہوں۔
آخر میں ، مرحلے کے مطابق اسٹاپ نقصان کی قیمت میں ترمیم کی گئی ، تاکہ اسکیپ پوائنٹ اسٹاپ کو حاصل کیا جاسکے۔ پہلا مرحلہ اسٹاپ نقصان کو اصل ترتیب پر برقرار رکھتا ہے ، دوسرا مرحلہ منافع اور نقصان کے توازن میں منتقل ہوتا ہے ، تیسرا مرحلہ پہلے اسٹاپ پوائنٹ میں منتقل ہوتا ہے۔
اس طرح کی ایک سیڑھیوں والی سست روی کی حکمت عملی کے درج ذیل فوائد ہیں:
اس حکمت عملی میں کچھ خطرات بھی ہیں:
اس حکمت عملی کو مندرجہ ذیل طریقوں سے بہتر بنایا جاسکتا ہے:
/*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)