বলিঙ্গার ব্যান্ডস শতাংশ ট্রেডিং কৌশল


সৃষ্টির তারিখ: 2023-12-11 11:14:53 অবশেষে সংশোধন করুন: 2023-12-11 11:14:53
অনুলিপি: 0 ক্লিকের সংখ্যা: 750
1
ফোকাস
1621
অনুসারী

বলিঙ্গার ব্যান্ডস শতাংশ ট্রেডিং কৌশল

ওভারভিউ

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

কৌশল নীতি

  1. বুলিন বন্ডের চ্যানেল এবং চ্যানেলের মধ্যে দামের শতাংশের তুলনা
  2. ওপেন, ক্লোজ, হাই এবং লোস্ট প্রাইসের জন্য চলমান গড় গণনা করা হয়
  3. এটিআর সূচক গণনা করুন এবং এটিআর এর সাথে স্টপ লিন সেট করুন
  4. মূল্যায়ন করুন যে দামগুলি নতুন উচ্চতা বা নতুন নিম্নের কাছাকাছি রয়েছে কিনা
  5. বার্ষিক সর্বোচ্চ এবং সর্বনিম্ন মূল্যের সাথে একত্রে বৃহত্তর স্তরের পরিস্থিতি নির্ধারণ করা
  6. ট্রেডিং সিগন্যাল প্রেরণ করা হয় কিনা তা নির্ধারণ করতে ব্রিনের বেন্ডের শতাংশ পরিবর্তন এবং নতুন উচ্চতা এবং নতুন নিম্নতা

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

কৌশলগত সুবিধা

  1. বুলিন বেল্টের কঠোর বিচারের ফলে ভুয়া সংকেত হ্রাস পায়
  2. চলমান গড় মূল্য মসৃণ করে এবং প্রকৃত প্রবণতা সনাক্ত করে
  3. ATR সূচক গতিশীল ট্র্যাকিং স্টপ লস, একক ক্ষতি সীমাবদ্ধ
  4. নতুন উচ্চ, নতুন নিম্ন এবং বার্ষিক উচ্চ ও নিম্নের বিচার, যা সংকেতকে আরও নির্ভরযোগ্য করে তোলে
  5. বিভিন্ন প্রযুক্তিগত সূচকের সমন্বয়ে কার্যকরভাবে কৌশল কার্যকর করা

কৌশলগত ঝুঁকি ও সমাধান

  1. ভুলভাবে সেট করা ব্রিন-ব্যান্ড-পাথ প্যারামিটারগুলি অনেকগুলি ভুয়া ব্রেকআউটের কারণ হতে পারে এবং সর্বোত্তম ফলাফলের জন্য বিভিন্ন প্যারামিটার সমন্বয় পরীক্ষা করা উচিত
  2. বন্ধের মূল্য বেঞ্চলাইন হিসাবে এটিআর দ্বারা নির্ধারিত স্টপ ল্যাম্পের উপরে প্রত্যাহারের সম্ভাবনা রয়েছে, বৃহত্তর তরঙ্গের সর্বোচ্চ সর্বনিম্ন মূল্যের শতাংশ গণনা করার জন্য বিবেচনা করা যেতে পারে
  3. কঠোর বুলিং-এর মাধ্যমে ফ্রিজিং দীর্ঘতর লাইনের ট্রেন্ডিং সুযোগকে হারাতে পারে, ফ্রিজিং শর্তাবলী এবং হোল্ডিং সময়কে যথাযথভাবে শিথিল করা উচিত
  4. এটিআর সূচকগুলি ধীরে ধীরে বড় আকারের দামের অস্থিরতা অনুসরণ করে, উচ্চতর ফ্রিকোয়েন্সির অস্থিরতার সূচকগুলি যেমন প্রকৃত তরঙ্গের পরিমাণ বিবেচনা করা উচিত
  5. নতুন উচ্চতা এবং নতুন নিম্নতা বিরতি স্বল্পমেয়াদী গোলমাল দ্বারা বিরক্ত হয়, পরিসংখ্যানগতভাবে উল্লেখযোগ্যতা এবং প্রবণতা স্থায়িত্বের মূল্যায়ন করা উচিত

কৌশল অপ্টিমাইজেশনের দিকনির্দেশনা

  1. বিভিন্ন প্যারামিটার সমন্বয় পরীক্ষা করে সেরা ব্রিনব্যান্ড প্যারামিটার এবং চলমান গড় দৈর্ঘ্য নির্ণয় করা
  2. মডেলের সংমিশ্রণ ব্যবহার করে বিভিন্ন ব্রিন ব্যান্ড প্যারামিটার বা চলমান গড় বিচার সংকেত
  3. বিভিন্ন সময়কাল এবং বিভিন্ন জাতের প্যারামিটারগুলির সাথে সামঞ্জস্যতা পরীক্ষা করুন, স্থিতিশীলতা বাড়ান
  4. সূর্যমুখী স্তরের ব্রিনব্যান্ড সংকেত বা মৌসুমী কারণের মতো আরও বৃহত্তর স্তরের শর্তগুলির সাথে সংযুক্ত
  5. ট্রেন্ড ফলো-আপের সুযোগগুলি মূল্যায়ন করুন, যাতে আপনার কৌশলগুলিকে আরও বিস্তৃত করা যায় এবং লাভের সুযোগ তৈরি করা যায়।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HeWhoMustNotBeNamed

