Stratégie de tendance croisée à moyenne mobile double

Auteur:ChaoZhang est là., Date: 2023-12-06 11:52:10 Je suis désolé
Les étiquettes:

img

Résumé

La stratégie de tendance de croisement de la moyenne mobile double est une stratégie de trading basée sur des moyennes mobiles. Elle utilise le croisement des lignes EMA rapides et SMA lentes comme signaux d'achat et de vente, et combine la divergence de l'indicateur MACD pour filtrer les signaux.

Principe de stratégie

La stratégie utilise deux moyennes mobiles, EMA avec une durée de 200 jours et SMA avec une durée de 100 jours. Lorsque le prix traverse les deux lignes vers le haut, un signal d'achat est généré. Lorsque le prix traverse les deux lignes vers le bas, un signal de vente est généré. Cela peut filtrer efficacement les tendances oscillantes et les retraits à court terme.

Pour améliorer encore la fiabilité des signaux, l'indicateur MACD est également introduit. Lorsque le prix traverse l'EMA et la SMA pour former un signal, la ligne rapide du MACD doit traverser la ligne lente par le bas, et l'histogramme MACD doit être au-dessus de l'axe 0, pour déclencher un véritable signal d'achat. Inversement, lorsque la ligne rapide du MACD traverse la ligne lente par le haut, et l'histogramme MACD est en dessous de l'axe 0, il déclenchera un véritable signal de vente.

En outre, le stop loss et le take profit sont définis dans la stratégie. Après l'ouverture d'une position par la stratégie, le point stop loss et le point take profit seront calculés et définis en fonction du pourcentage défini par l'utilisateur. Cela peut contrôler efficacement le risque d'une seule transaction.

En résumé, cette stratégie prend en considération de manière exhaustive plusieurs indicateurs, fixe des conditions de filtrage strictes pour les signaux d'achat et de vente et adopte un système de stop loss et de take profit pour gérer les risques, formant ainsi un système de négociation relativement rigoureux et complet.

Analyse des avantages

La stratégie de tendance croisée à moyenne mobile double présente les avantages suivants:

  1. La combinaison de plusieurs indicateurs, la prise en compte complète du prix, de la tendance et de l'élan et la fixation de conditions de filtrage strictes pour les signaux peuvent efficacement éviter de faux signaux et améliorer la fiabilité du signal.

  2. L'utilisation de deux moyennes mobiles avec des paramètres différents peut mieux identifier les tendances du marché et filtrer les marchés oscillants. La ligne EMA rapide est utilisée pour suivre les changements de prix en temps opportun; la ligne SMA lente est utilisée pour déterminer les tendances à long terme.

  3. L'indicateur MACD introduit des paramètres personnalisables qui peuvent être ajustés en fonction des caractéristiques de différents marchés et a une grande flexibilité.

  4. La mise en place de points stop loss et take profit peut maximiser le contrôle sur les pertes d'un seul commerce et éviter des pertes excessives.

  5. Les paramètres de cette stratégie peuvent être fixés de manière flexible et la stratégie peut être ajustée en fonction des résultats d'optimisation, ce qui est très pratique.

Analyse des risques

La stratégie de tendance croisée à deux moyennes mobiles comporte également certains risques, principalement dans les domaines suivants:

  1. Lorsque le cours des actions montre de violentes fluctuations, l'EMA et la SMA peuvent se croiser faussement plusieurs fois, ce qui entraîne une ouverture et une fermeture fréquentes des signaux de négociation.

  2. Les indicateurs MACD peuvent avoir de fausses ruptures, en particulier dans le processus lorsque l'élan n'est pas encore clair.

  3. La position et le rapport des paramètres de stop loss ont une grande influence sur les résultats de profit et de perte. Si le stop loss est trop petit, il y a un risque de se faire prendre; si le stop loss est trop grand, la perte unique peut être trop lourde. Cela nécessite des tests suffisants pour trouver les paramètres optimaux.

  4. En tant qu'indicateur de suivi de tendance, l'efficacité de la moyenne mobile sera réduite lorsque les prix s'inverseront rapidement. La stratégie peut ne pas avoir le temps d'arrêter la perte avant d'être touchée par l'inversion des prix, causant de plus grandes pertes.

