
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.
La stratégie est composée de plusieurs volets:
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.
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.
Le résultat obtenu est une moyenne de toutes les notations.
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.
Les positions sont ouvertes en fonction des résultats obtenus.
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.
Cette stratégie présente les avantages suivants:
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.
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.
Le trading automatique évite les effets émotionnels et applique strictement les signaux stratégiques.
L’utilisation de l’ATR pour définir un avantage stop-loss est bénéfique pour la maîtrise des risques.
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.
La logique de la stratégie est simple et claire, facile à comprendre et à modifier.
La stratégie présente également les risques suivants:
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.
Si l’indicateur émet un signal erroné, le score moyen ne peut pas éviter complètement la perte.
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.
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.
La fréquence des transactions peut être trop élevée et les coûts de transaction peuvent affecter les bénéfices finaux.
Cette stratégie peut être optimisée dans les domaines suivants:
Tester plus de combinaisons d’indicateurs pour trouver les meilleurs pour une variété donnée.
Adapter le poids de chaque indicateur et optimiser les algorithmes de notation.
Modifier dynamiquement les paramètres ATR pour que les arrêts de perte soient plus adaptés aux fluctuations du marché.
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.
Optimisation progressive pour trouver la plage de paramètres à optimiser, puis optimisation aléatoire/grille pour trouver la meilleure combinaison de paramètres.
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.
Combiner avec d’autres stratégies de trading efficaces pour former un portefeuille de stratégies.
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.
/*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))