رینج فلٹر بریک آؤٹ قلیل مدتی تجارتی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-09-21 21:17:40
ٹیگز:

جائزہ

یہ قلیل مدتی تجارتی حکمت عملی قیمتوں میں اتار چڑھاؤ کی حد پر مبنی خرید اور فروخت کے سگنل تیار کرتی ہے۔ یہ ایک مدت میں قیمت کی نقل و حرکت کی حد کا حساب لگاتا ہے اور اسے تجارتی سگنلز کے لئے فلٹر کے طور پر استعمال کرتا ہے۔ سگنل اس وقت متحرک ہوتے ہیں جب قیمت حد سے باہر نکل جاتی ہے۔

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

بنیادی اشارے میں قیمتوں میں اتار چڑھاؤ کی حد ہے۔ مخصوص اقدامات یہ ہیں:

  1. پچھلے N ادوار کے دوران اعلی کم رینج کا حساب کتاب کریں

  2. رینج فلٹر حاصل کرنے کے لئے چلتی اوسط کا استعمال کرتے ہوئے طول و عرض ہموار

  3. جب قیمت رینج فلٹر سے اوپر بڑھتی ہے تو خریدنے کا اشارہ پیدا ہوتا ہے

  4. جب قیمت رینج فلٹر سے نیچے گرتی ہے تو فروخت کا اشارہ پیدا ہوتا ہے

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

فوائد

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

خطرات

  • رینج بریک آؤٹ وائیپساؤ کے لئے موزوں ہیں
  • رینج کا حساب کرنے کے لئے کافی تاریخی ڈیٹا کی ضرورت ہے
  • خراب پیرامیٹرز ہائپر حساسیت یا سست روی کا سبب بنتے ہیں
  • کوئی مؤثر رکاوٹیں نہیں، بڑی کھپت
  • اعلی تعدد کی وجہ سے فیسوں سے متاثر کارکردگی

خطرات کو کم کیا جا سکتا ہے:

  • ریلیکسنگ رینج فلٹر کی Volatility کوفیسیٹر
  • مثالی ترتیبات کے لئے پیرامیٹر کی اصلاح
  • اسٹاپ نقصان یا ٹریلنگ اسٹاپ کا نفاذ
  • کم فیسوں کی وجہ سے تجارت کی کثرت کو کم کرنا
  • مصنوعات کے مخصوص پیرامیٹرز کا ٹیسٹ

بہتری کی ہدایات

اسٹریٹیجی کو بہتر بنایا جاسکتا ہے:

  1. مختلف رینج کیلکولیشن ادوار کی جانچ

  2. رینج فلٹر کے اتار چڑھاؤ کے ضریب کو بہتر بنانا

  3. MACD جیسے تصدیق کرنے والے اشارے شامل کرنا

  4. چلنے یا پیچھے رکنے کا استعمال کرتے ہوئے

  5. ہر پروڈکٹ کے لئے مخصوص ٹوننگ پیرامیٹرز

  6. پوزیشن سائزنگ سسٹم کی اصلاح

خلاصہ

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


/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Range Filter Buy and Sell 5min [Strategy]", overlay=true, commission_type=strategy.commission.percent, commission_value=0.025, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, slippage=0)

// === INPUT BACKTEST RANGE ===
useDate = input(true,     title='---------------- Use Date ----------------', type=bool)
FromMonth = input(defval = 7, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 25, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true  // create function "within window of time"
// === INPUT BACKTEST RANGE ===


sources = input(defval=close, title="Source")
isHA = input(false, "Use HA Candles", bool)
src = isHA ? security(heikenashi(tickerid), period, sources) : sources
// Sampling Period
// Settings for 5min chart, BTCUSDC. For Other coin, change the paremeters

per = input(defval=50, minval=1, title="Sampling Period")

// Range Multiplier

mult = input(defval=3.0, minval=0.1, title="Range Multiplier")

// Smooth Average Range

smoothrng(x, t, m)=>
    wper      = (t*2) - 1
    avrng     = ema(abs(x - x[1]), t)
    smoothrng = ema(avrng, wper)*m
    smoothrng
smrng = smoothrng(src, per, mult)

// Range Filter

rngfilt(x, r)=>
    rngfilt  = x
    rngfilt := x > nz(rngfilt[1]) ? ((x - r) < nz(rngfilt[1]) ? nz(rngfilt[1]) : (x - r)) : ((x + r) > nz(rngfilt[1]) ? nz(rngfilt[1]) : (x + r))
    rngfilt
filt = rngfilt(src, smrng)

// Filter Direction

upward   = 0.0
upward  := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1])
downward = 0.0
downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 : nz(downward[1])

// Target Bands

hband = filt + smrng
lband = filt - smrng

// Colors

filtcolor = upward > 0 ? lime : downward > 0 ? red : orange
barcolor  = (src > filt) and (src > src[1]) and (upward > 0) ? lime : (src > filt) and (src < src[1]) and (upward > 0) ? green : 
   (src < filt) and (src < src[1]) and (downward > 0) ? red : (src < filt) and (src > src[1]) and (downward > 0) ? maroon : orange

filtplot = plot(filt, color=filtcolor, linewidth=3, title="Range Filter")

// Target

hbandplot = plot(hband, color=aqua, transp=100, title="High Target")
lbandplot = plot(lband, color=fuchsia, transp=100, title="Low Target")

// Fills

fill(hbandplot, filtplot, color=aqua, title="High Target Range")
fill(lbandplot, filtplot, color=fuchsia, title="Low Target Range")

// Bar Color

//barcolor(barcolor)

// Break Outs 

longCond = na
shortCond = na
longCond := ((src > filt) and (src > src[1]) and (upward > 0)) or ((src > filt) and (src < src[1]) and (upward > 0)) 
shortCond := ((src < filt) and (src < src[1]) and (downward > 0)) or ((src < filt) and (src > src[1]) and (downward > 0))

CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1

//Alerts

plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor = white, style=shape.labelup, size = size.normal, location=location.belowbar, color = green, transp = 0)
plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = red, transp = 0)

//strategy.entry("Long", strategy.long, stop = hband, when = window() , comment="Long")
//strategy.entry("Short", strategy.short, stop = lband, when = window() , comment="Short")

strategy.entry("Long", strategy.long, when = longCondition and window() , comment="Long")
strategy.entry("Short", strategy.short, when = shortCondition and window() , comment="Short")



// === Stop LOSS ===
useStopLoss = input(false, title='----- Use Stop Loss / Take profit -----', type=bool)
sl_inp = input(100, title='Stop Loss %', type=float, step=0.25)/100
tp_inp = input(1.5, title='Take Profit %', type=float, step=0.25)/100
stop_level = strategy.position_avg_price * (1 - sl_inp)
take_level = strategy.position_avg_price * (1 + tp_inp)
stop_level_short = strategy.position_avg_price * (1 + sl_inp)
take_level_short = strategy.position_avg_price * (1 - tp_inp)
// === Stop LOSS ===

if useStopLoss
    strategy.exit("Stop Loss/Profit Long","Long", stop=stop_level, limit=take_level)
    strategy.exit("Stop Loss/Profit Short","Short", stop=stop_level_short, limit=take_level_short)


مزید