मल्टी-इंडिकेटर स्कोरिंग ट्रेडिंग रणनीति


निर्माण तिथि: 2023-11-07 16:16:45 अंत में संशोधित करें: 2023-11-07 16:16:45
कॉपी: 0 क्लिक्स: 730
1
ध्यान केंद्रित करना
1617
समर्थक

मल्टी-इंडिकेटर स्कोरिंग ट्रेडिंग रणनीति

अवलोकन

एक बहु-सूचक स्कोर ट्रेडिंग रणनीति है जो तकनीकी सूचक स्कोर को एकीकृत करके स्वचालित ट्रेडिंग को सक्षम करती है, जो प्रवृत्ति की दिशा और ताकत की पहचान करती है। इस रणनीति में इचिमोकु बादल, एचएमए, आरएसआई, स्टोच, सीसीआई और एमएसीडी सहित सूचकांकों का एक समूह शामिल है। प्रत्येक सूचक के परिणामों के आधार पर, इसके लिए स्कोर करें, और फिर सभी सूचकांकों के स्कोर को समेकित करें, एक समग्र स्कोर बनाने के लिए। जब समग्र स्कोर कम से कम हो, तो अधिक करें।

रणनीति सिद्धांत

इस रणनीति के कई भाग हैं:

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