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