یہ قلیل مدتی تجارتی حکمت عملی قیمتوں میں اتار چڑھاؤ کی حد پر مبنی خرید اور فروخت کے سگنل تیار کرتی ہے۔ یہ ایک مدت میں قیمت کی نقل و حرکت کی حد کا حساب لگاتا ہے اور اسے تجارتی سگنلز کے لئے فلٹر کے طور پر استعمال کرتا ہے۔ سگنل اس وقت متحرک ہوتے ہیں جب قیمت حد سے باہر نکل جاتی ہے۔
بنیادی اشارے میں قیمتوں میں اتار چڑھاؤ کی حد ہے۔ مخصوص اقدامات یہ ہیں:
پچھلے N ادوار کے دوران اعلی کم رینج کا حساب کتاب کریں
رینج فلٹر حاصل کرنے کے لئے چلتی اوسط کا استعمال کرتے ہوئے طول و عرض ہموار
جب قیمت رینج فلٹر سے اوپر بڑھتی ہے تو خریدنے کا اشارہ پیدا ہوتا ہے
جب قیمت رینج فلٹر سے نیچے گرتی ہے تو فروخت کا اشارہ پیدا ہوتا ہے
اس طرح، قیمت کی حد کے وقفے کو رجحان کی سمت کا تعین کرنے اور صاف سگنل کے لئے شور فلٹر کرنے کے لئے استعمال کیا جاتا ہے.
خطرات کو کم کیا جا سکتا ہے:
اسٹریٹیجی کو بہتر بنایا جاسکتا ہے:
مختلف رینج کیلکولیشن ادوار کی جانچ
رینج فلٹر کے اتار چڑھاؤ کے ضریب کو بہتر بنانا
MACD جیسے تصدیق کرنے والے اشارے شامل کرنا
چلنے یا پیچھے رکنے کا استعمال کرتے ہوئے
ہر پروڈکٹ کے لئے مخصوص ٹوننگ پیرامیٹرز
پوزیشن سائزنگ سسٹم کی اصلاح
اس حکمت عملی میں قلیل مدتی سگنل پیدا کرنے کے لئے قیمتوں کی حد سے باہر نکلنے کا استعمال کیا جاتا ہے ، جو عارضی رجحانات کو موثر انداز میں پکڑتا ہے۔ لیکن وِپساؤ جیسے خطرات موجود ہیں۔ کارکردگی کو برقرار رکھتے ہوئے خطرات کو کنٹرول کرنے کے لئے پیرامیٹر کی اصلاح ، نقصانات کو روکنے ، فلٹرز وغیرہ شامل کرنے کے ذریعے بہتری لائی جاسکتی ہے۔ مصنوعات کی خصوصیات کے مطابق پیرامیٹرز کو ٹھیک کرنا بھی ضروری ہے۔ مسلسل اصلاحات مضبوطی کی طرف جاتا ہے۔
/*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)