মাল্টি ইন্ডিকেটর স্কোরিং ট্রেডিং কৌশল

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

img

সারসংক্ষেপ

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

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

কৌশলটি বিভিন্ন অংশ নিয়ে গঠিতঃ

  1. ইচিমোকু ক্লাউড, হুল চলমান গড়, আপেক্ষিক শক্তি সূচক, স্টোকাস্টিক, কমোডিটি চ্যানেল সূচক এবং চলমান গড় ঘনিষ্ঠতা বৈষম্য সহ সূচকগুলির একটি গ্রুপ গণনা করুন।

  2. প্রতিটি সূচককে স্কোর করুন, উর্ধ্বমুখী সংকেতের জন্য ইতিবাচক স্কোর এবং হ্রাসমুখী সংকেতের জন্য নেতিবাচক স্কোর দিন।

  3. সামগ্রিক স্কোর পাওয়ার জন্য সমস্ত সূচক এবং গড় স্কোর যোগ করুন।

  4. সামগ্রিক প্রবণতার দিকনির্দেশ নির্ধারণের জন্য পূর্বনির্ধারিত প্রান্তিকের সাথে সামগ্রিক স্কোর তুলনা করুন। স্কোর প্রান্তিকের চেয়ে বেশি হলে দীর্ঘ, কম হলে সংক্ষিপ্ত যান।

  5. ওপেন পজিশন মূল্যায়নের উপর ভিত্তি করে।

  6. স্টপ লস সেট করুন এবং এটিআর এর উপর ভিত্তি করে লাভ নিন।

এই কৌশলটি বাজারের প্রবণতা নির্ধারণের জন্য একাধিক সূচকের সুবিধাগুলি পুরোপুরি ব্যবহার করে। একক সূচকের তুলনায় এটি কিছু মিথ্যা সংকেত ফিল্টার করতে এবং নির্ভরযোগ্যতা বাড়াতে সহায়তা করে।

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

এই কৌশলটির সুবিধাগুলির মধ্যে রয়েছেঃ

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

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

  3. স্বয়ংক্রিয় ট্রেডিং মানসিক প্রভাব এড়ায় এবং কঠোরভাবে কৌশল সংকেত অনুসরণ করে।

  4. স্টপ লস এবং লাভ নেওয়ার জন্য এটিআর ব্যবহার করা ঝুঁকি ব্যবস্থাপনাকে সহায়তা করে।

  5. বিভিন্ন পণ্যের জন্য পরামিতি এবং স্কোর থ্রেশহোল্ড অপ্টিমাইজ করা যায়।

  6. সহজ এবং পরিষ্কার যুক্তি, সহজেই বোঝা যায় এবং সংশোধন করা যায়।

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

এই কৌশলের ঝুঁকি:

  1. একাধিক সূচক একত্রিত করা একক সূচকের চেয়ে ভাল নয়। সর্বোত্তম পরামিতি খুঁজে পেতে পুনরাবৃত্তি পরীক্ষার প্রয়োজন।

  2. গড় স্কোর সম্পূর্ণরূপে ক্ষতি এড়াতে পারে না যখন সূচক ভুল সংকেত দেয়।

  3. এটিআর স্টপগুলি খুব কাছাকাছি বা খুব আলগা হতে পারে। পণ্যের প্রকৃতির উপর ভিত্তি করে সমন্বয় প্রয়োজন।

  4. অত্যধিক অপ্টিমাইজেশান থেকে অতিরিক্ত ফিটিং এড়ানো। বিভিন্ন পণ্য এবং সময়সীমার উপর স্থায়িত্ব পরীক্ষা করুন।

  5. উচ্চ ট্রেডিং ফ্রিকোয়েন্সি লেনদেনের খরচ বৃদ্ধি করে যা চূড়ান্ত আয়কেও প্রভাবিত করে।

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

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

  1. নির্দিষ্ট পণ্যের জন্য সর্বোত্তম নির্বাচন খুঁজে পেতে আরও সূচক সংমিশ্রণ পরীক্ষা করুন।

  2. ইন্ডিকেটর স্কোর ওজন সামঞ্জস্য করুন, স্কোরিং অ্যালগরিদম অপ্টিমাইজ করুন।

  3. বাজারের অস্থিরতার সাথে আরও ভালভাবে খাপ খাইয়ে নেওয়ার জন্য গতিশীল এটিআর পরামিতি।

  4. অপ্রয়োজনীয় ট্রেডিং ফ্রিকোয়েন্সি হ্রাস করার জন্য ট্রেড ফিল্টার যুক্ত করুন, যেমন ট্রেন্ড ফিল্টার বা ভলিউম ফিল্টার।

  5. প্যারামিটার পরিসীমা খুঁজে পেতে ধাপে ধাপে অপ্টিমাইজ করুন, তারপরে সেরা প্যারামিটার সেটের জন্য র্যান্ডম / গ্রিড অপ্টিমাইজ করুন।

  6. অতিরিক্ত ফিটিং এড়ানোর জন্য একাধিক পণ্য এবং সময়সীমার উপর স্থিতিশীলতা পরীক্ষা করুন।

  7. পোর্টফোলিওর জন্য অন্যান্য কার্যকর ট্রেডিং কৌশলগুলির সাথে একত্রিত করুন।

