Optimisation de la stratégie de tendance basée sur le graphique des nuages Ichimoku

Auteur:ChaoZhang est là., Date: le 19 janvier 2024 à 14 h 45 21 min
Les étiquettes:

img

Résumé

Cette stratégie combine le graphique des nuages Ichimoku avec divers indicateurs auxiliaires pour suivre les tendances. Elle utilise principalement le nuage Ichimoku pour déterminer la direction de la tendance et le MACD, CMF, TSI et d'autres indicateurs pour filtrer pour améliorer la qualité du signal.

Principaux

Cette stratégie utilise principalement la transformation du nuage Ichimoku pour juger de la direction de la tendance. Il va long quand le Tenkan-sen traverse au-dessus du nuage et court quand le Tenkan-sen traverse en dessous. Pendant ce temps, il utilise Chikou Span, histogramme MACD, CMF et TSI pour le filtrage multicouche pour assurer la qualité du signal.

Plus précisément, le signal long est déclenché lorsque:

  1. Tenkan-sen traverse le nuage
  2. Le nuage est grand et Tenkan-sen est au-dessus de Kijun-sen.
  3. Chikou Span est au-dessus de la ligne 0.
  4. Le prix de clôture est au-dessus du nuage
  5. L'histogramme MACD est supérieur à 0
  6. CMF est supérieur à 0,1
  7. STI est supérieure à 0

Le signal court est déclenché lorsque les conditions ci-dessus sont inversées. Par de tels critères complets, la plupart des faux signaux peuvent être filtrés et les principales tendances du marché capturées.

Les avantages

Le plus grand avantage de cette stratégie est de filtrer les faux signaux et de détecter les tendances fortes en combinant plusieurs indicateurs.

  1. Le nuage d' Ichimoku détermine la direction de la tendance principale
  2. Les indicateurs auxiliaires filtrent davantage les signaux et réduisent les risques
  3. Considère de manière exhaustive plusieurs délais pour des signaux plus fiables
  4. Des règles strictes pour ne négocier que des réglages de haute qualité et éviter les marchés instables
  5. Mécanisme de suivi de tendance pour maximiser les bénéfices de tendance

Grâce à de tels jugements, la stratégie permet d'identifier efficacement les secteurs chauds à moyen et long terme et de tirer profit du trading de tendance.

Les risques

Les principaux risques de cette stratégie sont les suivants:

  1. Risque de fausse rupture provoquant de faux signaux
  2. Risque d'inversion de tendance entraînant la perte de tous les bénéfices
  3. Opportunités manquantes avec une fréquence de négociation relativement faible

Les solutions:

  1. Réduire correctement les critères de filtrage pour augmenter la fréquence des échanges
  2. Ajouter une condition de stop-loss pour limiter la taille des pertes
  3. Optimiser les paramètres pour améliorer la précision du signal

Amélioration

Les principales orientations d'optimisation:

  1. Optimisation des paramètres grâce à plus de backtests pour trouver une meilleure combinaison de paramètres

  2. Ajouter un mécanisme de stop loss pour contrôler les risques

  3. Ajoutez un stop-loss pour verrouiller les bénéfices

  4. Testez plus d'indicateurs pour trouver une meilleure combinaison de filtres

  5. Ajoutez des règles pour distinguer la vraie fuite

Conclusion

Cette stratégie combine efficacement le nuage Ichimoku et plusieurs indicateurs auxiliaires.


/*backtest
start: 2024-01-11 00:00:00
end: 2024-01-13 14:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © exlux99

//@version=4
strategy("Ichimoku with MACD/ CMF/ TSI", overlay=true, margin_long=0, margin_short=0)



//Inputs
ts_bars = input(10, minval=1, title="Tenkan-Sen Bars")
ks_bars = input(30, minval=1, title="Kijun-Sen Bars")
ssb_bars = input(52, minval=1, title="Senkou-Span B Bars")
cs_offset = input(26, minval=1, title="Chikou-Span Offset")
ss_offset = input(26, minval=1, title="Senkou-Span Offset")
long_entry = input(true, title="Long Entry")
short_entry = input(true, title="Short Entry")

middle(len) => avg(lowest(len), highest(len))

// Ichimoku Components
tenkan = middle(ts_bars)
kijun = middle(ks_bars)
senkouA = avg(tenkan, kijun)
senkouB = middle(ssb_bars)


ss_high = max(senkouA[ss_offset-1], senkouB[ss_offset-1])
ss_low = min(senkouA[ss_offset-1], senkouB[ss_offset-1])

// Entry/Exit Signals
fast_length = input(title="Fast Length", type=input.integer, defval=17)
slow_length = input(title="Slow Length", type=input.integer, defval=28)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 5)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=true)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=true)

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal


tk_cross_bull = tenkan > kijun
tk_cross_bear = tenkan < kijun
cs_cross_bull = mom(close, cs_offset-1) > 0
cs_cross_bear = mom(close, cs_offset-1) < 0
price_above_kumo = close > ss_high
price_below_kumo = close < ss_low


//CMF
lengthA = input(8, minval=1, title="CMF Length")
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, lengthA) / sum(volume, lengthA)


//TSI
long = input(title="Long Length", type=input.integer, defval=8)
short = input(title="Short Length", type=input.integer, defval=8)
price = close
double_smooth(src, long, short) =>
	fist_smooth = ema(src, long)
	ema(fist_smooth, short)
pc = change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)



bullish = tk_cross_bull and cs_cross_bull and price_above_kumo and hist > 0 and mf > 0.1 and tsi_value > 0
bearish = tk_cross_bear and cs_cross_bear and price_below_kumo and hist < 0  and mf < -0.1 and tsi_value < 0



strategy.entry("Long", strategy.long, when=bullish and long_entry)
strategy.entry("Short", strategy.short, when=bearish and short_entry)

strategy.close("Long", when=bearish and not short_entry)
strategy.close("Short", when=bullish and not long_entry)

Plus de