حکمت عملی کے بعد دوہری رینج فلٹر کا رجحان


تخلیق کی تاریخ: 2024-02-05 11:15:28 آخر میں ترمیم کریں: 2024-02-05 11:15:28
کاپی: 1 کلکس کی تعداد: 585
1
پر توجہ دیں
1617
پیروکار

حکمت عملی کے بعد دوہری رینج فلٹر کا رجحان

جائزہ

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

حکمت عملی کا اصول

اس حکمت عملی کا مرکز دوہری ای ایم اے رینج فلٹرنگ ہے۔ یہ K لائن کی ATR رینج کا حساب لگاتا ہے اور اسے ہموار کرتا ہے ، اور پھر دونوں ای ایم اے کے ساتھ مل کر K لائن کو اس رینج میں پوزیشن دیتا ہے تاکہ یہ معلوم کیا جاسکے کہ کیا یہ فی الحال رجحان میں ہے۔ جب قیمت حد سے تجاوز کرتی ہے تو ، اس سے ظاہر ہوتا ہے کہ رجحان بدل گیا ہے۔

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

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

طاقت کا تجزیہ

ڈبل رینج فلٹرنگ ٹرینڈ ٹریکنگ اسٹریٹجی میں یکساں لائن فلٹرنگ اور رینج کیلکولیشن کے فوائد شامل ہیں ، جس سے رجحان کی سمت کا درست اندازہ لگایا جاسکتا ہے ، اور زلزلے کی صورتحال میں بار بار آنے جانے سے بچا جاسکتا ہے۔ اس کے فوائد یہ ہیں:

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

خطرے کا تجزیہ

اس حکمت عملی کے کچھ خطرات بھی ہیں، جن میں سے کچھ درج ذیل ہیں:

  1. بڑے پیمانے پر چھلانگ لگنے سے اے ٹی آر کی حد سے تجاوز کر سکتا ہے ، جس سے ابتدائی داخلے کا سبب بنتا ہے۔
  2. مضبوط رجحانات کے دوران ، اسٹاپ نقصانات کو جلد از جلد متحرک کیا جاسکتا ہے
  3. غلط پیرامیٹرز کی ترتیب بھی پالیسی کی کارکردگی کو متاثر کرتی ہے

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

اصلاح کی تجاویز

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

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

ان اصلاحات کے ذریعہ ، حکمت عملی کو زیادہ سے زیادہ مارکیٹ کے ماحول میں مستحکم منافع حاصل کرنے کے قابل بنایا جاسکتا ہے۔

خلاصہ کریں۔

ڈبل رینج فلٹرنگ ٹرینڈ ٹریکنگ اسٹریٹجی میں مساوی لائن فلٹرنگ اور اے ٹی آر رینج کے فیصلے کے متعدد فوائد شامل ہیں ، جس سے وسط لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی لمبی

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-01-29 00:00:00
end: 2024-02-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Range Filter [DW] & Labels", shorttitle="RF [DW] & Labels", overlay=true)

//Conditional Sampling EMA Function 
Cond_EMA(x, cond, n)=>
    var val     = array.new_float(0)
    var ema_val = array.new_float(1)
    if cond
        array.push(val, x)
        if array.size(val) > 1
            array.remove(val, 0)
        if na(array.get(ema_val, 0))
            array.fill(ema_val, array.get(val, 0))
        array.set(ema_val, 0, (array.get(val, 0) - array.get(ema_val, 0))*(2/(n + 1)) + array.get(ema_val, 0))
    EMA = array.get(ema_val, 0)
    EMA

//Conditional Sampling SMA Function
Cond_SMA(x, cond, n)=>
    var vals = array.new_float(0)
    if cond
        array.push(vals, x)
        if array.size(vals) > n
            array.remove(vals, 0)
    SMA = array.avg(vals)
    SMA

//Standard Deviation Function
Stdev(x, n)=>
    sqrt(Cond_SMA(pow(x, 2), 1, n) - pow(Cond_SMA(x, 1, n), 2))

//Range Size Function
rng_size(x, scale, qty, n)=> 
    ATR      = Cond_EMA(tr(true), 1, n)
    AC       = Cond_EMA(abs(x - x[1]), 1, n)
    SD       = Stdev(x, n)
    rng_size = scale=="Pips" ? qty*0.0001 : scale=="Points" ? qty*syminfo.pointvalue : scale=="% of Price" ? close*qty/100 : scale=="ATR" ? qty*ATR :
               scale=="Average Change" ? qty*AC : scale=="Standard Deviation" ? qty*SD : scale=="Ticks" ? qty*syminfo.mintick : qty   

