La tendance des nuages Ichimoku suit la stratégie

Auteur:ChaoZhang est là., Date: 2024-02-01 11h34 et 23h
Les étiquettes:

img

I. Nom de la stratégie: Ichimoku Cloud

II. Vue d'ensemble de la stratégie

Cette stratégie utilise plusieurs signaux Ichimoku Cloud pour concevoir une stratégie de suivi de tendance pure qui vise à capturer les tendances à moyen et long terme, à filtrer les consolidations et à suivre les directions de tendance fortes.

III. Principe de stratégie

Cette stratégie utilise principalement Tenkan-sen, Kijun-sen, Chikou Span et d'autres indicateurs clés du Nuage Ichimoku. Pour juger des tendances à long terme, elle se concentre sur la relation entre le Span leader et le retard; pour les délais d'entrée et de sortie spécifiques, elle examine les croisements de Tenkan-sen et Kijun-sen et les changements de la relation de prix avec le Nuage.

En résumé, la logique de base est la suivante: confirmer la tendance à moyen et long terme -> attendre de forts signaux de reprise de la tendance -> entrer pour suivre les tendances -> sortir avec un stop loss.

Plus précisément, pour déterminer la tendance à moyen et long terme, il utilise la relation entre le Span dominant et le Span retardant (au-dessus du Span vert dominant signalant la tendance à la hausse et vice versa).

Cela élimine les consolidations à court et moyen terme et permet de détecter les fortes tendances pour une performance supérieure constante sur les marchés.

IV. Avantages

(1) L'utilisation du Nuage Ichimoku pour déterminer la direction de la tendance à moyen et long terme est bénéfique pour localiser les principaux bords directionnels.

(2) Les croisements Tenkan-sen/Kijun-sen et les changements de relation de prix avec le Cloud permettent de filtrer efficacement les consolidations et de détecter rapidement les fortes tendances.

(3) Le mécanisme de sortie par arrêt de perte en traînée permet de suivre les grandes tendances tout en contrôlant efficacement les pertes isolées.

(4) La combinaison de différents signaux Ichimoku crée un système robuste qui suit les tendances en douceur.

V. Les risques

(1) Risque systémique d'identification erronée d'une tendance plus importante Si la tendance plus importante est diagnostiquée à tort, toutes les actions ultérieures entraîneraient un risque de direction erronée.

(2) Risque lié au mauvais choix du moment de l'entrée.

(3) Risque des arrêts trop serrés. Des mouvements de prix extrêmes peuvent entraîner des arrêts trop serrés entraînant des pertes imprévues.

(4) Une fréquence de négociation élevée entraînant des coûts de transaction excessifs.

VI. Zones d'amélioration

(1) Tester différentes combinaisons de périodes d'entrée Ichimoku pour trouver les paramètres optimaux.

(2) Optimiser les filtres d'entrée pour assurer une entrée de haute qualité.

(3) Ajustez la distance d'arrêt pour équilibrer le rapport risque/récompense.

(4) Ajouter des niveaux cibles de profit basés sur les distances entre les indicateurs clés de prix pour créer des mécanismes de prise de profit adaptatifs.

VII. Conclusion

Cette stratégie de suivi de tendance Ichimoku Cloud synthétise plusieurs signaux Ichimoku pour diagnostiquer la tendance, les entrées de temps et les arrêts de piste. La pratique montre qu'elle peut capturer efficacement les tendances à moyen et long terme, filtrer les consolidations et atteindre une surperformance constante.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Ichimoku trendfollowing", overlay=true, initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=0.04, slippage=2)

//***************************
//  INPUT BACKTEST RANGE    *
//***************************
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2010, title = "From Year", minval = 2000) 
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2000)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

//***************
//*  ICHIMOKU   *
//***************
//inizializzazione parametri,,
tenkanPeriods = input(9, minval=1, title="Tenkan-Sen")
kinjunPeriods = input(26, minval=1, title="Kinjun-Sen")
senkouSpanBPeriods = input(52, minval=1, title="Senkou Span B")
displacement = input(26, minval=1, title="-ChinkouSpan/+SenkouSpan A")

