এই কৌশলটি একটি দ্বি-পরিচালিত অভিযোজিত ব্যাপ্তি ফিল্টারিং গতি ট্র্যাকিং কৌশল। এটি একটি অভিযোজিত ব্যাপ্তি ফিল্টার ব্যবহার করে দামের ওঠানামা ট্র্যাক করতে এবং কম কেনা এবং উচ্চ বিক্রয় বাস্তবায়নের জন্য মূল্যের দিক নির্ধারণের জন্য ভলিউম সূচকগুলিকে একত্রিত করে।
দামের ওঠানামা ট্র্যাক করার জন্য একটি অভিযোজিত পরিসীমা ফিল্টার ব্যবহার করুন। ফিল্টারের আকার ব্যবহারকারীর সংজ্ঞায়িত পরিসীমা সময়কাল, পরিমাণ এবং স্কেল অনুযায়ী অভিযোজিতভাবে সামঞ্জস্য করা হয়।
দুটি ধরণের ফিল্টার রয়েছেঃ টাইপ 1 এবং টাইপ 2। টাইপ 1 একটি স্ট্যান্ডার্ড রেঞ্জ ট্র্যাকিং টাইপ, এবং টাইপ 2 একটি ধাপে ধাপে গোলাকার টাইপ।
ফিল্টার এবং বন্ধের মূল্যের মধ্যে সম্পর্কের ভিত্তিতে মূল্যের ওঠানামা দিক নির্ধারণ করুন। উপরের রেলের উপরে উত্থান হয়, এবং নীচের রেলের নীচে হ্রাস হয়।
পূর্ববর্তী দিনের তুলনায় বন্ধের মূল্যের বৃদ্ধি এবং পতনের সাথে মিলিয়ে, মূল্যের দিকনির্দেশ নির্ধারণ করুন। মূল্য বৃদ্ধি হ'ল উত্থান এবং মূল্য হ্রাস হ'ল হ্রাস।
যখন দাম উপরের ট্র্যাকটি ভেঙে যায় এবং মূল্য বেড়ে যায় তখন একটি ক্রয় সংকেত জারি করুন; যখন দাম নিম্ন ট্র্যাকটি ভেঙে যায় এবং মান কমে যায় তখন একটি বিক্রয় সংকেত জারি করুন।
এডাপ্টিভ রেঞ্জ ফিল্টার সঠিকভাবে বাজারের ওঠানামা ধরতে পারে।
দুই ধরনের ফিল্টার বিভিন্ন ট্রেডিং পছন্দ পূরণ করতে পারে।
ভলিউম সূচকগুলির সংমিশ্রণ কার্যকরভাবে মানের দিকনির্দেশনা সনাক্ত করতে পারে।
কৌশলটি নমনীয় এবং বাজারের অবস্থার উপর নির্ভর করে পরামিতিগুলি সামঞ্জস্য করা যেতে পারে।
কাস্টমাইজযোগ্য ট্রেডিং শর্ত লজিক।
অনুপযুক্ত প্যারামিটার সেটিংগুলি ওভারট্রেডিং বা মিসড ট্রেডিংয়ের কারণ হতে পারে।
ব্রেকআউট সিগন্যালের একটা নির্দিষ্ট বিলম্ব আছে।
ভলিউম ইন্ডিকেটরগুলির একটি নির্দিষ্ট স্থগিতাদেশের ঝুঁকি রয়েছে।
রেঞ্জ ব্রেকগুলি ফাঁদে পড়ে যাওয়ার প্রবণতা রাখে।
ঝুঁকি প্রতিরোধঃ
উপযুক্ত প্যারামিটার সমন্বয় নির্বাচন করুন এবং তাদের সময়মত সামঞ্জস্য করুন।
প্রবণতা চিহ্নিত করার জন্য অন্যান্য সূচকগুলি একত্রিত করুন।
মূল স্তর এবং প্রবণতা বিপরীত দিকে সতর্কতার সাথে ট্রেড করুন।
সর্বোত্তম সমন্বয় খুঁজে পেতে পরিসীমা আকার এবং মসৃণকরণ চক্রের বিভিন্ন সমন্বয় পরীক্ষা করুন।
বিভিন্ন ধরনের ফিল্টার ব্যবহার করে দেখুন এবং আপনার পছন্দের ধরনের নির্বাচন করুন।
অন্যান্য ভলিউম সূচক বা সহায়ক প্রযুক্তিগত সূচকগুলির সাথে পরীক্ষা করুন।
অযৌক্তিক ট্রেডিং হ্রাস করার জন্য ট্রেডিং শর্ত লজিককে অনুকূল এবং সামঞ্জস্য করুন।
অভিযোজিত পজিশন সাইজিং সেট করার জন্য মার্কেট থিওরেম অন্তর্ভুক্ত করুন।
/*backtest start: 2023-01-17 00:00:00 end: 2024-01-23 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") //----------------------------------------------------------------------------------------------------------------------------------------------------------------- //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) strategy.close("Buy", when = shortCondition) strategy.close("Sell", when = longCondition) // 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")