Stratégie de suivi des tendances basée sur Ichimoku Kinko Hyo


Date de création: 2024-01-18 15:03:28 Dernière modification: 2024-01-18 15:03:28
Copier: 2 Nombre de clics: 605
1
Suivre
1617
Abonnés

Stratégie de suivi des tendances basée sur Ichimoku Kinko Hyo

Aperçu

Il s’agit d’une stratégie de suivi de tendance conçue sur la base d’indicateurs de la table d’équilibre à première vue. Cette stratégie utilise les lignes de conversion, les lignes de référence et la forme du nuage de la table d’équilibre à première vue, définit des conditions d’entrée très strictes et ferme les ordres en utilisant un simple arrêt-perte.

Principe de stratégie

La stratégie utilise les lignes de conversion, les lignes de référence, les lignes de front A et de front B de la table d’équilibre à première vue, ainsi que les relations entre les prix eux-mêmes pour déterminer la direction et la force de la tendance. Les critères de jugement sont les suivants:

  1. Les prix sont au-dessus des nuages et les nuages sont larges.
  2. Les nuages s’élargiront dans le futur.
  3. La ligne de référence est au-dessus des nuages.
  4. la ligne de conversion est au-dessus de la ligne de référence;
  5. Les prix sont au-dessus de la ligne de conversion.
  6. L’angle de la ligne de front A, de la ligne de front B, de la ligne de référence et de la ligne de transition, actuelle et future, est à l’envers;

Un signal d’achat est généré lorsque toutes les conditions ci-dessus sont remplies simultanément; un signal de vente est généré lorsque toutes les conditions sont inversées.

La stratégie définit également la ligne de front A comme une ligne de stop loss. Lorsque le prix dépasse la ligne de stop loss, les positions correspondantes sont liquidées.

Analyse des avantages

Il s’agit d’une stratégie très conditionnelle qui permet d’éviter efficacement les interférences de faux signaux et ainsi de bloquer les opportunités de grandes tendances. En même temps, la stratégie utilise plusieurs indicateurs pour juger des tendances et éviter le risque systémique qu’un seul indicateur se trompe.

Cette stratégie est adaptée aux longues lignes et permet de réduire la fréquence des transactions, ce qui contribue à réduire les coûts de transaction et l’impact des points de glissement.

Analyse des risques

La stratégie a une ligne de stop-loss relativement lâche, la ligne de front A. Cela peut entraîner un risque de perte unique relativement élevé. Il est possible d’envisager de resserrer la ligne de stop-loss ou d’utiliser des indicateurs auxiliaires pour contrôler le risque.

En outre, il y a moins de signaux de stratégie et il est possible de manquer des opportunités de courts-circuits. Si vous recherchez des transactions plus fréquentes, vous pouvez envisager de réduire la rigueur de certaines conditions d’entrée.

Direction d’optimisation

On peut envisager d’équilibrer les conditions d’entrée de manière souple, en abaissant le seuil d’entrée afin d’obtenir plus de signaux; ou d’améliorer la norme en supprimant plus de bruit et en bloquant les signaux moins fins.

Les méthodes d’arrêt des pertes peuvent être optimisées, en essayant des méthodes telles que l’arrêt automatique ou l’arrêt à distance pour contrôler les pertes individuelles.

Il est possible de tester l’influence de différents paramètres sur les résultats et de trouver la combinaison optimale de paramètres. Il est également possible d’ajouter d’autres indicateurs pour obtenir un score plus précis pour la gestion des commandes.

Résumer

Il s’agit d’une stratégie de suivi de tendance très rigoureuse. Elle utilise plusieurs indicateurs de l’équilibre à première vue pour déterminer la direction et la force de la tendance et éviter les faux signaux.

Code source de la stratégie
/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="BadaBing Ichimoku", shorttitle="BadaBing", overlay=true)

atr_period = input(title="ATR Period",  defval=20)
conversion_period = input(title="Conversion Line Period", defval=9, minval=1)
base_period = input(title="Base Line Period", defval=26, minval=1)
span_b_period = input(title="Span B Period", defval=52, minval=1)
displacement = input(title="Displacement", defval=26, minval=1)
min_current_cloud_atr = input(title="Min Current Cloud ATR", type=float, defval=1.0)
min_future_cloud_atr = input(title="Min Future Cloud ATR", type=float, defval=0)
check_base_line_above_cloud = input(title="Check Base Line above Cloud?", type=bool, defval=true)
check_conversion_line_above_base_line = input(title="Check Conversion Line above Base Line?", type=bool, defval=true)
check_price_above_conversion_line = input(title="Check Price above Conversion Line?", type=bool, defval=true)
check_span_a_point_up = input(title="Check Current Span A is pointing Up?", type=bool, defval=false)
check_span_b_point_up = input(title="Check Current Span B is pointing Up?", type=bool, defval=false)
check_future_span_a_point_up = input(title="Check Future Span A is pointing Up?", type=bool, defval=true)
check_future_span_b_point_up = input(title="Check Future Span B is pointing Up?", type=bool, defval=true)
check_base_line_point_up = input(title="Check Base Line is Pointing Up?", type=bool, defval=true)
check_conversion_line_point_up = input(title="Check Conversion Line is Pointing Up?", type=bool, defval=true)

bullish_color = #ccff99
bearish_color = #ff704d
span_a_color = #0000cc
span_b_color = #000066
conversion_color = #ff99ff
base_color = #4da6ff
bull_signal_color = #228b22
bear_signal_color = #990000