//@version=4
strategy("Bollinger %B Candles Strategy", overlay=false, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

BBLength = input(100, minval=1, step=1)
StdDev = 10
useMovingAverage = input(true)
MAType = input(title="Moving Average Type", defval="rma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
lookbackPeriod = input(22, minval=10, step=10)
colorByPreviousClose = input(true)

AtrMAType = input(title="Moving Average Type", defval="hma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
AtrLength = input(10)
AtrMult = input(4)
wicks = input(false)

considerYearlyHighLow = input(false)
considerNewLongTermHighLows = input(false)
shortHighLowPeriod = 100
longHighLowPeriod = 200
tradeDirection = input(title="Trade Direction", defval=strategy.direction.all, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])

backtestYears = input(10, minval=1, step=1)


//////////////////////////////////// Calculate new high low condition //////////////////////////////////////////////////
f_calculateNewHighLows(shortHighLowPeriod, longHighLowPeriod, considerNewLongTermHighLows)=>
    newHigh = highest(shortHighLowPeriod) == highest(longHighLowPeriod) or not considerNewLongTermHighLows
    newLow = lowest(shortHighLowPeriod) == lowest(longHighLowPeriod) or not considerNewLongTermHighLows
    [newHigh,newLow]

//////////////////////////////////// Calculate Yearly High Low //////////////////////////////////////////////////
f_getYearlyHighLowCondition(considerYearlyHighLow)=>
    yhigh = security(syminfo.tickerid, '12M', high[1]) 
    ylow = security(syminfo.tickerid, '12M', low[1]) 
    yhighlast = yhigh[365]
    ylowlast = ylow[365]
    yhighllast = yhigh[2 * 365]
    ylowllast = ylow[2 * 365]
    
    yearlyTrendUp = na(yhigh)? true : na(yhighlast)? close > yhigh : na(yhighllast)? close > max(yhigh,yhighlast) : close > max(yhigh, min(yhighlast, yhighllast))
    yearlyHighCondition = (  (na(yhigh) or na(yhighlast) ? true : (yhigh > yhighlast) ) and ( na(yhigh) or na(yhighllast) ? true : (yhigh > yhighllast))) or yearlyTrendUp or not considerYearlyHighLow
    yearlyTrendDown = na(ylow)? true : na(ylowlast)? close < ylow : na(ylowllast)? close < min(ylow,ylowlast) : close < min(ylow, max(ylowlast, ylowllast))
    yearlyLowCondition = (  (na(ylow) or na(ylowlast) ? true : (ylow < ylowlast) ) and ( na(ylow) or na(ylowllast) ? true : (ylow < ylowllast))) or yearlyTrendDown or not considerYearlyHighLow
    
    label_x = time+(60*60*24*1000*1)
    [yearlyHighCondition,yearlyLowCondition]

f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma

inDateRange = true
[yearlyHighCondition,yearlyLowCondition] = f_getYearlyHighLowCondition(considerYearlyHighLow)
[newHighS,newLowS] = f_calculateNewHighLows(shortHighLowPeriod, longHighLowPeriod, considerNewLongTermHighLows)
[middleclose, upperclose, lowerclose] = bb(close, BBLength, StdDev)
[middleopen, upperopen, loweropen] = bb(open, BBLength, StdDev)
[middlehigh, upperhigh, lowerhigh] = bb(high, BBLength, StdDev)
[middlelow, upperlow, lowerlow] = bb(low, BBLength, StdDev)

percentBClose = (close - lowerclose)*100/(upperclose-lowerclose)
percentBOpen = (open - loweropen)*100/(upperopen-loweropen)
percentBHigh = (high - lowerhigh)*100/(upperhigh-lowerhigh)
percentBLow = (low - lowerlow)*100/(upperlow-lowerlow)

percentBMAClose = f_getMovingAverage(percentBClose, MAType, lookbackPeriod)
percentBMAOpen = f_getMovingAverage(percentBOpen, MAType, lookbackPeriod)
percentBMAHigh = f_getMovingAverage(percentBHigh, MAType, lookbackPeriod)
percentBMALow = f_getMovingAverage(percentBLow, MAType, lookbackPeriod)

newOpen = useMovingAverage? percentBMAOpen : percentBOpen
newClose = useMovingAverage? percentBMAClose : percentBClose
newHigh = useMovingAverage? percentBMAHigh : percentBHigh
newLow = useMovingAverage? percentBMALow : percentBLow

truerange = max(newHigh, newClose[1]) - min(newLow, newClose[1])

averagetruerange = f_getMovingAverage(truerange, AtrMAType, AtrLength)
atr = averagetruerange * AtrMult

longStop = newClose - atr
longStopPrev = nz(longStop[1], longStop)
longStop := (wicks ? newLow[1] : newClose[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = newClose + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := (wicks ? newHigh[1] : newClose[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and (wicks ? newHigh : newClose) > shortStopPrev ? 1 : dir == 1 and (wicks ? newLow : newClose) < longStopPrev ? -1 : dir

trailingStop = dir == 1? longStop : shortStop

candleColor = colorByPreviousClose ?
                 (newClose[1] < newClose ? color.green : newClose[1] > newClose ? color.red : color.silver) : 
                 (newOpen < newClose ? color.green : newOpen > newClose ? color.red : color.silver)
plotcandle(newOpen, newHigh, newLow, newClose, title='PercentBCandle', color = candleColor, wickcolor=candleColor)
plot(trailingStop, title="TrailingStop", style=plot.style_linebr, linewidth=1, color= dir == 1 ? color.green : color.red)

buyCondition = dir==1 and yearlyHighCondition and newHighS
exitBuyCondition = dir == -1
sellCondition = dir == -1 and yearlyLowCondition and newLowS
exitSellCondition = dir == 1
strategy.risk.allow_entry_in(tradeDirection)

barcolor(buyCondition? color.lime : sellCondition ? color.orange : color.silver)
strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca_buy")
strategy.close("Buy", when=exitBuyCondition)

strategy.entry("Sell", strategy.short, when=sellCondition and inDateRange, oca_name="oca_sell")
strategy.close("Sell", when=exitSellCondition)