চলমান গড় রিবন কৌশল

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

img

সারসংক্ষেপ

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

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

কৌশলটি 5 টি দ্রুত চলমান গড় (5-, 8-, 13-, 20- এবং 30-দিনের লাইন) এবং 4 ধীর চলমান গড় (45, 70-, 105- এবং 150-দিনের লাইন) ব্যবহার করে। দ্রুত লাইনগুলি একটি অভ্যন্তরীণ চলমান গড় রিবন গঠন করে এবং ধীর লাইনগুলি একটি বাহ্যিক চলমান গড় রিবন গঠন করে। দামগুলি অভ্যন্তরীণ রিবনের উপরে ভাঙলে একটি ক্রয় সংকেত উত্পন্ন হয় এবং দামগুলি অভ্যন্তরীণ রিবনের নীচে ভাঙলে একটি বিক্রয় সংকেত উত্পন্ন হয়। মিথ্যা বিরতিগুলি ফিল্টার করার জন্য, দামগুলিকে পরপর 3 মোমবাতি জন্য অভ্যন্তরীণ রিবনটি ভেঙে ফেলতে হবে এবং বেশিরভাগ দ্রুত চলমান গড়গুলিও ট্রেডিং সংকেত উত্পন্ন করার আগে সিঙ্ক্রোনাসভাবে ভাঙতে হবে।

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

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

এই কৌশলটির নিম্নলিখিত সুবিধা রয়েছে:

  1. মাল্টি-মুভিং গড় নকশা সঠিকভাবে প্রবণতা দিক নির্ধারণ করতে পারেন। দ্রুত এবং ধীর লাইন সঙ্গে অভ্যন্তরীণ এবং বাইরের চলমান গড় রিবন সমন্বয় মাঝারি থেকে দীর্ঘমেয়াদী প্রবণতা সনাক্ত করতে ভাল কাজ করে।

  2. ধারাবাহিক ভাঙ্গন প্রক্রিয়া কার্যকরভাবে মিথ্যা ভাঙ্গন ফিল্টার করতে পারে। এদিকে, বেশিরভাগ দ্রুত চলমান গড়ের মাধ্যমে ভাঙ্গন করার প্রয়োজন হওয়ায় প্রবণতা পরিবর্তন হচ্ছে তা নিশ্চিত করে।

  3. দীর্ঘমেয়াদী প্রবণতা মূল্যায়ন করলে সংহতকরণের সময় ফাঁদে পড়া এড়ানো যায়। নির্ধারণের জন্য 200 দিনের লাইন ব্যবহার করে ট্রেন্ডগুলি বিপরীত হতে শুরু করলে কেবলমাত্র পজিশন খোলার অনুমতি দেয়।

  4. প্রবণতা অনুসরণ এবং অতিরিক্ত ক্রয়/অতিরিক্ত বিক্রয় শর্তে ভারসাম্য বজায় রাখে। চলমান গড়গুলির নিজস্ব প্রবণতা অনুসরণ করার ক্ষমতা রয়েছে, যখন স্টপ লস পয়েন্ট সেট করার জন্য অতিরিক্ত ক্রয়/অতিরিক্ত বিক্রয় সূচকগুলি একত্রিত করা ঝুঁকি নিয়ন্ত্রণের একটি ভাল ব্যবস্থা নিশ্চিত করে।

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

এই কৌশলটির প্রধান ঝুঁকিগুলির মধ্যে রয়েছেঃ

  1. ব্যর্থ ব্রেকআউটের ঝুঁকি। যখন মিথ্যা ব্রেকআউট ঘটে, তখন কৌশলটি সম্পূর্ণরূপে ক্ষতি এড়াতে পারে না।

  2. ব্যাপ্তি প্রবণতার সময় ক্ষতির ঝুঁকি। যখন বাজার দীর্ঘ সময়ের জন্য ব্যাপ্তি করে, স্টপ লস পয়েন্টগুলি প্রায়শই আঘাত করতে পারে, যা বৃহত্তর ক্ষতির দিকে পরিচালিত করে।

  3. প্যারামিটার অপ্টিমাইজেশান ঝুঁকি। চলমান গড় প্যারামিটারগুলির ভুল সেটিংগুলিও ট্রেডিং সংকেতগুলিতে ত্রুটির দিকে পরিচালিত করতে পারে, যার ফলে বৃহত্তর ক্ষতি হয়।

