اے ٹی آر پر مبنی ٹرینڈ ٹریکنگ حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-01-05 16:28:48
ٹیگز:

img

جائزہ

یہ اوسط حقیقی رینج (اے ٹی آر) پر مبنی رجحان ٹریکنگ کی حکمت عملی ہے۔ یہ اشارے کی اقدار کا حساب لگانے اور قیمت کے رجحان کی سمت کا تعین کرنے کے لئے اے ٹی آر کا استعمال کرتا ہے۔ یہ حکمت عملی خطرات کو کنٹرول کرنے کے لئے اسٹاپ نقصان کا طریقہ کار بھی فراہم کرتی ہے۔

حکمت عملی منطق

اس حکمت عملی میں تین اہم پیرامیٹرز استعمال کیے جاتے ہیں: مدت ، ضرب اور اندراج / باہر نکلنے کا نقطہ۔ ڈیفالٹ پیرامیٹرز اے ٹی آر کے 14 ادوار اور 4 کا ضرب ہیں۔

حکمت عملی سب سے پہلے طویل اوسط قیمت (بائیو وی جی) اور مختصر اوسط قیمت (سیلا وی جی) کا حساب لگاتی ہے ، پھر موجودہ رجحان کی سمت کا تعین کرنے کے لئے ان دونوں اوسطوں کے درمیان قیمت کے تعلقات کا موازنہ کرتی ہے۔ اگر قیمت مختصر اوسط قیمت سے زیادہ ہے تو ، اسے طویل سمجھا جاتا ہے۔ اگر قیمت طویل اوسط قیمت سے کم ہے تو ، اسے مختصر سمجھا جاتا ہے۔

اس کے علاوہ ، حکمت عملی میں ٹریلنگ اسٹاپ نقصان کی ترتیب کے لئے اے ٹی آر شامل ہے۔ خاص طور پر ، یہ اے ٹی آر کی 14 مدت کے وزن والے چلتے ہوئے اوسط کو ضرب (ڈیفالٹ 4) کے ذریعہ ضرب دیتا ہے۔ اس سے اسٹاپ نقصان کی دوری کو مارکیٹ کی اتار چڑھاؤ کی بنیاد پر ایڈجسٹ کرنے کی اجازت ملتی ہے۔

جب اسٹاپ نقصان شروع ہوتا ہے تو، حکمت عملی منافع میں مقفل کرنے کے لئے پوزیشن کو بند کرے گی.

فوائد

  1. رجحان کے فیصلے کی بنیاد پر، یہ منافع کے لئے مسلسل رجحان کی پیروی کر سکتا ہے
  2. اے ٹی آر کا استعمال کریں متحرک طور پر سٹاپ نقصان فاصلے کو ایڈجسٹ کرنے کے لئے، مؤثر طریقے سے خطرات کو کنٹرول
  3. داخلہ اور باہر نکلنے کے مقامات کا حساب لگانا آسان اور براہ راست ، سمجھنے اور لاگو کرنے میں آسان

خطرات اور حل

  1. جب رجحان بدلتا ہے تو بڑے نقصانات کا سامنا کرنا پڑ سکتا ہے
    • سٹاپ نقصان کے فاصلے کو بہتر بنانے کے لئے ATR مدت اور ضرب کو مناسب طریقے سے ایڈجسٹ کریں
  2. مختلف مارکیٹوں میں متعدد چھوٹے نقصانات پیدا کرے گا
    • مختلف مارکیٹوں سے بچنے کے لئے فلٹر کے حالات شامل کریں
  3. غلط پیرامیٹرز کی ترتیبات حکمت عملی کی کارکردگی کو خراب کر سکتی ہیں
    • زیادہ سے زیادہ تلاش کرنے کے لئے کثیر پیرامیٹر کی اصلاح انجام

اصلاح کی ہدایات

  1. مختلف بازاروں میں پوزیشن کھولنے سے بچنے کے لئے فلٹرنگ کے لئے دیگر اشارے شامل کریں
  2. ATR مدت اور ضرب کے پیرامیٹرز کو بہتر بنانے کے لئے روکنے کے فاصلے کو زیادہ معقول بنانے کے لئے
  3. مارکیٹ کے حالات کی بنیاد پر پوزیشن سائزنگ کنٹرول شامل کریں

نتیجہ

مجموعی طور پر یہ ایک سادہ اور عملی رجحان ٹریکنگ حکمت عملی ہے۔ اس کے نفاذ کے لئے صرف چند پیرامیٹرز کی ضرورت ہوتی ہے ، اور خطرات کو مؤثر طریقے سے کنٹرول کرنے کے لئے اسٹاپ کو متحرک طور پر ایڈجسٹ کرنے کے لئے اے ٹی آر کا استعمال کرتا ہے۔ فلٹرنگ کے لئے دیگر معاون اشارے کے ساتھ مل کر ، اسے مزید بہتر بنایا جاسکتا ہے۔ عام طور پر ، یہ حکمت عملی ان لوگوں کے لئے موزوں ہے جو رجحان ٹریکنگ کی حکمت عملیوں کے بارے میں جاننا چاہتے ہیں ، اور اسے زیادہ جدید حکمت عملیوں کے لئے بنیادی جزو کے طور پر بھی استعمال کیا جاسکتا ہے۔


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Trend Strategy by zdmre', shorttitle='Trend Strategy', overlay=true, pyramiding=0, currency=currency.USD, default_qty_type=strategy.percent_of_equity, initial_capital=10000, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.005)
show_STOPLOSSprice = input(true, title='Show TrailingSTOP Prices')
src = input(close, title='Source')
out2 = ta.ema(src, 20)

