মাল্টিপল মুভিং এভারেজ বোলিংজার ব্যান্ডস কৌশল

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

img

সারসংক্ষেপ

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

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

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

কোডের প্রধান উপাদানগুলি হলঃ

  1. এসএমএ, ইএমএ, ডব্লিউএমএ ইত্যাদি সহ ১২ ধরণের চলমান গড়ের জন্য গণনা ফাংশন।
  2. getMA ফাংশন mav ইনপুট প্যারামিটারের উপর ভিত্তি করে সংশ্লিষ্ট চলমান গড় প্রদান করে।
  3. বোলিঞ্জার ব্যান্ডের মধ্যম, উপরের এবং নীচের ব্যান্ড গণনা। মধ্যম ব্যান্ড getMA ফাংশন থেকে চলমান গড় ব্যবহার করে।
  4. বোলিংজার ব্যান্ডের প্লট।
  5. দীর্ঘ এবং সংক্ষিপ্ত সংকেত উৎপন্ন করা। যখন দাম নিম্ন ব্যান্ডের নীচে ভাঙ্গবে তখন দীর্ঘ যান, যখন দাম উপরের ব্যান্ডের উপরে ভাঙ্গবে তখন সংক্ষিপ্ত যান।

সুবিধা বিশ্লেষণ

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

ঝুঁকি বিশ্লেষণ

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

অপ্টিমাইজেশান নির্দেশাবলী

কৌশলটি নিম্নলিখিত দিক থেকে অপ্টিমাইজ করা যেতে পারেঃ

  1. সিগন্যাল স্থিতিশীলতা উন্নত করার জন্য সর্বোত্তম পরামিতিগুলি খুঁজে পেতে চলমান গড়ের বিভিন্ন সংমিশ্রণ পরীক্ষা করুন।
  2. মাঝে মাঝে খারাপ সংকেত থেকে ক্ষতি সীমিত করার জন্য স্টপ লস মেকানিজম যুক্ত করুন।
  3. সিগন্যাল ফিল্টারিংয়ের জন্য অন্যান্য সূচক অন্তর্ভুক্ত করুন, অতিরিক্ত ট্রেডিং এড়ানো, যেমন MACD, KD ইত্যাদি।
  4. অর্থ ব্যবস্থাপনা অপ্টিমাইজ করুন, পজিশনের আকার সামঞ্জস্য করুন।

সিদ্ধান্ত

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


/*backtest
start: 2023-01-30 00:00:00
end: 2023-10-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Bollinger Bands Strategy (MA type)", overlay=true)
src = input(close, title="Source")
length = input(20,step=10, minval=1)
mult = input(1,type=input.float, minval=0.001, maxval=50, title="StdDev")

length1=input(26, "Long Moving Average Length", minval=1)
length2=input(9, "Trigger Length", minval=1)
T3a1 = input(0.7, "TILLSON T3 Volume Factor", step=0.1)
////////////
mav = input(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "DEMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "HULL", "TILL"])
Var_Func(src,length)=>
    valpha=2/(length+1)
    vud1=src>src[1] ? src-src[1] : 0
    vdd1=src<src[1] ? src[1]-src : 0
    vUD=sum(vud1,9)
    vDD=sum(vdd1,9)
    vCMO=nz((vUD-vDD)/(vUD+vDD))
    VAR=0.0
    VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
VAR=Var_Func(src,length)
DEMA = ( 2 * ema(src,length)) - (ema(ema(src,length),length) )
Wwma_Func(src,length)=>
    wwalpha = 1/ length
    WWMA = 0.0
    WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
WWMA=Wwma_Func(src,length)
Zlema_Func(src,length)=>
    zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
    zxEMAData = (src + (src - src[zxLag]))
    ZLEMA = ema(zxEMAData, length)
ZLEMA=Zlema_Func(src,length)
Tsf_Func(src,length)=>
    lrc = linreg(src, length, 0)
    lrc1 = linreg(src,length,1)
    lrs = (lrc-lrc1)
    TSF = linreg(src, length, 0)+lrs
TSF=Tsf_Func(src,length)
HMA = wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length)))
T3e1=ema(src, length)
T3e2=ema(T3e1,length)
T3e3=ema(T3e2,length)
T3e4=ema(T3e3,length)
T3e5=ema(T3e4,length)
T3e6=ema(T3e5,length)
T3c1=-T3a1*T3a1*T3a1
T3c2=3*T3a1*T3a1+3*T3a1*T3a1*T3a1
T3c3=-6*T3a1*T3a1-3*T3a1-3*T3a1*T3a1*T3a1
T3c4=1+3*T3a1+T3a1*T3a1*T3a1+3*T3a1*T3a1
T3=T3c1*T3e6+T3c2*T3e5+T3c3*T3e4+T3c4*T3e3


getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma

    if mav == "DEMA"
        ma := DEMA
        ma

    if mav == "TMA"
        ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
        ma

    if mav == "VAR"
        ma := VAR
        ma

    if mav == "WWMA"
        ma := WWMA
        ma

    if mav == "ZLEMA"
        ma := ZLEMA
        ma

    if mav == "TSF"
        ma := TSF
        ma

    if mav == "HULL"
        ma := HMA
        ma

    if mav == "TILL"
        ma := T3
        ma
    ma
    
//////////
basis = getMA(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset",minval = -500, maxval = 500)
plot(basis, "Basis",color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
/////////
buyEntry = crossover(src, lower)
sellEntry = crossunder(src, upper)
if (crossover(src, lower))
	strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands",  comment="BBandLE")
else
	strategy.cancel(id="BBandLE")
if (crossunder(src, upper))
	strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands",  comment="BBandSE")
else
	strategy.cancel(id="BBandSE")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

আরো