সংশ্লিষ্ট সমাধানগুলি হলঃ

  1. মূল্যের জন্য পর্যাপ্ত স্থান দেওয়ার জন্য স্টপ লস পয়েন্টগুলি যথাযথভাবে প্রসারিত করুন। অথবা স্টপ লস লাইনকে মূল্য অনুসরণ করার অনুমতি দেওয়ার জন্য একটি ট্রেলিং স্টপ লস পদ্ধতি গ্রহণ করুন।

  2. সংহতকরণের সময় দিকনির্দেশনা ছাড়াই অবস্থান স্থাপন এড়ানোর জন্য প্রবণতা মূল্যায়নকারী সূচক যুক্ত করুন। যেমন ডিএমআই, এমএসিডি এবং অন্যান্য সূচকগুলির সাথে ফিল্টারিং।

  3. ঐতিহাসিক ব্যাকটেস্টিং এবং প্যারামিটার অপ্টিমাইজেশান পদ্ধতি ব্যবহার করুন সেরা প্যারামিটার সমন্বয় নির্বাচন করতে। এছাড়াও বাস্তব ট্রেডিং মধ্যে প্যারামিটার কার্যকারিতা ট্র্যাক এবং গতিশীল অপ্টিমাইজেশান করতে।

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

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

  1. সেরা চক্র সংখ্যা নির্বাচন করতে চলমান গড় পরামিতি অপ্টিমাইজ করুন। সর্বোত্তম পরামিতি সমন্বয় খুঁজে পেতে বিভিন্ন চক্র সংখ্যা সঙ্গে চলমান গড় ব্যাকটেস্ট চালান।

  2. ফিল্টারিংয়ের জন্য প্রবণতা মূল্যায়নকারী সূচক যোগ করুন। যেমন ওভারবয়ড/ওভারসোল্ডের জন্য আরএসআই, চ্যানেল ব্রেকআউটের জন্য বোলিংজার ব্যান্ড ইত্যাদি। প্রবণতা অস্পষ্ট হলে অন্ধভাবে অবস্থান স্থাপন করা এড়িয়ে চলুন।

  3. অভিযোজিত চলমান গড় গ্রহণ করুন। চলমান গড় প্যারামিটারগুলিকে গতিশীলভাবে বাজারের পরিবর্তনশীল পরিস্থিতি এবং অস্থিরতার সাথে সামঞ্জস্য করে অপ্টিমাইজ করুন, যাতে তারা বর্তমান বাজারের অবস্থার সাথে আরও ভালভাবে ফিট করে।

  4. প্রবণতা সম্ভাব্যতা বিচার করতে মেশিন লার্নিং মডেল একত্রিত করুন। একটি সফল ব্রেকআউটের সম্ভাবনা মূল্যায়নের জন্য সম্ভাব্যতা মডেল স্থাপন করুন, সিদ্ধান্ত সিস্টেমকে আদর্শ প্রবেশের সময় নির্ধারণে সহায়তা করুন।

  5. মূল্যের আরও ভাল ট্র্যাকিংয়ের জন্য স্টপ লস কৌশলগুলি অনুকূল করুন। যেমন স্টপ লস লাইনকে আরও বুদ্ধিমান করার জন্য ট্রেলিং স্টপ লস বা গতিশীল অবস্থান সাইজিং স্টপ লস।

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

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


//@version=4
strategy(title="Moving Average Ribbon", shorttitle="MA Ribbon", overlay=true)
src = input(close, type=input.source, title="Source")
matype = input(title="Input one in lowercase: sma, ema, wma, trima, zlema, dema, tema, or hma", type=input.string, defval="trima")
// possible values: sma, ema, wma, trima, zlema, dema, tema, hma (hull ma)



trima(_src, _len) =>
    sma(sma(_src, _len), _len)
hma(_src, _len) =>
    wma(2 * wma(_src, _len / 2) - wma(_src, _len), round(sqrt(_len)))
dema(_src, _len) =>
    2 * ema(_src, _len) - ema(ema(_src, _len), _len)
tema(_src, _len) =>
    3 * ema(_src, _len) - 3 * ema(ema(_src, _len), _len) + 
       ema(ema(ema(_src, _len), _len), _len)
zlema(_src, _len) =>
    ema(_src, _len) + ema(_src, _len) - ema(ema(_src, _len), _len)

ma(_src, _len) =>
    hma__1 = hma(_src, _len)
    ema_1 = ema(_src, _len)
    sma_1 = sma(_src, _len)
    wma_1 = wma(_src, _len)
    trima__1 = trima(_src, _len)
    zlema__1 = zlema(_src, _len)
    dema__1 = dema(_src, _len)
    tema__1 = tema(_src, _len)
    matype == "hma" ? hma__1 : matype == "ema" ? ema_1 : matype == "sma" ? sma_1 : 
       matype == "wma" ? wma_1 : matype == "trima" ? trima__1 : 
       matype == "zlema" ? zlema__1 : matype == "dema" ? dema__1 : tema__1

