Stratégie de suivi des tendances sur plusieurs périodes de temps basée sur le nuage Ichimoku, le MACD et le stochastique


Date de création: 2024-02-05 10:30:45 Dernière modification: 2024-02-05 10:30:45
Copier: 2 Nombre de clics: 768
1
Suivre
1617
Abonnés

Stratégie de suivi des tendances sur plusieurs périodes de temps basée sur le nuage Ichimoku, le MACD et le stochastique

Aperçu

Cette stratégie intègre plusieurs indicateurs tels que le nuage d’Ichimoku, les moyennes mobiles, le MACD, le stochastique et l’ATR, permettant l’identification et le suivi de tendances sur plusieurs périodes. Après avoir obtenu un signal de tendance à plus forte probabilité, le contrôle des risques est effectué en utilisant la méthode d’arrêt de perte cyclique ATR.

Principe de stratégie

  1. Le diagramme de nuages d’Ichimoku détermine la direction de la tendance de la ligne médiane longue. Les lignes de retournement et de référence qui traversent le diagramme de nuages au-dessus du prix CLOSE sont des signaux à plusieurs têtes et des signaux à vide au-dessous.

  2. Le MACD détermine les tendances de courte ligne et les situations de survente et de surachat. Le MACD traverse les lignes de signaux en haut comme des signaux à plusieurs têtes et en bas comme des signaux à vide.

  3. Le KD stochastique détermine la zone de surachat et de survente. La ligne K porte 20 pour les signaux à plusieurs têtes et la ligne basse porte 80 pour les signaux à vide.

  4. La moyenne mobile détermine la tendance intermédiaire. La moyenne mobile est portée au-dessus du prix de clôture comme un signal à plusieurs têtes et au-dessous comme un signal à vide.

  5. La synthèse de plusieurs signaux de l’indicateur ci-dessus, le filtrage de certains faux signaux, forme un signal de tendance persistante avec une forte probabilité.

  6. Le prix d’arrêt est calculé sur la base de l’ATR. Le contrôle du risque est réalisé en utilisant un certain nombre de ATR comme point d’arrêt et point d’arrêt.

Avantages stratégiques

  1. Le système de détection des tendances en plusieurs temps permet d’améliorer la précision du signal.

  2. La technologie de filtrage combiné des indicateurs est largement utilisée pour filtrer efficacement les faux signaux.

  3. ATR arrêt périodique des pertes, pour contrôler au maximum les pertes individuelles.

  4. Les critères d’admission peuvent être personnalisés pour répondre aux différentes préférences en matière de risques.

Risque stratégique

  1. La plupart des pays utilisent le suivi des tendances pour identifier les retournements d’événements soudains.

  2. L’arrêt périodique d’ATR peut être trop idéaliste et difficile à reproduire complètement sur disque.

  3. Une mauvaise configuration des paramètres peut entraîner une fréquence de transaction excessive ou une insuffisance de l’exactitude de la reconnaissance du signal.

  4. Il est nécessaire d’ajuster les paramètres pour trouver un équilibre adapté aux différentes variétés et aux différents environnements du marché.

Orientation de l’optimisation de la stratégie

  1. L’ajout d’algorithmes d’apprentissage automatique pour aider à déterminer les points de basculement des tendances.

  2. Optimiser les paramètres de multiplication d’ATR, différentes variétés peuvent avoir des multiples différents.

  3. La précision des signaux de rupture a été améliorée par la combinaison d’autres facteurs tels que les variations du volume de transactions.

  4. Les paramètres sont constamment optimisés en fonction des résultats de la rétroanalyse pour trouver la combinaison optimale de paramètres.

Résumer

Cette stratégie utilise une combinaison de plusieurs indicateurs tels que le diagramme de l’Ichimoku, le MACD et le Stochastic pour identifier les tendances à plusieurs périodes, tout en essayant d’éviter d’être pris au piège par des événements soudains. La méthode d’arrêt de perte périodique ATR est une stratégie de suivi de tendance recommandée pour contrôler efficacement les pertes simples.