সিদ্ধান্ত

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


/*backtest
start: 2022-10-31 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Ichi HMA RSI Stoch CCI MACD Technicals Rating Strategy",shorttitle="TRSv420",overlay=true,default_qty_type=strategy.percent_of_equity,default_qty_value=50,commission_type=strategy.commission.percent,commission_value=0.05)
res = input("", title="Indicator Timeframe", type=input.resolution)
Period = input(defval = 14, title = "Period Length", minval = 2)
MinSignalStrength= input(title="Minimum Signal Strength", type=input.float, defval=1.1, minval=0.00, maxval=2.00, step=0.1)
Price = input(defval=open, title="Price Source", type=input.source)
Use_Only_Buy= input(false, title = "Use ONLY BUY mode",type=input.bool)
Use_Only_Sell= input(false, title = "Use ONLY SELL mode",type=input.bool)
Use_ATR_SL_TP= input(true, title = "Use ATR for TP & SL",type=input.bool)
Use_Ichimoku= input(true, title = "Use Ichimoku",type=input.bool)
Use_HMA= input(true, title = "Use Hull MA",type=input.bool)
Use_RSI= input(true, title = "Use RSI",type=input.bool)
Use_Stoch= input(true, title = "Use Stoch",type=input.bool)
Use_CCI= input(true, title = "Use CCI",type=input.bool)
Use_MACD= input(true, title = "Use MacD",type=input.bool)
// Ichimoku Cloud
donchian(len) => avg(lowest(len), highest(len))
ichimoku_cloud() =>
    conversionLine = donchian(9)
    baseLine = donchian(26)
    leadLine1 = avg(conversionLine, baseLine)
    leadLine2 = donchian(52)
    [conversionLine, baseLine, leadLine1, leadLine2]
[IC_CLine, IC_BLine, IC_Lead1, IC_Lead2] = ichimoku_cloud()    
calcRatingMA(ma, src) => na(ma) or na(src) ? na : (ma == src ? 0 : ( ma < src ? 1 : -1 ))
calcRating(buy, sell) => buy ? 1 : ( sell ? -1 : 0 )
calcRatingAll() =>
    //============== HMA =================
    HMA10 = hma(Price, Period)
    HMA20 = hma(Price, 20)
    HMA30 = hma(Price, 30)
    HMA50 = hma(Price, 50)
    HMA100 = hma(Price, 100)
    HMA200 = hma(Price, 200)
    // Relative Strength Index, RSI
    RSI = rsi(Price,14)
    // Stochastic
    lengthStoch = 14
    smoothKStoch = 3
    smoothDStoch = 3
    kStoch = sma(stoch(Price, high, low, lengthStoch), smoothKStoch)
    dStoch = sma(kStoch, smoothDStoch)
    // Commodity Channel Index, CCI
    CCI = cci(Price, 20)
    // Moving Average Convergence/Divergence, MACD
    [macdMACD, signalMACD, _] = macd(Price, 12, 26, 9)
    // -------------------------------------------
    PriceAvg = hma(Price, Period)
    DownTrend = Price < PriceAvg
    UpTrend = Price > PriceAvg
    float ratingMA = 0
    float ratingMAC = 0
    if(Use_HMA)
        if not na(HMA10)
            ratingMA := ratingMA + calcRatingMA(HMA10, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA20)
            ratingMA := ratingMA + calcRatingMA(HMA20, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA30)
            ratingMA := ratingMA + calcRatingMA(HMA30, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA50)
            ratingMA := ratingMA + calcRatingMA(HMA50, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA100)
            ratingMA := ratingMA + calcRatingMA(HMA100, Price)
            ratingMAC := ratingMAC + 1
        if not na(HMA200)
            ratingMA := ratingMA + calcRatingMA(HMA200, Price)
            ratingMAC := ratingMAC + 1
    if(Use_Ichimoku)
        float ratingIC = na
        if not (na(IC_Lead1) or na(IC_Lead2) or na(Price) or na(Price[1]) or na(IC_BLine) or na(IC_CLine))
            ratingIC := calcRating(
             IC_Lead1 > IC_Lead2 and Price > IC_Lead1 and Price < IC_BLine and Price[1] < IC_CLine and Price > IC_CLine,
             IC_Lead2 > IC_Lead1 and Price < IC_Lead2 and Price > IC_BLine and Price[1] > IC_CLine and Price < IC_CLine)
        if not na(ratingIC)
            ratingMA := ratingMA + ratingIC
            ratingMAC := ratingMAC + 1
    ratingMA := ratingMAC > 0 ? ratingMA / ratingMAC : na
    float ratingOther = 0
    float ratingOtherC = 0
    if(Use_RSI)
        ratingRSI = RSI
        if not(na(ratingRSI) or na(ratingRSI[1]))
            ratingOtherC := ratingOtherC + 1
            ratingOther := ratingOther + calcRating(ratingRSI < 30 and ratingRSI[1] < ratingRSI, ratingRSI > 70 and ratingRSI[1] > ratingRSI)
    if(Use_Stoch)
        if not(na(kStoch) or na(dStoch) or na(kStoch[1]) or na(dStoch[1]))
            ratingOtherC := ratingOtherC + 1
            ratingOther := ratingOther + calcRating(kStoch < 20 and dStoch < 20 and kStoch > dStoch and kStoch[1] < dStoch[1], kStoch > 80 and dStoch > 80 and kStoch < dStoch and kStoch[1] > dStoch[1])
    if(Use_CCI)
        ratingCCI = CCI
        if not(na(ratingCCI) or na(ratingCCI[1]))
            ratingOtherC := ratingOtherC + 1
            ratingOther := ratingOther + calcRating(ratingCCI < -100 and ratingCCI > ratingCCI[1], ratingCCI > 100 and ratingCCI < ratingCCI[1])
    if(Use_MACD)
        if not(na(macdMACD) or na(signalMACD))
            ratingOtherC := ratingOtherC + 1
            ratingOther := ratingOther + calcRating(macdMACD > signalMACD, macdMACD < signalMACD)
    ratingOther := ratingOtherC > 0 ? ratingOther / ratingOtherC : na
    float ratingTotal = 0
    float ratingTotalC = 0
    if not na(ratingMA)
        ratingTotal := ratingTotal + ratingMA
        ratingTotalC := ratingTotalC + 1
        ratingTotal := ratingTotal + ratingOther
        ratingTotalC := ratingTotalC + 1
    ratingTotal := ratingTotalC > 0 ? ratingTotal / ratingTotalC : na
    [ratingTotal, ratingOther, ratingMA, ratingOtherC, ratingMAC]
[ratingTotal, ratingOther, ratingMA, ratingOtherC, ratingMAC]  = security(syminfo.tickerid, res, calcRatingAll(), lookahead=false)
tradeSignal = ratingTotal+ratingOther+ratingMA
dynSLpoints(factor) => factor * atr(14) / syminfo.mintick
if not (Use_Only_Sell)
    strategy.entry("long", strategy.long, when = tradeSignal > MinSignalStrength)
if not (Use_Only_Buy)    
    strategy.entry("short", strategy.short, when = tradeSignal < -MinSignalStrength)
if(Use_ATR_SL_TP)
    strategy.exit("sl/tp", loss = dynSLpoints(3), trail_points = dynSLpoints(5), trail_offset = dynSLpoints(2))

আরো