ma05 = ma(src, 5)
ma08 = ma(src, 8)
ma13 = ma(src, 13)
ma20 = ma(src, 20)
ma30 = ma(src, 30)
ma45 = ma(src, 45)
ma70 = ma(src, 70)
ma105 = ma(src, 105)
ma150 = ma(src, 150)
ma200 = ma(src, 200)




maColor(ma, maRef) =>
    if change(ma) <= 0 and ma05 < maRef
        color.new(color.red, 20)
    else
        if change(ma) >= 0 and ma05 > maRef
            color.new(color.navy, 20)
        else
            if change(ma) < 0 and ma05 > maRef
                color.new(color.red, 20)
            else
                if change(ma) >= 0 and ma05 < maRef
                    color.new(color.navy, 20)
                else
                    color.gray


aboveConfirmed(x,maRef)=>
    above=true
    for i=1 to x
        if close[i]<maRef[i] and not (close[i]>ma200[i]*1.01) and not (ma05[i]>ma105[i]*1.015)
            above:=false
    above


aboveMost(x,len)=>
    above=0
    boolean=false
    if close[len]>ma05[len]
        above:=above+1
    if close[len]>ma08[len]
        above:=above+1
    if close[len]>ma13[len]
        above:=above+1
    if close[len]>ma20[len]
        above:=above+1
    if close[len]>ma30[len]
        above:=above+1
    if close[len]>ma45[len]
        above:=above+1
    if close[len]>ma70[len]
        above:=above+1
    if close[len]>ma105[len]
        above:=above+1
    if close[len]>ma150[len]
        above:=above+1
    if close[len]>ma200[len]
        above:=above+1
    if(above>=x)
        boolean:=true
    boolean
    
belowMost(x,len)=>
    above=0
    boolean=false
    if close[len]<ma05[len]
        above:=above+1
    if close[len]<ma08[len]
        above:=above+1
    if close[len]<ma13[len]
        above:=above+1
    if close[len]<ma20[len]
        above:=above+1
    if close[len]<ma30[len]
        above:=above+1
    if close[len]<ma45[len]
        above:=above+1
    if close[len]<ma70[len]
        above:=above+1
    if close[len]<ma105[len]
        above:=above+1
    if close[len]<ma150[len]
        above:=above+1
    if close[len]<ma200[len]
        above:=above+1
    if(above>=x)
        boolean:=true
    boolean
        
        
belowConfirmed(x,maRef)=>
    below=true
    for i=1 to x
        if close[i]>maRef[i] and not (close[i]<maRef[i]*0.99) and not (ma05[i]<ma105[i]*0.985)
            below:=false
    below
            
            
//plotshape(aboveConfirmed(5,ma150),color=color.navy,location=location.abovebar,style=shape.triangleup,size=size.large,title="above",text="above")
            
plot(ma05, color=maColor(ma05, ma150), style=plot.style_line, title="MMA05", linewidth=2)
plot(ma08, color=maColor(ma08, ma150), style=plot.style_line, title="MMA08", linewidth=1)
plot(ma13, color=maColor(ma13, ma150), style=plot.style_line, title="MMA13", linewidth=1)
plot(ma20, color=maColor(ma20, ma150), style=plot.style_line, title="MMA20", linewidth=1)
plot(ma30, color=maColor(ma30, ma150), style=plot.style_line, title="MMA30", linewidth=1)
plot(ma45, color=maColor(ma45, ma200), style=plot.style_line, title="MMA45", linewidth=1)
plot(ma70, color=maColor(ma70, ma200), style=plot.style_line, title="MMA70", linewidth=2)
plot(ma105, color=maColor(ma105, ma200), style=plot.style_line, title="MMA105", linewidth=2)
plot(ma150, color=maColor(ma150, ma200), style=plot.style_line, title="MMA150", linewidth=3)
plot(ma200, color=maColor(ma200, ma200), style=plot.style_line, title="MM200", linewidth=3)


closeLong=belowMost(6,1) and belowMost(6,2) and belowMost(6,3)
closeShort=aboveMost(6,1) and aboveMost(6,2) and aboveMost(6,3)

isAbove=aboveConfirmed(5,ma200)
strategy.entry("short", false, when=belowConfirmed(3,ma200) and belowMost(8,1) and belowMost(8,2) and belowMost(8,3))
strategy.entry("long", true, when=aboveConfirmed(3,ma200) and aboveMost(8,1) and aboveMost(8,2) and aboveMost(8,3))




strategy.close("long",when=closeLong)
strategy.close("short",when=closeShort)



আরো