buyavg = (close + high) / 2.02 - high * (1 - open / close) * (1 - low * open / (high * close))
sellavg = ((low + close) / 1.99 + low * (1 - low / open) * (1 - low * open / (close * high)) / 1.1 + out2 )/ 2

// === INPUT BACKTEST RANGE ===
fromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12)
fromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
fromYear = input.int(defval=2021, title='From Year', minval=1970)
thruMonth = input.int(defval=1, title='Thru Month', minval=1, maxval=12)
thruDay = input.int(defval=1, title='Thru Day', minval=1, maxval=31)
thruYear = input.int(defval=2100, title='Thru Year', minval=1970)

// === INPUT SHOW PLOT ===
showDate = input(defval=true, title='Show Date Range')

// === FUNCTION EXAMPLE ===
start = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59)  // backtest finish window
window() => true


// === TRAILING STOP LOSS === //

ATR_Period = input(14)
ATR_Mult = input(4.0)
var float ATR_TrailSL = na
var int pos = na
atr = ta.rma (ta.tr(true), 14)
xATR = ta.atr(ATR_Period)
nLoss = ATR_Mult * xATR

iff_1 = close > nz(ATR_TrailSL[1], 0) ? close - nLoss : close + nLoss
iff_2 = close < nz(ATR_TrailSL[1], 0) and close[1] < nz(ATR_TrailSL[1], 0) ? math.min(nz(ATR_TrailSL[1]), close + nLoss) : iff_1
ATR_TrailSL := close > nz(ATR_TrailSL[1], 0) and close[1] > nz(ATR_TrailSL[1], 0) ? math.max(nz(ATR_TrailSL[1]), close - nLoss) : iff_2

iff_3 = close[1] > nz(ATR_TrailSL[1], 0) and close < nz(ATR_TrailSL[1], 0) ? -1 : nz(pos[1], 0)
pos := close[1] < nz(ATR_TrailSL[1], 0) and close > nz(ATR_TrailSL[1], 0) ? 1 : iff_3

atr_color = pos == -1 ? color.green : pos == 1 ? color.red : color.aqua
atrtrend = plot(ATR_TrailSL, 'Trailing StopLoss', atr_color, linewidth=2)

// ===  Stop Loss === //
slGroup = 'Stop Loss'
useSL = input.bool(false, title='╔══════   Enable   ══════╗', group=slGroup, tooltip='If you are using this strategy for Scalping or Futures market, we do not recommend using Stop Loss.')
SLbased = input.string(title='Based on', defval='Percent', options=['ATR', 'Percent'], group=slGroup, tooltip='ATR: Average True Range\nPercent: eg. 5%.')
multiATR = input.float(10.0, title='ATR   Mult', group=slGroup, inline='atr')
lengthATR = input.int(14, title='Length', group=slGroup, inline='atr')
SLPercent = input.float(5, title='Percent', group=slGroup) * 0.01
Shortposenter = input.bool(false, title='ShortPosition')

longStop = 0.0
shortStop = 0.0

if SLbased == 'ATR'
    longStop := ta.valuewhen(pos == 1, low, 0) - ta.valuewhen(pos == 1, ta.rma(ta.tr(true), lengthATR), 0) * multiATR
    longStopPrev = nz(longStop[1], longStop)
    longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop

    shortStop := ta.valuewhen(pos == -1, ta.rma(ta.tr(true), lengthATR), 0) * multiATR + ta.valuewhen(pos == -1, high, 0)
    shortStopPrev = nz(shortStop[1], shortStop)
    shortStop := close[1] > shortStopPrev ? math.max(shortStop, shortStopPrev) : shortStop
    shortStop
if SLbased == 'Percent'
    longStop := strategy.position_avg_price * (1 - SLPercent)
    shortStop := strategy.position_avg_price * (1 + SLPercent)
    shortStop
exitLong  = pos == -1 

// === PlotColor === //
buySignal = pos == 1 and pos[1] == -1
plotshape(buySignal, title="Long", location=location.belowbar, style=shape.labelup, size=size.normal, color=color.new(color.green,50), text='Buy', textcolor=color.white)
exitSignal = pos == -1 and pos[1] == 1
plotshape(exitSignal, title="Exit", location=location.abovebar, style=shape.labeldown, size=size.normal, color=color.new(color.red,50), text='Exit', textcolor=color.white)

hPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0, editable = false)
longFill = (pos == 1 ? color.new(color.green,80) : na) 
shortFill = (pos == -1 ? color.new(color.red,80) : na)
fill(hPlot, atrtrend,color=longFill)
fill(hPlot,atrtrend, color=shortFill)

// === Strategy === //
strategy.entry('Long', strategy.long,limit = buyavg, when=window() and pos == 1,comment="Entry: "+str.tostring(buyavg))
strategy.close('Long', when=window() and exitLong , comment='Exit: '+str.tostring(sellavg) )

if Shortposenter
    strategy.entry('Short', strategy.short, when=window() and pos== -1,comment="Entry: "+str.tostring(close))
    strategy.close('Short', when=window() and pos == 1 , comment='Exit: ')

if useSL
    strategy.exit('Stop Loss', 'Long', stop=longStop)
    
// === Show StopLoss Price === //
if show_STOPLOSSprice
    if pos == -1
        label ShortStop = label.new(bar_index, na, 'SL: ' + str.tostring(ATR_TrailSL), color=color.green, textcolor=color.white, style=label.style_none, yloc=yloc.abovebar, size=size.small)
        label.delete(ShortStop[1])

    if pos == 1
        label LongStop = label.new(bar_index, na, 'SL: ' + str.tostring(ATR_TrailSL), color=color.red, textcolor=color.white, style=label.style_none, yloc=yloc.belowbar, size=size.small)
        label.delete(LongStop[1])

مزید