
یہ ایک بہت ہی آسان حکمت عملی ہے۔ اس میں صرف ایک ٹریکنگ اسٹاپ ہوتا ہے۔ جب اسٹاپ ٹرگر ہوتا ہے تو ، پوزیشن کو الٹ دیا جاتا ہے اور نئی پوزیشن پر ٹریکنگ اسٹاپ لگایا جاتا ہے۔
یہ حکمت عملی تین قسم کے اسٹاپ پر مبنی ہے: فیصد اسٹاپ، اے ٹی آر اسٹاپ، اور مطلق اسٹاپ۔ جب اسٹاپ ٹرگر ہوتا ہے تو ، پوزیشن کو الٹ دیا جاتا ہے اور نئی پوزیشن پر ٹریکنگ اسٹاپ لگایا جاتا ہے۔
خاص طور پر ، حکمت عملی پہلے منتخب کردہ اسٹاپ کی قسم کے مطابق اسٹاپ کی قیمت کا حساب لگاتی ہے۔ پھر یہ فیصلہ کرے گی کہ آیا کوئی پوزیشن لگانے کا اشارہ ہے ، یعنی جب اونچائی پچھلے اسٹاپ کی قیمت سے زیادہ ہو تو زیادہ ، اور کم قیمت سے کم قیمت پر خالی ہو۔ جب یہ داخل ہوتا ہے تو ، یہ اسٹاپ کی قیمت کو حقیقی وقت میں اپ ڈیٹ کرتا ہے ، جس سے اس کی قیمت میں ہونے والی تبدیلیوں کا سراغ لگاتا ہے۔
اس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ یہ بہت آسان ہے ، صرف ایک اسٹاپ کو ٹریک کرنے کی ضرورت ہے ، اور داخلے کے نقطہ انتخاب اور باہر نکلنے کے نقطہ انتخاب پر غور کرنے کی ضرورت نہیں ہے۔ اسٹاپ نقصان کی قیمتوں کی لچکدار ترتیب بھی اس کی اطلاق کو وسیع تر بناتی ہے۔
فکسڈ اسٹاپ کے مقابلے میں ، اس کا استعمال ٹریکنگ اسٹاپ سے زیادہ منافع کو لاک کرنے کے لئے کیا جاتا ہے ، اور اس کے ساتھ ساتھ اسٹاپ کے جھٹکے جانے کے امکانات کو بھی کم کیا جاتا ہے۔ ہر بار جب اسٹاپ ٹرگر ہوتا ہے تو پوزیشن کو الٹ دیا جاتا ہے ، جس سے قیمت میں الٹ جانے کا موقع مل جاتا ہے۔
اس حکمت عملی میں جو اہم خطرہ ہوسکتا ہے وہ یہ ہے کہ اسٹاپ قیمت کی غلط ترتیب سے پیدا ہونے والا خطرہ ہے۔ اسٹاپ قیمت کی حد بہت زیادہ مقرر کی جاسکتی ہے ، جس سے نقصانات میں اضافہ ہوسکتا ہے۔ اسٹاپ قیمت کی حد بہت کم مقرر کی جاسکتی ہے ، جس کی وجہ سے اسٹاپ نقصانات کو کثرت سے متحرک کیا جاسکتا ہے۔ مارکیٹ کے حالات کے مطابق اس کو بہتر بنانے کی ضرورت ہے۔
ایک اور خطرہ یہ ہے کہ اسٹاپ نقصان کے بعد پوزیشن کی واپسی کی سمت کا فیصلہ غلط ہے ، جس سے قیمتوں میں واپسی کے مواقع ضائع ہوجاتے ہیں یا نقصان میں اضافہ ہوتا ہے۔ اس کے لئے رجحان اور معاون مزاحمت کے فیصلے کے ساتھ مل کر واپسی کا بہترین وقت طے کرنا ضروری ہے۔
اس حکمت عملی کو مندرجہ ذیل پہلوؤں سے بہتر بنایا جاسکتا ہے:
یہ حکمت عملی ایک سادہ ٹریکنگ سٹاپ نقصان کے طریقہ کار کے ذریعے منافع بخش بناتی ہے ، جو ابتدائی افراد کے لئے ایک قابل قدر حکمت عملی ہے۔ روایتی سٹاپ نقصان کی حکمت عملی کے مقابلے میں ، اس میں اسٹاپ نقصان کے بعد ریورس ٹرانسمیشن پوزیشن کا طریقہ کار شامل کیا گیا ہے ، جس سے اضافی آمدنی حاصل کی جاسکتی ہے۔ مسلسل جانچ اور اصلاح کے ذریعہ ، یہ حکمت عملی ایک بہت ہی عملی مقدار کا طریقہ کار بن سکتی ہے۔
/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Trailing SL Strategy [QuantNomad]", shorttitle = "TrailingSL [QN]", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 50)
////////////
// Inputs //
sl_type = input("%", options = ["%", "ATR", "Absolute"])
sl_perc = input(4, title = "% SL", type = input.float)
atr_length = input(10, title = "ATR Length")
atr_mult = input(2, title = "ATR Mult", type = input.float)
sl_absol = input(10, title = "Absolute SL", type = input.float)
// BACKTESTING RANGE
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2016, title = "From Year", minval = 1970)
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate
//////////////////
// CALCULATIONS //
// SL values
sl_val = sl_type == "ATR" ? atr_mult * atr(atr_length) :
sl_type == "Absolute" ? sl_absol :
close * sl_perc / 100
// Init Variables
pos = 0
trailing_sl = 0.0
// Signals
long_signal = nz(pos[1]) != 1 and high > nz(trailing_sl[1])
short_signal = nz(pos[1]) != -1 and low < nz(trailing_sl[1])
// Calculate SL
trailing_sl := short_signal ? high + sl_val :
long_signal ? low - sl_val :
nz(pos[1]) == 1 ? max(low - sl_val, nz(trailing_sl[1])) :
nz(pos[1]) == -1 ? min(high + sl_val, nz(trailing_sl[1])) :
nz(trailing_sl[1])
// Position var
pos := long_signal ? 1 : short_signal ? -1 : nz(pos[1])
//////////////
// PLOTINGS //
plot(trailing_sl, linewidth = 2, color = pos == 1 ? color.green : color.red)
//////////////
// STRATEGY //
if (time_cond and pos != 1)
strategy.entry("long", true, stop = trailing_sl)
if (time_cond and pos != -1)
strategy.entry("short", false, stop = trailing_sl)