Multi-Indikator-Scoring-Handelsstrategie


Erstellungsdatum: 2023-11-07 16:16:45 zuletzt geändert: 2023-11-07 16:16:45
Kopie: 0 Klicks: 730
1
konzentrieren Sie sich auf
1617
Anhänger

Multi-Indikator-Scoring-Handelsstrategie

Überblick

Die Strategie berücksichtigt eine Reihe von Indikatoren, darunter die Ichimoku-Wolke, HMA, RSI, Stoch, CCI und MACD. Die Ergebnisse jedes Indikators werden entsprechend bewertet und dann die Bewertungen aller Indikatoren zusammengefasst, um eine Gesamtbewertung zu erstellen.

Strategieprinzip

Die Strategie besteht aus mehreren Teilen:

  1. Berechnen Sie eine Reihe von Indikatoren, darunter die Ichimoku-Wolke, den Hull-Moving Average, den Relative-Strength-Weakness-Index, den Random-Index, den Commodity Channel-Index und die Sensitivität des Moving Averages.

  2. Jede Anzeige wird bewertet. Wenn die Anzeige ein Mehrkopfsignal zeigt, wird ein Positivpunkt gegeben, wenn ein Leerkopfsignal angegeben wird, wird ein Negativpunkt gegeben.

  3. Alle Indikatoren werden addiert und gemittelt, um eine Gesamtbewertung zu erhalten.

  4. Vergleichen Sie die Gesamtbewertung mit einem vorgegebenen Schwellenwert, um die Richtung der Gesamttrend zu bestimmen. Die Bewertung ist überschätzt, wenn sie über dem Schwellenwert liegt, und unter den Schwellenwerten ist sie überschätzt.

  5. Die Position wird nach dem Ergebnis eröffnet.

  6. Der Stop-Loss wird über den ATR-Indikator festgelegt.

Die Strategie nutzt die Vorteile mehrerer Indikatoren, um die Richtung der Markttrends zu beurteilen. Im Vergleich zu einem einzigen Indikator ist es möglich, einige falsche Signale zu filtern und die Zuverlässigkeit der Signale zu verbessern.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Mehrindikator-Komplex-Urteil, erhöht die Signalgenauigkeit. Ein einziger Indikator kann zu Fehlentscheidungen führen. Die Strategie kann durch eine Bewertung nach dem Durchschnitt falsche Signale effektiv filtern.

  2. Indikatoren werden verwendet, um Trends zu erkennen und die aktuelle Stärke zu bestimmen. Ichimoku Cloud beispielsweise beurteilt große Trends, Stoch beurteilt Überkauf und Überverkauf.

  3. Automatischer Handel vermeidet emotionale Einflüsse und setzt Strategie-Signale strikt um.

  4. Mit dem ATR können Sie die Stop-Loss-Vorteile einstellen, um Risiken zu kontrollieren.

  5. Die Parameter können für verschiedene Sorten angepasst werden. Die Parameter des Indikators und die Bewertungsschwellen können optimiert werden.

  6. Die Strategie ist klar und einfach zu verstehen und zu ändern.

Risikoanalyse

Die Strategie birgt auch folgende Risiken:

  1. Eine Kombination aus mehreren Indikatoren ist nicht unbedingt besser als ein einzelner Indikator, und es muss wiederholt getestet werden, um die besten Parameter zu finden.

  2. Wenn der Indikator ein falsches Signal sendet, kann der Durchschnitt der Punktzahl den Verlust nicht vollständig vermeiden.

  3. ATR-Stillstand kann zu nahe oder zu locker sein und muss je nach Art angepasst werden.

  4. Kurvenanpassung, die durch Überoptimierung verursacht wird, sollte vermieden werden. Die Strategie sollte für verschiedene Sorten und Zeiträume getestet werden.

  5. Es kann zu häufig gehandelt werden und die Kosten für den Handel beeinflussen den endgültigen Gewinn.

Optimierungsrichtung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Versuchen Sie, eine Kombination aus mehreren Indikatoren zu testen, um die für eine bestimmte Sorte optimale Option zu finden.

  2. Anpassung der Gewichte für die einzelnen Indikatoren und Optimierung der Bewertungsalgorithmen.

  3. Die ATR-Parameter werden dynamisch angepasst, um die Stop-Loss-Stopp-Rate für die Marktschwankungen zu optimieren.

  4. Hinzufügen von Handelsfilterbedingungen, um unnötige Handelsfrequenzen zu reduzieren, z. B. Trendfilter, Handelsvolumenfilter usw.

  5. Schrittweise Optimierung, um einen optimalen Parameterbereich zu finden, und dann Zufall/Gitteroptimierung, um die beste Parameterkombination zu finden.

  6. Die Strategie wird in mehreren Varianten und Zeitrahmen getestet, um Überoptimierung zu vermeiden.

  7. Kombination mit anderen effektiven Handelsstrategien in einem Strategieportfolio.

Zusammenfassen

Die Mehrindikator-Score-Trading-Strategie verbessert die Genauigkeit und Zuverlässigkeit der Signalbeurteilung durch eine durchschnittliche Bewertung. Die Strategie hat einen großen Parameter-Anpassungsraum und kann für verschiedene Sorten optimiert werden.

Strategiequellcode
/*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))