
یہ حکمت عملی قیمتوں کے چینلز کی تعمیر پر مبنی ہے ، جس میں قیمتوں کے رجحانات کی سمت کا تعین کرنے کے لئے چینل کی حد کا استعمال کیا جاتا ہے ، اور منافع کو مقفل کرنے کے لئے اسٹاپ لاس ٹریکنگ کا تعین کیا جاتا ہے۔
ڈبل میڈین لائن قیمت چینل حکمت عملی قیمت چینل کی تعمیر کے لئے فاسٹ ای ایم اے اور سست ای ایم اے کا استعمال کرتی ہے۔ فاسٹ ای ایم اے پیرامیٹر 89 سائیکل ہے ، سست ای ایم اے پیرامیٹر 200 سائیکل ہے۔ قیمت چینل کی رینج کی تعمیر کے لئے تین میڈین لائنوں کا استعمال کرتے ہوئے ، اعلی قیمت ، کم قیمت ، اور اختتامی قیمت پر مبنی ہے۔ چینل کے اوپر اور نیچے کی لکیروں پر 34 سائیکلوں کی اعلی قیمت ای ایم اے اور کم قیمت ای ایم اے ہے۔
جب تیز EMA سست EMA کے اوپر اور قیمت نیچے سے نیچے ہوتی ہے تو اس کا فیصلہ عروج پر ہوتا ہے۔ جب تیز EMA سست EMA کے نیچے اور قیمت اوپر سے اوپر ہوتی ہے تو اس کا فیصلہ نیچے کی طرف ہوتا ہے۔
اسٹریٹجی میں اضافہ کے رجحان میں ، اسٹریٹجی میں کمی کی جائے گی جب رجحان کا رخ موڑنے کا تعین کیا جائے گا۔ اسٹریٹجی میں کمی کے رجحان میں ، اسٹریٹجی میں اضافہ کی جائے گی جب رجحان کا رخ موڑنے کا تعین کیا جائے گا۔
اس کے علاوہ ، حکمت عملی میں اسٹاپ نقصان کی کھوج کی خصوصیت ہے۔ پوزیشن رکھنے کے بعد ، اسٹاپ نقصان کی قیمت کو ٹریک کرنے کے لئے حقیقی وقت میں اپ ڈیٹ کیا جاتا ہے ، جس سے منافع کو لاک کیا جاسکتا ہے۔
اس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ قیمتوں کے رجحانات کا تعین کرنے کے لئے قیمتوں کے چینلز کی تعمیر کے لئے دوہری مساوی لائنوں کا استعمال کیا جاتا ہے ، پھر اس کے ساتھ مل کر الٹ پلٹ کرنے کا حکم دیا جاتا ہے ، تاکہ اونچائی اور گرنے کا پیچھا نہ کیا جاسکے۔ اس کے ساتھ ساتھ موبائل اسٹاپ نقصان کی کھوج کی خصوصیت ہے ، جس سے منافع کو مقفل کیا جاسکتا ہے اور نقصان کے خطرے کو کم کیا جاسکتا ہے۔
دیگر فوائد یہ ہیں: پیرامیٹرز کو بہتر بنانے کی جگہ بڑی ہے ، مختلف اقسام اور ادوار کے لئے پیرامیٹرز کو ایڈجسٹ کیا جاسکتا ہے۔ اصل وقت میں اسٹاپ نقصان کی قیمت کو اپ ڈیٹ کریں ، آپریشن کا خطرہ کم ہے۔
اس حکمت عملی کا بنیادی خطرہ یہ ہے کہ الٹ کے اشارے کا اندازہ لگانے کا اثر خراب ہے ، غلط فہمی پیدا ہوسکتی ہے۔ اس وقت پیرامیٹرز کو بہتر بنانے کی ضرورت ہے تاکہ اس بات کا یقین کیا جاسکے کہ رجحان الٹ کا اثر ہے۔
اس کے علاوہ ، اسٹاپ نقصان کی ترتیب بھی بہت اہم ہے۔ اسٹاپ نقصان کی حد سے زیادہ ہونے کی صورت میں ناکافی نقصان کا خطرہ ہے۔ اسٹاپ نقصان کی حد سے زیادہ ہونے کی صورت میں زیادہ نقصان کا خطرہ ہے۔ اس کو مخصوص نسل کے مطابق ایڈجسٹ کرنے کی ضرورت ہے۔
آخر میں ، اعداد و شمار کے مسائل بھی حکمت عملی کی ناکامی کا سبب بن سکتے ہیں۔ اس بات کو یقینی بنائیں کہ قابل اعتماد ، مستقل اور کافی تاریخی اعداد و شمار کا استعمال بیک اپ اور عملی طور پر تصدیق کی حکمت عملی کے لئے کیا جائے۔
اس حکمت عملی کو بہتر بنانے کے لئے مندرجہ ذیل پہلوؤں پر توجہ مرکوز کی گئی ہے:
تیز EMA اور سست EMA کے دورانیے کو بہتر بنایا جاسکتا ہے ، جس میں مختلف پیرامیٹرز کے مجموعے کو اثر انداز کیا جاسکتا ہے
قیمت چینل کے اوپر اور نیچے کے پیرامیٹرز کو بھی ایڈجسٹ کیا جاسکتا ہے تاکہ زیادہ موزوں دورانیہ پیرامیٹرز کو تلاش کیا جاسکے
اسٹاپ نقصان کی ترتیب بہت اہم ہے اور مختلف پیرامیٹرز کی جانچ پڑتال کی جاسکتی ہے تاکہ اسٹاپ نقصان کی حکمت عملی کو بہتر بنایا جاسکے
ٹیسٹ کیا جا سکتا ہے کہ آیا رجحانات کو تبدیل کرنے کے لئے دوسرے اشارے متعارف کرایا گیا ہے، یا نہیں.
اس حکمت عملی کا مجموعی طور پر کام کرنے کا عمل معقول طور پر ہموار ہوتا ہے ، دوہری مساوی لائن چینل کا استعمال کرتے ہوئے رجحان کی سمت کا تعین کرنے کے لئے اور منافع کو مقفل کرنے کے لئے متحرک رکاوٹوں کے ساتھ ، یہ ایک زیادہ مستحکم رجحان سے باخبر رہنے کی حکمت عملی ہے۔ پیرامیٹرز کو بہتر بنانے اور ونڈ کنٹرول کی ترتیبات کو بہتر بنانے کے ذریعہ ، یہ حکمت عملی ایک موثر مقدار میں تجارت کی حکمت عملی میں سے ایک بن سکتی ہے۔
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Trend trader Strategy", overlay=true)
//f you want to trade shallower Pullbacks for quicker scalps, try reducing the
// PAC and EMA combination lengths for example:
// * 21 PAC and 55, 144, 377 for fast, medium, slow EMAs
// * 13 PAC and 34, 89, 233 for fast, medium, slow EMAs
// - Each alert should be evaluated on it's own merits, the alerts are designed to highlight possible
// scalping trades from Pullback recoveries around the PAC.
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 6, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
isMon() => dayofweek(time('D')) == dayofweek.monday
isTue() => dayofweek(time('D')) == dayofweek.tuesday
isWed() => dayofweek(time('D')) == dayofweek.wednesday
isThu() => dayofweek(time('D')) == dayofweek.thursday
isFri() => dayofweek(time('D')) == dayofweek.friday
// Calculate start/end date and time condition
DST = 1 //day light saving for usa
//--- Europe
London = iff(DST==0,"0000-0900","0100-1000")
//--- America
NewYork = iff(DST==0,"0400-1400","0500-1500")
//--- Pacific
Sydney = iff(DST==0,"1300-2200","1400-2300")
//--- Asia
Tokyo = iff(DST==0,"1500-2400","1600-0100")
customTime =iff(DST==0,"2300-1500","2400-1600")
customTime2 =iff(DST==0,"0800-1500","0900-1600")
//-- Time In Range
timeinrange(res, sess) => time(res, sess) != 0
london = timeinrange(timeframe.period, London)
newyork = timeinrange(timeframe.period, NewYork)
c_time = timeinrange(timeframe.period,customTime)
c_time2 = timeinrange(timeframe.period,customTime2)
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate and (london or newyork)
// === INPUTS ===
HiLoLen = input(34, minval=2, title="High Low PAC channel Length")
fastEMAlength = input(89, minval=2)
mediumEMAlength = input(200, minval=2)
slowEMAlength = input(600, minval=2)
ShowFastEMA = input(false)
ShowMediumEMA = input(false)
ShowSlowEMA = input(false)
ShowHHLL = input(false)
ShowFractals = input(false)
filterBW = input(false, title="Show Ideal Fractals Only")
ShowBarColor = input(true, title="Show coloured Bars around PAC")
ShowBuySell = input(false, title="Show Buy/Sell Alert Arrows")
Lookback = input(3, minval=1, title="Pullback Lookback for PAC Cross Check")
DelayArrow = input(false, title="Show Alert Arrows Only on Closed Candles")
Delay = DelayArrow ? 1 : 0
ShowTrendBGcolor= input(true)
UseHAcandles = input(false, title="Use Heikin Ashi Candles in Algo Calculations")
//
// === /INPUTS ===
// === BASE FUNCTIONS ===
haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close
haOpen = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open
haHigh = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high
haLow = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low
// ||--- Fractal Recognition Functions: ---------------------------------------------------------------||
isRegularFractal(mode) =>
ret = mode == 1 ? high[4] < high[3] and high[3] < high[2] and high[2] > high[1] and
high[1] > high[0] : mode == -1 ?
low[4] > low[3] and low[3] > low[2] and low[2] < low[1] and low[1] < low[0] :
false
ret
isBWFractal(mode) =>
ret = mode == 1 ? high[4] < high[2] and high[3] <= high[2] and high[2] >= high[1] and
high[2] > high[0] : mode == -1 ?
low[4] > low[2] and low[3] >= low[2] and low[2] <= low[1] and low[2] < low[0] :
false
ret
// ||-----------------------------------------------------------------------------------------------------||
//
// === /BASE FUNCTIONS ===
// === SERIES SETUP ===
//
// ||--- Setup Moving Averages and PAC channel:
// ||-----------------------------------------------------------------------------------------------------||
fastEMA = ema(haClose, fastEMAlength)
mediumEMA = ema(haClose, mediumEMAlength)
slowEMA = ema(haClose, slowEMAlength)
pacC = ema(haClose, HiLoLen)
pacL = ema(haLow, HiLoLen)
pacU = ema(haHigh, HiLoLen)
TrendDirection = fastEMA > mediumEMA and pacL > mediumEMA ? 1 :
fastEMA < mediumEMA and pacU < mediumEMA ? -1 : 0
// ||--- Fractal Recognition:
// ||-----------------------------------------------------------------------------------------------------||
filteredtopf = filterBW ? isRegularFractal(1) : isBWFractal(1)
filteredbotf = filterBW ? isRegularFractal(-1) : isBWFractal(-1)
// ||-----------------------------------------------------------------------------------------------------||
// ||--- Higher Highs, Lower Highs, Higher Lows, Lower Lows -------------------------------------------||
valuewhen_H0 = valuewhen(filteredtopf == true, high[2], 0)
valuewhen_H1 = valuewhen(filteredtopf == true, high[2], 1)
valuewhen_H2 = valuewhen(filteredtopf == true, high[2], 2)
//
higherhigh = filteredtopf == false ? false :
valuewhen_H1 < valuewhen_H0 and valuewhen_H2 < valuewhen_H0
lowerhigh = filteredtopf == false ? false :
valuewhen_H1 > valuewhen_H0 and valuewhen_H2 > valuewhen_H0
valuewhen_L0 = valuewhen(filteredbotf == true, low[2], 0)
valuewhen_L1 = valuewhen(filteredbotf == true, low[2], 1)
valuewhen_L2 = valuewhen(filteredbotf == true, low[2], 2)
//
higherlow = filteredbotf == false ? false :
valuewhen_L1 < valuewhen_L0 and valuewhen_L2 < valuewhen_L0
lowerlow = filteredbotf == false ? false :
valuewhen_L1 > valuewhen_L0 and valuewhen_L2 > valuewhen_L0
//
// === /SERIES ===
//
// === PLOTTING ===
//
// Plot the Price Action Channel (PAC) base on EMA high,low and close
L = plot(pacL, color=color.gray, linewidth=1, title="High PAC EMA", transp=50)
U = plot(pacU, color=color.gray, linewidth=1, title="Low PAC EMA", transp=50)
C = plot(pacC, color=color.red, linewidth=2, title="Close PAC EMA", transp=0)
fill(L, U, color=color.gray, transp=90, title="Fill HiLo PAC")
// Colour bars according to the close position relative to the PAC selected.
BARcolor = haClose > pacU ? color.blue : haClose < pacL ? color.red : color.gray
barcolor(ShowBarColor ? BARcolor : na, title="Bar Colours")
//
BGcolor = TrendDirection == 1 ? color.green :
TrendDirection == -1 ? color.red : color.yellow
bgcolor(ShowTrendBGcolor ? BGcolor : na, transp=90, title="Trend BG Color")
// STEP 1:
// Configure trail stop level with input options (optional)
longTrailPerc = input(title="Trail Long Loss (%)",
type=input.float, minval=0.0, step=0.05, defval=0.1) * 0.01
shortTrailPerc = input(title="Trail Short Loss (%)",
type=input.float, minval=0.0, step=0.05, defval=0.1) * 0.01
atrRange = input(14, title="ATR Range", type=input.integer)
buyStop = input(2, title="* ATR Buy SL", type=input.float)
sellStop = input(1, title="* ATR Sell SL", type=input.float)
targetATR = input(1, title="* ATR TP1", type=input.float)
moveToEntryFigure = input(0.5, title=" move to entry in % towards target", type=input.float)
showMove = input(true, title="Show Move to Entry points")
showMoveBuycol = showMove ? color.lime : na
showMoveSellcol = showMove ? color.lime : na
// Plots
buyStopp = plot(close - atr(atrRange) * buyStop, title="Buy SL", style=plot.style_stepline, color=color.red, transp=75, linewidth=3)
sellStopp = plot(close + atr(atrRange) * sellStop, title="Sell SL", style=plot.style_stepline, color=color.red, transp=75, linewidth=3)
buyTP1 = plot(close + atr(atrRange) * targetATR, title="Buy TP", style=plot.style_cross, color=color.lime, transp=75, linewidth=3)
sellTP1 = plot(close - atr(atrRange) * targetATR, title="Sell TP", style=plot.style_cross, color=color.lime, transp=75, linewidth=3)
buyMove = plot(close + atr(atrRange) * targetATR * moveToEntryFigure, title="Buy Move to Entry", style=plot.style_cross, color=showMoveBuycol, transp=75, linewidth=3)
sellMove = plot(close - atr(atrRange) * targetATR * moveToEntryFigure, title="Sell Move to Entry", style=plot.style_cross, color=showMoveSellcol, transp=75, linewidth=3)
if barstate.isconfirmed
if(BGcolor==color.red and BGcolor[1]==color.yellow and c_time )
strategy.entry("short", strategy.short, comment="short", alert_message='short')
strategy.cancel("long")
if(BGcolor==color.green and BGcolor[1]==color.yellow and c_time )
strategy.entry("long", strategy.long, comment="long", alert_message = 'long')
strategy.cancel("short")
// STEP 2:
// Determine trail stop loss prices
longStopPrice = 0.0, shortStopPrice = 0.0
longStopPrice := if (strategy.position_size > 0)
stopValue = close * (1 - longTrailPerc)
max(stopValue, longStopPrice[1])
else
0
shortStopPrice := if (strategy.position_size < 0)
stopValue = close * (1 + shortTrailPerc)
min(stopValue, shortStopPrice[1])
else
999999
// Plot stop loss values for confirmation
plot(series=(strategy.position_size > 0) ? longStopPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Long Trail Stop")
plot(series=(strategy.position_size < 0) ? shortStopPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Short Trail Stop")
// STEP 3:
// Submit exit orders for trail stop loss price
//if (strategy.position_size > 0)
// strategy.exit("XL TRL STP","long", stop=longStopPrice)
//if (strategy.position_size < 0)
// strategy.exit("XS TRL STP","short", stop=shortStopPrice)
tp=input(0.0032,type=input.float, title="tp")
sl=input(0.001,type=input.float, title="sl")
//strategy.close("long", when= tp/2,qty_percent = 50)
//strategy.exit("longtp/sl","long",profit=tp, loss=sl, stop=longStopPrice, alert_message='closelong')
//strategy.exit("shorttp/sl","short",profit=tp, loss=sl, stop=shortStopPrice, alert_message='closeshort')
//tpatrlong= close + atr(atrRange) * targetATR
//slatrlong= close - atr(atrRange) * buyStop
//strategy.exit("longtp/sl","long",profit=tp, loss=sl, alert_message='closelong')
//strategy.exit("shorttp/sl","short",profit=tp, loss=sl, alert_message='closeshort')
strategy.exit("closelong", "long" , profit = close * tp / syminfo.mintick, loss = close * sl / syminfo.mintick, alert_message = "closelong")
strategy.exit("closeshort", "short" , profit = close * tp / syminfo.mintick, loss = close * sl / syminfo.mintick, alert_message = "closeshort")
if(BGcolor==color.yellow or not c_time)
strategy.close("short", comment="time or yellow", alert_message='closeshort')
strategy.close("long", comment="time or yellow", alert_message='closelong')