Code source de la stratégie
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 4h
basePeriod: 15m
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/
// © FXFUNDINGMATE

//@version=4
strategy(title="FXFUNDINGMATE TREND INDICATOR", overlay=true)

//Ichimoku Cloud
conversionPeriods = input(9, minval=1, title="Conversion Line Length")
basePeriods = input(26, minval=1, title="Base Line Length")
laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Length")
displacement = input(26, minval=1, title="Displacement")
donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)[displacement - 1]
leadLine2 = donchian(laggingSpan2Periods)[displacement - 1]


//macd
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)

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


//kd
periodK = input(5, title="%K Length", minval=1)
smoothK = input(3, title="%K Smoothing", minval=1)
periodD = input(3, title="%D Smoothing", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)


//atr
atrlength = input(title="Atr Length", defval=8, minval=1)
SMulti = input(title="Stop loss multi Atr", defval=1.0)
TMulti = input(title="Take profit multi Atr", defval=1.0)
smoothing = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"])
ma_function(source, length) =>
	if smoothing == "RMA"
		rma(source, length)
	else
		if smoothing == "SMA"
			sma(source, length)
		else
			if smoothing == "EMA"
				ema(source, length)
			else
				wma(source, length)
atr = ma_function(tr(true), atrlength)


operation_type = input(defval = "Both", title = "Position side", options = ["Long", "Short", "Both"])
operation = operation_type == "Long" ? 1 : operation_type == "Short" ? 2 : 3
showlines = input(true,  title="Show sl&tp lines")

// MA
sma_len = input(100, title="MA Length", type=input.integer)
sma = sma(close, sma_len)

longCond = crossover(k, 20) and macd > 0 and close > sma and close > leadLine1 and close > leadLine2
shortCond = crossunder(k, 80)  and macd < 0 and close < sma and close < leadLine1 and close < leadLine2

entry_price  = float(0.0) //set float
entry_price := strategy.position_size != 0 or longCond or shortCond ? strategy.position_avg_price : entry_price[1]
entry_atr = valuewhen(longCond or shortCond, atr,0)
short_stop_level     = float(0.0)   //set float
short_profit_level   = float(0.0)   //set float
long_stop_level      = float(0.0)   //set float
long_profit_level    = float(0.0)   //set float
short_stop_level    := entry_price + SMulti * entry_atr
short_profit_level  := entry_price - TMulti * entry_atr
long_stop_level     := entry_price - SMulti * entry_atr
long_profit_level   := entry_price + TMulti * entry_atr


//  Strategy Backtest Limiting Algorithm
i_startTime = input(defval = timestamp("1 Jan 2020 00:00 +0000"), title = "Backtesting Start Time", type = input.time)
i_endTime = input(defval = timestamp("31 Dec 2025 23:59 +0000"), title = "Backtesting End Time", type = input.time)
timeCond = true

if (operation == 1 or operation == 3)
    strategy.entry("long" , strategy.long , when=longCond and timeCond, alert_message = "Long")
    strategy.exit("SL/TP", from_entry = "long" , limit = long_profit_level , stop = long_stop_level , alert_message = "Long exit")

if (operation == 2 or operation == 3)
    strategy.entry("short", strategy.short, when=shortCond and timeCond, alert_message="Short")
    strategy.exit("SL/TP", from_entry = "short", limit = short_profit_level , stop = short_stop_level , alert_message = "Short exit")
    
if time > i_endTime  
    strategy.close_all(comment = "close all", alert_message = "close all")
    
plot(showlines and strategy.position_size <= 0 ? na : long_stop_level,    color=color.red,  style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size <= 0 ? na : long_profit_level,  color=color.lime, style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size >= 0 ? na : short_stop_level,   color=color.red,  style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size >= 0 ? na : short_profit_level, color=color.lime, style=plot.style_linebr, linewidth = 2)

//}