Les solutions correspondantes sont les suivantes:

  1. Pour les marchés volatils, ajuster de manière appropriée les paramètres des moyennes mobiles, en utilisant des EMA et des SMA de paramètres inférieurs pour réduire la fréquence des croisements.

  2. Augmenter les conditions de filtrage telles que la rupture du MACD au-dessus et au-dessous de la ligne zéro, ce qui peut réduire les fausses ruptures dans une certaine mesure.

  3. Le réglage de la position et du rapport stop loss nécessite un backtesting et une optimisation suffisants pour trouver les paramètres optimaux.

  4. Des mécanismes peuvent être mis en place pour détecter des renversements rapides des prix.

Directions d'optimisation

Il reste encore des possibilités d'optimisation supplémentaire de la stratégie de tendance croisée à moyenne mobile double, principalement dans les aspects suivants:

  1. Tester plus d'indicateurs pour une combinaison afin de trouver de meilleurs paramètres, par exemple en incorporant le canal BOLL et en considérant l'impact de la volatilité.

  2. Optimiser les paramètres des longueurs moyennes mobiles pour trouver la meilleure combinaison de paramètres dans différentes conditions de marché.

  3. Mettre en place des stratégies de stop loss et de profit plus scientifiques et raisonnables, telles que l'introduction d'un stop loss de suivi ou la définition de ratios de risque/rendement dynamiques basés sur des résultats statistiques historiques.

  4. Mettre en place des mécanismes d'identification automatique et de réponse d'urgence des renversements anormaux de prix.

  5. Élargir les variétés de trading telles que les devises, les crypto-monnaies et autres variétés. Tester la robustesse des paramètres sur différentes variétés pour étendre l'applicabilité de la stratégie.

  6. Optimiser les stratégies de gestion des capitaux de la stratégie, telles que les transactions à montant fixe, le ratio de position fixe, etc. Contrôler le risque de perte d'une seule transaction, ce qui rend la courbe globale des capitaux plus stable.

Conclusion

La stratégie de tendance de croisement de moyenne mobile double prend en compte de manière exhaustive plusieurs facteurs. Lors de la génération de signaux de trading, elle nécessite le soutien de plusieurs indicateurs tels que le prix, la tendance et l'élan pour assurer la fiabilité du signal.

Cependant, aucune stratégie ne peut être parfaite. Cette stratégie rencontrera également certaines difficultés dans l'application, telles que le trading fréquent, les fausses ruptures, le positionnement de stop loss, etc. Pour améliorer davantage la robustesse et la rentabilité de la stratégie, des efforts doivent être faits dans de nombreux aspects, y compris l'optimisation des portefeuilles de paramètres, l'introduction de nouveaux indicateurs techniques, l'amélioration du mécanisme de stop loss, etc.

En résumé, la stratégie de tendance croisée à moyenne mobile double constitue un système de négociation relativement complet et rigoureux.


/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Hi,
// This is my first strategy made by myself(except for the MACD indicator). I'm publishing this to get myself out there and for some newer people to see how a basic strategy works. All credits go to Zen&TheArtofTrading, for teaching me almost everything I know about Pinescript
// The strategy is basically an MACD crossover trend strategy. If the MACD line crosses the signal line upward, above the zero point of the histogram, while the price is above 200 EMA and 100 SMA it's a buy signal
// If the MACD line crosses the signal line downward, while below zero point of the histogram, as well as the price being below 200 EMA and 100 SMA it's a sell signal
// I used the 200 EMA and 100 SMA because I wanted to filter weak signals as much as possible when the market is ranging, if you have any suggestions to go around this better, please let me know, still learning everyday

// If you have any suggestions, tips or tricks please let me know. I'm still new to Pinescript, but having a lot of fun trying stuff out. If you see something in my code that you don't understand, feel free to ask, I'll try to answer as best as I can

