Die Multi-Indikator-Scoring-Handelsstrategie integriert technische Indikatoren, um die Trendrichtung und Stärke für den automatisierten Handel zu identifizieren. Sie berücksichtigt eine Gruppe von Indikatoren, darunter Ichimoku Cloud, HMA, RSI, Stoch, CCI und MACD. Jedes Indikator-Ergebnis wird erzielt und die Gesamtscore wird berechnet, indem alle Indikatoren
Die Strategie besteht aus mehreren Teilen:
Berechnen Sie eine Gruppe von Indikatoren, darunter Ichimoku Cloud, Hull Moving Average, Relative Strength Index, Stochastic, Commodity Channel Index und Moving Average Convergence Divergence.
Geben Sie eine positive Punktzahl für ein bullisches Signal und eine negative Punktzahl für ein bärisches Signal.
Summe und Durchschnitt aller Indikatoren
Vergleichen Sie die Gesamtscore mit dem vorgegebenen Schwellenwert, um die allgemeine Trendrichtung zu bestimmen.
Offene Positionen basierend auf Urteilen, lang bei Aufschwung, kurz bei Abstieg.
Setzen Sie Stop-Loss und Gewinn auf Basis von ATR.
Die Strategie nutzt die Vorteile mehrerer Indikatoren zur Bestimmung der Marktentwicklung voll aus und hilft im Vergleich zu einem einzigen Indikator, einige falsche Signale zu filtern und die Zuverlässigkeit zu erhöhen.
Zu den Vorteilen dieser Strategie gehören:
Die Kombination mehrerer Indikatoren verbessert die Signalgenauigkeit. Ein einzelner Indikator ist anfällig für falsche Signale.
Verwenden Sie Indikatoren
Der automatisierte Handel vermeidet emotionale Auswirkungen und folgt streng den Strategie-Signalen.
Die Verwendung von ATR für Stop Loss und Take Profit hilft beim Risikomanagement.
Die Parameter und die Bewertungsschwelle können für verschiedene Produkte optimiert werden.
Einfache und klare Logik, leicht zu verstehen und zu ändern.
Die Risiken dieser Strategie:
Mehrfache Indikatoren kombiniert sind nicht unbedingt besser als ein einzelner. Wiederholte Tests sind notwendig, um optimale Parameter zu finden.
Durchschnittswerte können Verluste nicht vollständig vermeiden, wenn Indikatoren falsche Signale geben.
Die ATR-Haltestellen können zu nahe oder zu locker sein und müssen je nach Produktart angepasst werden.
Vermeiden Sie Überanpassung durch übermäßige Optimierungen.
Eine hohe Handelsfrequenz erhöht die Transaktionskosten, was sich auch auf die Endrendite auswirkt.
Die Strategie kann in folgenden Aspekten optimiert werden:
Testen Sie mehr Indikatorenkombinationen, um eine optimale Auswahl für ein bestimmtes Produkt zu finden.
Anpassen der Indikator-Werte, optimieren Sie den Algorithmus.
Dynamische ATR-Parameter, um die Marktvolatilität besser anzupassen.
Hinzufügen von Handelsfiltern zur Verringerung unnötiger Handelsfrequenz, wie zum Beispiel Trendfilter oder Volumenfilter.
Schrittweise optimieren, um den Parameterbereich zu finden, dann zufällig / Raster optimieren für den besten Parameter-Set.
Die Robustheit wird auf mehreren Produkten und Zeitrahmen getestet, um eine Überanpassung zu vermeiden.
Kombination mit anderen effektiven Handelsstrategien für das Portfolio.
Die Multi-Indikator-Scoring-Strategie verbessert die Signalgenauigkeit und Zuverlässigkeit durch Durchschnittswert der Indikator-Scores. Mit großem Optimierungsraum kann sie für gute Ergebnisse auf verschiedenen Produkten optimiert werden. Überfitting-Risiken benötigen Aufmerksamkeit, um die Parameteroptimierung und die Strategieprüfung wissenschaftlich zu halten. Als Strategieidee mit breiten Optimierungsrichtungen verdient sie weitere Forschung und Anwendung.
/*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))