donchian(len) => avg(lowest(len), highest(len))
bchange(series) => series and not series[1]

conversion_line = donchian(conversion_period)
base_line = donchian(base_period)
future_span_a = avg(conversion_line, base_line)
future_span_b = donchian(span_b_period)
span_a = future_span_a[displacement]
span_b = future_span_b[displacement]
current_atr = atr(atr_period)

min_cloud_width = min_current_cloud_atr * current_atr
current_cloud_long_flag = span_a > (span_b + min_cloud_width)
current_cloud_short_flag = span_a < (span_b - min_cloud_width)
future_cloud_long_flag = future_span_a > (future_span_b + min_cloud_width)
future_cloud_short_flag = future_span_a < (future_span_b - min_cloud_width)
base_line_long_flag = check_base_line_above_cloud ? (base_line > span_a) : true
base_line_short_flag = check_base_line_above_cloud ? (base_line < span_a) : true
conversion_line_long_flag = check_conversion_line_above_base_line ? (conversion_line > base_line) : true
conversion_line_short_flag = check_conversion_line_above_base_line ? (conversion_line < base_line) : true
price_long_flag = check_price_above_conversion_line ? (close > conversion_line) : true
price_short_flag = check_price_above_conversion_line ? (close < conversion_line) : true
span_a_point_long_flag = check_span_a_point_up ? (span_a > span_a[1]) : true
span_a_point_short_flag = check_span_a_point_up ? (span_a < span_a[1]) : true
span_b_point_long_flag = check_span_b_point_up ? (span_b > span_b[1]) : true
span_b_point_short_flag = check_span_b_point_up ? (span_b < span_b[1]) : true
future_span_a_point_long_flag = check_future_span_a_point_up ? (future_span_a > future_span_a[1]) : true
future_span_a_point_short_flag = check_future_span_a_point_up ? (future_span_a < future_span_a[1]) : true
future_span_b_point_long_flag = check_future_span_b_point_up ? (future_span_b > future_span_b[1]) : true
future_span_b_point_short_flag = check_future_span_b_point_up ? (future_span_b < future_span_b[1]) : true
base_line_point_long_flag = check_base_line_point_up ? (base_line > base_line[1]) : true
base_line_point_short_flag = check_base_line_point_up ? (base_line < base_line[1]) : true
conversion_line_point_long_flag = check_conversion_line_point_up ? (conversion_line > conversion_line[1]) : true
conversion_line_point_short_flag = check_conversion_line_point_up ? (conversion_line < conversion_line[1]) : true


bada_long = bchange(current_cloud_long_flag)
   or bchange(future_cloud_long_flag)
   or bchange(base_line_long_flag)
   or bchange(conversion_line_long_flag)
   or bchange(price_long_flag)
   or bchange(span_a_point_long_flag)
   or bchange(span_b_point_long_flag)
   or bchange(future_span_a_point_long_flag)
   or bchange(future_span_b_point_long_flag)
   or bchange(base_line_point_long_flag)
   or bchange(conversion_line_point_long_flag)
bada_short = bchange(current_cloud_short_flag)
   or bchange(future_cloud_short_flag)
   or bchange(base_line_short_flag)
   or bchange(conversion_line_short_flag)
   or bchange(price_short_flag)
   or bchange(span_a_point_short_flag)
   or bchange(span_b_point_short_flag)
   or bchange(future_span_a_point_short_flag)
   or bchange(future_span_b_point_short_flag)
   or bchange(base_line_point_short_flag)
   or bchange(conversion_line_point_short_flag)
bada_color = bada_long ? bull_signal_color : bear_signal_color
plotshape(bada_long or bada_short, title="bada",
  style=shape.circle,
  location=location.belowbar,
  color=bada_color,
  transp=50)
   
bing_long = current_cloud_long_flag
   and future_cloud_long_flag
   and base_line_long_flag
   and conversion_line_long_flag
   and price_long_flag
   and span_a_point_long_flag
   and span_b_point_long_flag
   and future_span_a_point_long_flag
   and future_span_b_point_long_flag
   and base_line_point_long_flag
   and conversion_line_point_long_flag
bing_short = current_cloud_short_flag
   and future_cloud_short_flag
   and base_line_short_flag
   and conversion_line_short_flag
   and price_short_flag
   and span_a_point_short_flag
   and span_b_point_short_flag
   and future_span_a_point_short_flag
   and future_span_b_point_short_flag
   and base_line_point_short_flag
   and conversion_line_point_short_flag
bing_color = bing_long ? bull_signal_color : bear_signal_color
plotshape(bchange(bing_long or bing_short), title="bing",
   style=shape.diamond,
   location=location.abovebar,
   color=bing_color,
   transp=0)

c = plot(conversion_line, color=conversion_color, title="Conversion Line", linewidth=2)
b = plot(base_line, color=base_color, title="Base Line", linewidth=2)
p1 = plot(future_span_a, offset = displacement, color=span_a_color, title="Span A", linewidth=3)
p2 = plot(future_span_b, offset = displacement, color=red, title="Span B", linewidth=3)
fill(p1, p2, color = future_span_a > future_span_b ? bullish_color : bearish_color, transp = 60)

strategy.entry("long", true, 1, when=bing_long)
strategy.exit("stop", "long", stop=span_a)
strategy.close("long", when=close < base_line)
strategy.entry("short", false, 1, when=bing_short)
strategy.exit("stop", "short", stop=span_a)
strategy.close("short", when=close > base_line)