یہ حکمت عملی اوسط حقیقی طول و عرض (ATR) اشارے پر مبنی ہے جس میں متحرک اسٹاپ نقصان کی لائن مقرر کی گئی ہے ، جس میں اسٹاک کی قیمتوں میں ہونے والی تبدیلیوں کا سراغ لگایا گیا ہے ، جس میں اسٹاپ نقصان کی حفاظت کو حاصل کرنے کے ساتھ ساتھ زیادہ سے زیادہ منافع کو لاک کیا گیا ہے۔
اس حکمت عملی کو بنیادی طور پر مندرجہ ذیل اقدامات کے ذریعے نافذ کیا گیا ہے:
اے ٹی آر کی پیمائش کرنے کے لئے ، اے ٹی آر کی مدت nATRPeriod پیرامیٹر کے ذریعہ طے کی گئی ہے ، جو پہلے سے طے شدہ 5 ہے۔
اے ٹی آر کی قیمت پر مبنی اسٹاپ نقصان کی لائن ، اسٹاپ نقصان کی حد nATRMultip پیرامیٹر کے ذریعہ طے کی گئی ہے ، جو اے ٹی آر کے 3.5 گنا ہے۔
جب اسٹاک کی قیمت بڑھتی ہے تو ، اگر اسٹاپ لائن اس سے پہلے کی اسٹاپ لائن سے اوپر ہے تو ، اسٹاپ لائن کو اسٹاک کی قیمت سے کم اسٹاپ نقصان کی حد تک بڑھایا جائے گا۔ جب اسٹاک کی قیمت کم ہوتی ہے تو ، اگر اسٹاپ لائن اس سے پہلے کی اسٹاپ لائن سے نیچے ہے تو ، اسٹاپ لائن کو اسٹاپ نقصان کی حد سے زیادہ اسٹاپ نقصان کی حد تک کم کیا جائے گا۔
اسٹاک کی قیمتوں کا تعین کرنے کے لئے کہ آیا اسٹاپ نقصان کی لائن کو توڑ دیا گیا ہے یا نہیں ، جس سے خریدنے یا بیچنے کا اشارہ ملتا ہے۔
اسٹاپ لائن کو توڑنے کے اشارے کے مطابق ، زیادہ یا خالی پوزیشنوں میں داخل ہوں ، اور دوبارہ اسٹاپ لائن کو چھونے پر پوزیشنوں کو صاف کریں۔
جب اسٹاک کی قیمت بڑھتی ہے تو ، اسٹاپ نقصان کی لائن مسلسل اوپر کی طرف بڑھتی ہے ، جس سے منافع کو لاک کیا جاتا ہے۔ جب اسٹاک کی قیمت کم ہوتی ہے تو ، اسٹاپ نقصان کی لائن مسلسل نیچے کی طرف بڑھتی ہے ، جس سے نقصان ہوتا ہے۔ اے ٹی آر اشارے اسٹاک کی قیمت میں اتار چڑھاؤ کی حد کو زیادہ درست طریقے سے ظاہر کرسکتے ہیں ، اے ٹی آر کی حرکیات کے مطابق اسٹاپ نقصان کی لائن کو ایڈجسٹ کرسکتے ہیں ، جس سے زیادہ شدت پسند یا قدامت پسند ہونے سے بچنے سے بچا جاسکتا ہے۔
پیرامیٹرز کو بہتر بنانے کے لئے ، اے ٹی آر سائیکل پیرامیٹرز اور سٹاپ کی وسعت کو ایڈجسٹ کرنے کے لئے ، اسٹاپ اور ٹریکنگ کو متوازن کرنے کے لئے بہترین پیرامیٹرز کا مجموعہ تلاش کریں۔ اس کو مارکیٹ میں آنے کے وقت کو فلٹر کرنے کے لئے دوسرے تکنیکی اشارے کے ساتھ مل کر ، غیر ضروری اسٹاپ کو کم کیا جاسکتا ہے۔
اس حکمت عملی نے متحرک طور پر اے ٹی آر اسٹاپ لائن کو ایڈجسٹ کرنے کے طریقہ کار کے ذریعہ ، ہولڈنگ کے دوران نقصانات اور منافع کو لاک کرنے کو حاصل کیا۔ اسٹاک کی قیمتوں میں اتار چڑھاؤ کے لئے بہتر طور پر ڈھالنے کے لئے ، زیادہ سے زیادہ شدت پسند یا محافظ اسٹاپ کو روکنے سے بچنے کے لئے ، اے ٹی آر اشارے اسٹاپ لائن ایڈجسٹمنٹ کو زیادہ ہدف بناتے ہیں۔ لیکن پیرامیٹرز کی ترتیب اور دوبارہ داخلہ کی حکمت عملی کو مزید اصلاح کی ضرورت ہے ، تاکہ غیر ضروری اسٹاپ نقصان کو کم کیا جاسکے اور منافع کی جگہ کو بڑھایا جاسکے۔ یہ حکمت عملی مجموعی طور پر ایک بہتر متحرک ٹریکنگ اسٹاپ نقصانات کی سوچ ہے ، جو مزید تحقیق اور اطلاق کے قابل ہے۔
/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//@okadoke
////////////////////////////////////////////////////////////
// Based on Average True Range Trailing Stops Strategy by HPotter
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort
// The related article is copyrighted material from Stocks & Commodities Jun 2009
////////////////////////////////////////////////////////////
strategy(title="ATR Trailing Stops Strategy", shorttitle="ATRTSS", overlay = true,
initial_capital=100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type="percent", commission_value=0.0)
nATRPeriod = input(5, "ATR Period")
nATRMultip = input(3.5, "ATR Multiplier")
useShorts = input(false, "Test w/Shorts?")
daysBackMax = input(defval = 360, title = "Max Days Back to Test", minval = 0)
daysBackMin = input(defval = 0, title = "Min Days Back to Test", minval = 0)
msBackMax = 1000 * 60 * 60 * 24 * daysBackMax
msBackMin = 1000 * 60 * 60 * 24 * daysBackMin
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = na
xATRTrailingStop :=
iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss),
iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos = na
pos :=
iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
color = pos == -1 ? red: pos == 1 ? green : blue
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")
isWithinTimeBounds = (msBackMax == 0 or (time > (timenow - msBackMax))) and (msBackMin == 0 or (time < (timenow - msBackMin)))
buy = crossover(close, xATRTrailingStop)
sell = crossunder(close, xATRTrailingStop)
strategy.entry("LONG", long=true, when=buy and isWithinTimeBounds)
strategy.close("LONG", when=sell and isWithinTimeBounds)
strategy.entry("SHORT", long=false, when=useShorts and sell and isWithinTimeBounds)
strategy.close("SHORT", when=useShorts and buy and isWithinTimeBounds)