मल्टी इंडिकेटर स्कोरिंग ट्रेडिंग रणनीति स्वचालित ट्रेडिंग के लिए प्रवृत्ति की दिशा और ताकत की पहचान करने के लिए तकनीकी संकेतकों को स्कोरिंग को एकीकृत करती है। इसमें इचिमोकू क्लाउड, एचएमए, आरएसआई, स्टॉक, सीसीआई और एमएसीडी सहित संकेतकों के एक समूह पर विचार किया जाता है। प्रत्येक संकेतक परिणाम स्कोर किया जाता है और समग्र स्कोर सभी संकेतकों के स्कोर का औसत करके गणना की जाती है। जब समग्र स्कोर सीमा से ऊपर होता है, तो लंबा होता है। जब सीमा से नीचे होता है, तो छोटा होता है।
इस रणनीति में कई भाग शामिल हैंः
इचिमोकू क्लाउड, हॉल मूविंग एवरेज, रिलेटिव स्ट्रेंथ इंडेक्स, स्टोकास्टिक, कमोडिटी चैनल इंडेक्स और मूविंग एवरेज कन्वर्जेंस डिवर्जेंस सहित संकेतकों के एक समूह की गणना करें।
प्रत्येक संकेतक को स्कोर करें। तेजी के संकेत के लिए सकारात्मक स्कोर और मंदी के संकेत के लिए नकारात्मक स्कोर दें।
समग्र स्कोर प्राप्त करने के लिए सभी संकेतकों के स्कोर का योग और औसत।
समग्र स्कोर की तुलना पूर्व निर्धारित सीमा के साथ करें ताकि समग्र प्रवृत्ति दिशा निर्धारित की जा सके। स्कोर सीमा से अधिक होने पर लंबा, कम होने पर छोटा करें।
निर्णय के आधार पर खुली स्थिति, तेजी के समय लंबी, गिरावट के समय छोटी।
एटीआर के आधार पर स्टॉप लॉस और ले लाभ सेट करें।
यह रणनीति बाजार के रुझान को निर्धारित करने के लिए कई संकेतकों के लाभों का पूरा उपयोग करती है। एकल संकेतकों की तुलना में, यह कुछ झूठे संकेतों को फ़िल्टर करने और विश्वसनीयता बढ़ाने में मदद करता है।
इस रणनीति के लाभों में निम्नलिखित शामिल हैंः
कई संकेतकों का संयोजन संकेत की सटीकता में सुधार करता है। एकल संकेतक झूठे संकेतों के लिए प्रवण है। स्कोरिंग और औसतकरण गलत संकेतों को प्रभावी ढंग से फ़िल्टर करने में मदद करता है।
रुझान और गति की पहचान करने के लिए संकेतकों की ताकत का उपयोग करें। उदाहरण के लिए, रुझान के लिए इचिमोकू क्लाउड, ओवरबॉट और ओवरसोल्ड के लिए स्टोकास्टिक्स।
स्वचालित व्यापार भावनात्मक प्रभावों से बचता है और रणनीतिक संकेतों का सख्ती से पालन करता है।
स्टॉप लॉस के लिए एटीआर का उपयोग करना और लाभ लेने से जोखिम प्रबंधन में मदद मिलती है।
मापदंडों और स्कोर सीमा को विभिन्न उत्पादों के लिए अनुकूलित किया जा सकता है।
सरल और स्पष्ट तर्क, समझने और संशोधित करने में आसान।
इस रणनीति के जोखिमः
कई संकेतकों का संयोजन जरूरी नहीं कि एक से बेहतर हो। इष्टतम मापदंडों को खोजने के लिए दोहराए जाने वाले परीक्षणों की आवश्यकता होती है।
औसत स्कोर पूरी तरह से नुकसान से बच नहीं सकता है जब संकेतक गलत संकेत देते हैं।
एटीआर स्टॉप बहुत करीब या बहुत ढीला हो सकता है। उत्पाद की प्रकृति के आधार पर समायोजन की आवश्यकता है।
अत्यधिक अनुकूलन से ओवरफिटिंग से बचें। विभिन्न उत्पादों और समय अवधि पर मज़बूती का परीक्षण करें।
उच्च व्यापारिक आवृत्ति से लेन-देन की लागत बढ़ जाती है, जो अंतिम लाभ पर भी प्रभाव डालती है।
इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः
विशिष्ट उत्पाद के लिए इष्टतम चयन खोजने के लिए अधिक संकेतक संयोजनों का परीक्षण करें।
सूचक स्कोर भार समायोजित करें, स्कोरिंग एल्गोरिथ्म अनुकूलित करें।
बाजार की अस्थिरता को बेहतर ढंग से समायोजित करने के लिए गतिशील एटीआर पैरामीटर।
अनावश्यक ट्रेडिंग आवृत्ति को कम करने के लिए ट्रेड फ़िल्टर जोड़ें, जैसे ट्रेंड फ़िल्टर या वॉल्यूम फ़िल्टर।
पैरामीटर रेंज खोजने के लिए चरणबद्ध अनुकूलन करें, फिर सर्वोत्तम पैरामीटर सेट के लिए यादृच्छिक/ग्रिड अनुकूलन करें.
ओवरफिटिंग से बचने के लिए कई उत्पादों और समय सीमाओं पर मजबूती का परीक्षण करें।
पोर्टफोलियो के लिए अन्य प्रभावी ट्रेडिंग रणनीतियों के साथ संयोजन करें।
मल्टी इंडिकेटर स्कोरिंग रणनीति इंडिकेटर स्कोर को औसत करके सिग्नल सटीकता और विश्वसनीयता में सुधार करती है। बड़े अनुकूलन स्थान के साथ, इसे विभिन्न उत्पादों पर अच्छे परिणामों के लिए अनुकूलित किया जा सकता है। पैरामीटर अनुकूलन और रणनीति परीक्षण को वैज्ञानिक रखने के लिए ओवरफिटिंग जोखिमों पर ध्यान देने की आवश्यकता है। व्यापक अनुकूलन दिशाओं के साथ एक रणनीति विचार के रूप में, यह आगे के शोध और अनुप्रयोग का हकदार है।
/*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))