Stratégie de trading avec notation multi-indicateurs


Date de création: 2023-11-07 16:16:45 Dernière modification: 2023-11-07 16:16:45
Copier: 0 Nombre de clics: 730
1
Suivre
1617
Abonnés

Stratégie de trading avec notation multi-indicateurs

Aperçu

La stratégie prend en compte un ensemble d’indicateurs, y compris le nuage d’Ichimoku, le HMA, le RSI, le Stoch, le CCI et le MACD. Selon les résultats de chaque indicateur, il est noté, puis les notes de tous les indicateurs sont combinées pour former un score global.

Principe de stratégie

La stratégie est composée de plusieurs volets:

  1. Un ensemble d’indicateurs est calculé, comprenant le nuage d’Ichimoku, la moyenne mobile de Hull, l’indice de force relative, l’indice aléatoire, l’indice des canaux de marchandises et la sensibilité à la moyenne mobile.

  2. Chaque indicateur est noté. Un score positif est donné lorsque l’indicateur affiche un signal à plusieurs têtes et un score négatif lorsque le signal est vide.

  3. Le résultat obtenu est une moyenne de toutes les notations.

  4. Le score global est comparé à un seuil prédéfini pour déterminer la direction de la tendance globale. Le score est plus élevé lorsque le seuil est élevé et moins élevé lorsque le seuil est bas.

  5. Les positions sont ouvertes en fonction des résultats obtenus.

  6. Le stop loss est fixé par l’indicateur ATR.

Cette stratégie exploite les avantages de plusieurs indicateurs pour juger de la direction des tendances du marché. Par rapport à un seul indicateur, il est possible de filtrer certains faux signaux et d’améliorer la fiabilité des signaux.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. La combinaison d’indicateurs multiples améliore la précision des signaux. Un seul indicateur est susceptible d’entraîner des erreurs de jugement. Cette stratégie permet de filtrer efficacement les faux signaux en évaluant la moyenne.

  2. L’indicateur est utilisé pour identifier la tendance et la force actuelle. Par exemple, le nuage Ichimoku détermine les grandes tendances, Stoch détermine les sur-achats et les sur-vente.

  3. Le trading automatique évite les effets émotionnels et applique strictement les signaux stratégiques.

  4. L’utilisation de l’ATR pour définir un avantage stop-loss est bénéfique pour la maîtrise des risques.

  5. Les paramètres peuvent être ajustés pour les différentes variétés. Les paramètres de l’indicateur et les seuils de notation peuvent être optimisés.

  6. La logique de la stratégie est simple et claire, facile à comprendre et à modifier.

Analyse des risques

La stratégie présente également les risques suivants:

  1. Les combinaisons de plusieurs indicateurs ne sont pas nécessairement meilleures qu’un seul indicateur, il faut tester à plusieurs reprises pour trouver le paramètre optimal.

  2. Si l’indicateur émet un signal erroné, le score moyen ne peut pas éviter complètement la perte.

  3. L’arrêt de l’ATR peut être trop rapproché ou trop relâché et doit être ajusté en fonction des caractéristiques de la race.

  4. Il est nécessaire d’éviter les ajustements de courbe qui conduisent à une optimisation excessive. La robustesse de la stratégie doit être testée dans différentes variétés et périodes de temps.

  5. La fréquence des transactions peut être trop élevée et les coûts de transaction peuvent affecter les bénéfices finaux.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Tester plus de combinaisons d’indicateurs pour trouver les meilleurs pour une variété donnée.

  2. Adapter le poids de chaque indicateur et optimiser les algorithmes de notation.

  3. Modifier dynamiquement les paramètres ATR pour que les arrêts de perte soient plus adaptés aux fluctuations du marché.

  4. Ajout de conditions de filtrage des transactions pour réduire la fréquence des transactions inutiles, telles que le filtrage des tendances, le filtrage du volume des transactions, etc.

  5. Optimisation progressive pour trouver la plage de paramètres à optimiser, puis optimisation aléatoire/grille pour trouver la meilleure combinaison de paramètres.

  6. Tester la robustesse de la stratégie sur plusieurs variétés et sur plusieurs périodes de temps afin d’éviter une optimisation excessive.

  7. Combiner avec d’autres stratégies de trading efficaces pour former un portefeuille de stratégies.

Résumer

Les stratégies de trading à notation multi-indicateurs améliorent l’exactitude et la fiabilité du jugement des signaux en évaluant la pensée de la moyenne. Les paramètres de la stratégie sont largement ajustés et peuvent être optimisés pour différentes variétés.

Code source de la stratégie
/*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))