//definizione Tenkan-Sen (9 Period), Kinjun-Sen (26 Period), Chinkou Span (Lagging Line)
averageHighLow(period) => avg(lowest(period), highest(period))
tenkan= averageHighLow(tenkanPeriods)
kinjun = averageHighLow(kinjunPeriods)
senkouSpanA = avg(tenkan, kinjun)
senkouSpanB = averageHighLow(senkouSpanBPeriods)

//definisco il colore della kumo in base al trend.
senkouSpan1Above = senkouSpanA >= senkouSpanB ? 1 : na
senkouSpan2Below = senkouSpanA <= senkouSpanB ? 1 : na

span1plotU = senkouSpan1Above ? senkouSpanA : na
span2plotU = senkouSpan1Above ? senkouSpanB : na
span1plotD = senkouSpan2Below ? senkouSpanA : na
span2plotD = senkouSpan2Below ? senkouSpanB : na

col = senkouSpanA >= senkouSpanB ? lime : red

//plots Ichimoku
plot(tenkan, title = 'Tenkan-Sen', linewidth=1, color=blue)
plot(kinjun, title = 'Kinjun-Sen', linewidth=1, color=red)
plot(close, title = 'Chinkou Span', linewidth=1, offset = -displacement, color=aqua)
plot( senkouSpanA, title = 'Senkou Span A', style=line, linewidth=1, offset = displacement, color=lime)
plot(senkouSpanB, title = 'Senkou Span B', style=line, linewidth=1, offset = displacement, color=red)

//Cloud Lines Plot 
p1 = plot(span1plotU ? span1plotU  : na, title = 'Senkou Span A Above Senkou Span B', style=linebr, linewidth=1, offset = displacement, color=col)
p2 = plot(span2plotU ? span2plotU  : na, title = 'Senkou Span B (52 Period) Below Span A Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
p3 = plot(span1plotD ? span1plotD  : na, title = 'Senkou Span A (26 Period) Below Span B Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
p4 = plot(span2plotD ? span2plotD  : na, title = 'Senkou Span B (52 Period) Above Span A Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
//Fills that color cloud based on Trend.
fill(p1, p2, color=lime, transp=70, title='Kumo (Cloud)')
fill(p3, p4, color=red, transp=70, title='Kumo (Cloud)')

//***********************************************
//*     condizioni ingresso ed uscita mercato   *
//***********************************************
isKumoRialzista = senkouSpanA >= senkouSpanB ? true : false
isSopraKumo = (close > max(senkouSpanA[displacement], senkouSpanB[displacement]))
isSottoKumo = (close < min(senkouSpanA[displacement], senkouSpanB[displacement]))
isChinkouSpanSopra = high[displacement]<close
isChinkouSpanSotto = low[displacement]>close

filtroLong=isSopraKumo and isChinkouSpanSopra
filtroShort=isSottoKumo and isChinkouSpanSotto

//rimbalzato su kijun quando i prezzi stavano ritracciando e il trend era già in atto(tenkan >kijun x entrare long
isPullBackLijunEntryLong = kinjun<tenkan and low<kinjun and (close>kinjun) 
isPullBackLijunEntryShort =kinjun>tenkan and high>kinjun and  (close<kinjun) 

//Breackout Kumo
isBreackoutKumoEntryLong =  crossover(close, max(senkouSpanA[displacement], senkouSpanB[displacement])) and (close>tenkan) and (close>kinjun) 
isBreackoutKumoEntryShort =  crossunder(close, min(senkouSpanA[displacement], senkouSpanB[displacement])) and (close<tenkan) and (close<kinjun)

ConditionEntryLong = (isPullBackLijunEntryLong or isBreackoutKumoEntryLong ) and filtroLong
ConditionEntryShort = (isPullBackLijunEntryShort or isBreackoutKumoEntryLong ) and filtroShort

isExitLong = close<kinjun
isExitShort = close>kinjun

//ingressi ed uscite Mercato
strategy.entry ("Long",long=true, when = window() and ConditionEntryLong)
strategy.entry ("Short",long=false, when = window() and ConditionEntryShort)

strategy.close(id="Long", when=isExitLong)
strategy.close(id="Short", when=isExitShort)
strategy.close_all(when=not window())


Plus de