রেঞ্জ ফিল্টার ব্রেকআউট স্বল্পমেয়াদী ট্রেডিং কৌশল

লেখক:চাওঝাং, তারিখ: ২০২৩-০৯-২১ ২১ঃ১৭ঃ৪০
ট্যাগঃ

সারসংক্ষেপ

এই স্বল্পমেয়াদী ট্রেডিং কৌশলটি মূল্যের ওঠানামা পরিসরের উপর ভিত্তি করে কিনুন এবং বিক্রয় সংকেত তৈরি করে। এটি একটি সময়ের মধ্যে মূল্য আন্দোলনের পরিসীমা গণনা করে এবং এটি বাণিজ্য সংকেতগুলির জন্য ফিল্টার হিসাবে ব্যবহার করে। যখন দামটি পরিসরের বাইরে চলে যায় তখন সংকেতগুলি ট্রিগার হয়।

কৌশলগত যুক্তি

মূল সূচক হল দামের ওঠানামা পরিসীমা। নির্দিষ্ট ধাপগুলি হলঃ

  1. বিগত N সময়ের মধ্যে উচ্চ-নিম্ন পরিসীমা হিসাব করুন যেমন দামের বিস্তৃতি

  2. পরিসীমা ফিল্টার প্রাপ্ত করার জন্য চলন্ত গড় ব্যবহার করে প্রশস্ততা মসৃণ

  3. যখন দাম পরিসীমা ফিল্টারের উপরে উঠে যায় তখন একটি ক্রয় সংকেত তৈরি হয়

  4. যখন দাম পরিসীমা ফিল্টারের নিচে পড়ে তখন একটি বিক্রয় সংকেত তৈরি হয়

এই ভাবে, মূল্য পরিসীমা ব্রেকআউট প্রবণতা দিক নির্ধারণ এবং পরিষ্কার সংকেত জন্য গোলমাল ফিল্টার করতে ব্যবহৃত হয়।

সুবিধা

  • দামের পরিসীমা সহজেই বিচার করা যায়
  • মসৃণ পরিসীমা কার্যকরভাবে শব্দ ফিল্টার করে
  • ব্রেকআউট সংকেতগুলি স্বল্পমেয়াদী প্রবণতা ধারণ করে
  • স্বল্পমেয়াদী ব্যবসায়ের জন্য উপযুক্ত উচ্চতর ট্রেডিং ফ্রিকোয়েন্সি
  • সামঞ্জস্যযোগ্য পরামিতিগুলি সহজেই অপ্টিমাইজ করা যায়

ঝুঁকি

  • রেঞ্জ ব্রেকআউটগুলি হুইপসোগুলির জন্য প্রবণ
  • পরিসীমা গণনা করার জন্য পর্যাপ্ত ঐতিহাসিক তথ্য প্রয়োজন
  • খারাপ প্যারামিটারগুলি অত্যধিক সংবেদনশীলতা বা অলসতার কারণ হয়
  • কোন কার্যকর স্টপ নেই, বড় পরিমাণে ড্রডাউন
  • উচ্চ ফ্রিকোয়েন্সির কারণে ফি দ্বারা প্রভাবিত কর্মক্ষমতা

নিম্নলিখিত উপায়ে ঝুঁকি হ্রাস করা যেতে পারেঃ

  • রিলেক্সিং রেঞ্জ ফিল্টার ভোলটাইলিটি কোয়ালিটি
  • আদর্শ সেটিংসের জন্য প্যারামিটার অপ্টিমাইজেশন
  • স্টপ লস বা ট্রেলিং স্টপ বাস্তবায়ন
  • কম খরচের জন্য ব্যবসায়ের ঘনত্ব হ্রাস করা
  • পণ্য-নির্দিষ্ট পরামিতি পরীক্ষা

উন্নতির নির্দেশাবলী

কৌশলটি নিম্নলিখিতগুলির মাধ্যমে উন্নত করা যেতে পারেঃ

  1. বিভিন্ন ব্যাপ্তি গণনার সময়কাল পরীক্ষা করা

  2. পরিসীমা ফিল্টার উদ্বায়ীতা সহগকে অপ্টিমাইজ করা

  3. এমএসিডির মতো নিশ্চিতকারী সূচক যোগ করা

  4. চলমান বা পিছনের স্টপ ব্যবহার করে

  5. প্রতিটি পণ্যের জন্য নির্দিষ্ট মিউনিকেশন পরামিতি

  6. অবস্থান আকারের সিস্টেম অপ্টিমাইজ করা

সংক্ষিপ্তসার

এই কৌশলটি স্বল্পমেয়াদী সংকেত তৈরি করতে, সাময়িক প্রবণতা কার্যকরভাবে ক্যাপচার করার জন্য রেঞ্জের বাইরে দামের বিরতি ব্যবহার করে। তবে হুইপসাউসের মতো ঝুঁকি রয়েছে। কার্যকারিতা বজায় রেখে ঝুঁকি নিয়ন্ত্রণের জন্য প্যারামিটার অপ্টিমাইজেশন, স্টপ লস, ফিল্টার ইত্যাদি যুক্ত করে উন্নতি করা যেতে পারে। পণ্যের বৈশিষ্ট্য অনুসারে প্যারামিটারগুলি সূক্ষ্ম-নির্ধারণ করাও অপরিহার্য। অবিচ্ছিন্ন অপ্টিমাইজেশন দৃust়তা নিয়ে আসে।


/*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)


আরো