//Two Type Range Filter Function
rng_filt(h, l, rng_, n, type, smooth, sn, av_rf, av_n)=>
    rng_smooth = Cond_EMA(rng_, 1, sn)
    r          = smooth ? rng_smooth : rng_
    var rfilt  = array.new_float(2, (h + l)/2)
    array.set(rfilt, 1, array.get(rfilt, 0))
    if type=="Type 1"
        if h - r > array.get(rfilt, 1)
            array.set(rfilt, 0, h - r)
        if l + r < array.get(rfilt, 1)
            array.set(rfilt, 0, l + r)
    if type=="Type 2"
        if h >= array.get(rfilt, 1) + r
            array.set(rfilt, 0, array.get(rfilt, 1) + floor(abs(h - array.get(rfilt, 1))/r)*r)
        if l <= array.get(rfilt, 1) - r
            array.set(rfilt, 0, array.get(rfilt, 1) - floor(abs(l - array.get(rfilt, 1))/r)*r)
    rng_filt1 = array.get(rfilt, 0)
    hi_band1  = rng_filt1 + r
    lo_band1  = rng_filt1 - r
    rng_filt2 = Cond_EMA(rng_filt1, rng_filt1 != rng_filt1[1], av_n)
    hi_band2  = Cond_EMA(hi_band1, rng_filt1 != rng_filt1[1], av_n)
    lo_band2  = Cond_EMA(lo_band1, rng_filt1 != rng_filt1[1], av_n)
    rng_filt  = av_rf ? rng_filt2 : rng_filt1
    hi_band   = av_rf ? hi_band2 : hi_band1
    lo_band   = av_rf ? lo_band2 : lo_band1
    [hi_band, lo_band, rng_filt]
 
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Filter Type
f_type = input(defval="Type 1", options=["Type 1", "Type 2"], title="Filter Type")

//Movement Source
mov_src = input(defval="Close", options=["Wicks", "Close"], title="Movement Source")

//Range Size Inputs
rng_qty   = input(defval=2.618, minval=0.0000001, title="Range Size")
rng_scale = input(defval="Average Change", options=["Points", "Pips", "Ticks", "% of Price", "ATR", "Average Change", "Standard Deviation", "Absolute"], title="Range Scale")

//Range Period
rng_per = input(defval=14, minval=1, title="Range Period (for ATR, Average Change, and Standard Deviation)")

//Range Smoothing Inputs
smooth_range = input(defval=true, title="Smooth Range")
smooth_per   = input(defval=27, minval=1, title="Smoothing Period")

//Filter Value Averaging Inputs
av_vals    = input(defval=true, title="Average Filter Changes")
av_samples = input(defval=2, minval=1, title="Number Of Changes To Average")

// New inputs for take profit and stop loss
take_profit_percent = input(defval=100.0, minval=0.1, maxval=1000.0, title="Take Profit Percentage", step=0.1)
stop_loss_percent = input(defval=100, minval=0.1, maxval=1000.0, title="Stop Loss Percentage", step=0.1)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//High And Low Values
h_val = mov_src=="Wicks" ? high : close
l_val = mov_src=="Wicks" ? low : close

//Range Filter Values
[h_band, l_band, filt] = rng_filt(h_val, l_val, rng_size((h_val + l_val)/2, rng_scale, rng_qty, rng_per), rng_per, f_type, smooth_range, smooth_per, av_vals, av_samples)

//Direction Conditions
var fdir = 0.0
fdir    := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir
upward   = fdir==1 ? 1 : 0
downward = fdir==-1 ? 1 : 0

//Colors
filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc
bar_color  = upward and (close > filt) ? (close > close[1] ? #05ff9b : #00b36b) :
             downward and (close < filt) ? (close < close[1] ? #ff0583 : #b8005d) : #cccccc

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Filter Plot
filt_plot = plot(filt, color=filt_color, transp=0, linewidth=3,  title="Filter")

//Band Plots
h_band_plot = plot(h_band, color=#05ff9b, transp=100, title="High Band")
l_band_plot = plot(l_band, color=#ff0583, transp=100, title="Low Band")

//Band Fills
fill(h_band_plot, filt_plot, color=#00b36b, transp=85, title="High Band Fill")
fill(l_band_plot, filt_plot, color=#b8005d, transp=85, title="Low Band Fill")

//Bar Color
barcolor(bar_color)

//External Trend Output
plot(fdir, transp=100, editable=false, display=display.none, title="External Output - Trend Signal")

// Trading Conditions Logic
longCond = close > filt and close > close[1] and upward > 0 or close > filt and close < close[1] and upward > 0 
shortCond = close < filt and close < close[1] and downward > 0 or close < filt and close > close[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

// Strategy Entry and Exit
strategy.entry("Buy", strategy.long, when = longCondition)
strategy.entry("Sell", strategy.short, when = shortCondition)

// New: Close conditions based on percentage change
long_take_profit_condition = close > strategy.position_avg_price * (1 + take_profit_percent / 100)
short_take_profit_condition = close < strategy.position_avg_price * (1 - take_profit_percent / 100)

long_stop_loss_condition = close < strategy.position_avg_price * (1 - stop_loss_percent / 100)
short_stop_loss_condition = close > strategy.position_avg_price * (1 + stop_loss_percent / 100)

strategy.close("Buy", when = shortCondition or long_take_profit_condition or long_stop_loss_condition)
strategy.close("Sell", when = longCondition or short_take_profit_condition or short_stop_loss_condition)

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

// Alerts
alertcondition(longCondition, title="Buy Alert", message = "BUY")
alertcondition(shortCondition, title="Sell Alert", message = "SELL")