// I opened the strategy with predetermined backtesting pyramiding, currency etc. This made the progress of backtesting multiple TP and SL easier. Also the commission value is from Binance Futures, I just left it in there for anyone who wants to just copy this strategy
strategy("MACD Crossover Trend Strategy Template", overlay = true )

// Determining inputs and values, I just copied the built-in MACD strategy and removed everything I didn't need, just needed the barebone indicator and added EMA + SMA inputs
fast_length = input(title = "Fast Length", type = input.integer, defval = 12, group = "MACD Values")
slow_length = input(title = "Slow Length", type = input.integer, defval = 26, group = "MACD Values")
src = input(title = "Source", type = input.source, defval = close, group = "MACD Values")
signal_length = input(title = "Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9, group = "MACD Values")
sma_source = input(title = "Simple MA (Oscillator)", type = input.bool, defval = false, group = "MACD Values")
sma_signal = input(title = "Simple MA (Signal Line)", type = input.bool, defval = false, group = "MACD Values")
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
emaLength = input(title = "EMA", type = input.integer, defval = 200, step = 10, group = "Moving Averages")
smaLength = input(title = "SMA", type = input.integer, defval = 100, step = 10, group = "Moving Averages")

// Input backtest range, you can adjust this here or in the input options
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12, group = "Backtest Date Range")
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31, group = "Backtest Date Range")
fromYear  = input(defval = 2000, title = "From Year",       type = input.integer, minval = 1970, group = "Backtest Date Range")
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12, group = "Backtest Date Range")
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31, group = "Backtest Date Range")
thruYear  = input(defval = 2099, title = "Thru Year",       type = input.integer, minval = 1970, group = "Backtest Date Range")

// Inputs for EMA, SMA and to adjust your take profit and stop losses in the input options while backtesting, it's result of your input is calculated back to percentages
ema = ema(close, emaLength)
sma = sma(close, smaLength)
profitlong = input(title = "Profit Long %", type = input.float, defval = 2, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01
losslong = input(title = "Loss Long %", type = input.float, defval = 1, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01
profitshort = input(title = "Profit Short %", type = input.float, defval = 2, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01
lossshort = input(title = "Loss Short %", type = input.float, defval = 1, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01

// Check EMA and SMA also check the backtest range. inDataRange is a true or false statement, true if the date right now is between the parameters that's filled at the corresponding inputs
// (for example 1-1-2020 till 12-12-2020, if that specific bar is between these dates, statement is true and trade will be executed)
// If the date is not in between the given parameters, statement turns to false and it won't allow new trades and closes all current trades as seen with the strategy.close_all function
inDataRange = (time >= timestamp(syminfo.timezone, fromYear, fromMonth, fromDay, 0, 0)) and (time < timestamp(syminfo.timezone, thruYear, thruMonth, thruDay, 0, 0))
long = close > ema and close > sma and inDataRange
short = close < ema and close < sma and inDataRange

// Entry and exit signals + checking backtest date range, what the signals are supposed to do is noted at the beginning of the code
// I want a way to filter out weak signals that are ranging around the zero point of the histogram. 
// So far couldn't think of a decent way to do this over multiple symbols since the range of the histogram changes with every symbol, sometimes ranging between 0 and 1 or sometimes ranging between 0 and 1000
// I could probably use a cofficiency or something, but that's beyond my grasp at the moment
// Also I wanted a way to let my strategy determine a stop loss based on the pullback and having a 1.5 risk/reward TP on top of that. Couldn't really figure out a way to determine the pullback
if (crossover(macd, signal) and macd > 0)
    strategy.entry("Long", long = strategy.long,
     comment = "Long Buy",
     when = long)

strategy.exit("Exit Long", "Long", profit = close * profitlong / syminfo.mintick, loss = close * losslong / syminfo.mintick)


if (crossunder(macd, signal) and macd < 0)
    strategy.entry("Short", long = strategy.short,
     comment = "Short Buy",
     when = short)

strategy.exit("Exit Short", "Short", profit = close * profitshort / syminfo.mintick, loss = close * lossshort / syminfo.mintick)

// To make sure the backtesting doesn't leave a position open beyond, or before, our applied dates
if (not inDataRange)
    strategy.close_all()

// plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

Plus de