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


Date de création: 2023-12-06 11:52:10 Dernière modification: 2023-12-06 11:52:20
Copier: 0 Nombre de clics: 741
1
Suivre
1619
Abonnés

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

Aperçu

La stratégie de tendance croisée bi-homogène est une stratégie de négociation basée sur des moyennes mobiles. Elle utilise la croisée des EMA rapides et des SMA lents comme signaux d’achat et de vente et combine l’écart de l’indicateur MACD pour filtrer les signaux. La stratégie prend en compte plusieurs facteurs, tels que le prix, la tendance et la dynamique, pour former un système de négociation relativement complet.

Principe de stratégie

La stratégie utilise deux moyennes mobiles, l’EMA et la SMA. L’EMA est de 200 jours et la SMA de 100 jours. Elle génère un signal d’achat lorsque la hausse des prix franchit les deux moyennes et un signal de vente lorsque la baisse des prix franchit les deux moyennes.

Afin d’améliorer encore la fiabilité du signal, la stratégie a également introduit l’indicateur MACD. Lorsqu’un prix dépasse l’EMA et l’SMA pour former un signal, il faut que la ligne rapide du MACD dépasse la ligne lente en bas et que le diagramme de la colonne MACD soit au-dessus de l’axe 0 pour déclencher un véritable signal d’achat.

En outre, la stratégie définit des arrêts de perte et d’arrêt. Après l’ouverture de la stratégie, les arrêts de perte et d’arrêt sont calculés et définis en fonction des ratios définis par l’utilisateur. Cela permet de contrôler efficacement le risque d’une seule transaction.

Dans l’ensemble, la stratégie prend en compte plusieurs indicateurs, impose des conditions de filtrage strictes pour les signaux d’achat et de vente et gère les risques de stop-loss et de stop-loss, formant un système de négociation relativement rigoureux et complet.

Analyse des avantages

Les stratégies de tendances bi-équilibrées ont les avantages suivants:

  1. En combinant plusieurs indicateurs, en tenant compte des prix, des tendances et de la dynamique, des conditions de filtrage strictes sont imposées au signal, ce qui permet d’éviter efficacement les faux signaux et d’améliorer la fiabilité du signal.

  2. Les moyennes mobiles à deux paramètres différents permettent de mieux identifier les tendances du marché et de filtrer les fluctuations. Les lignes EMA rapides sont utilisées pour suivre en temps réel les variations de prix; les lignes SMA lentes sont utilisées pour juger des tendances à long terme. La combinaison des deux lignes est plus efficace.

  3. L’introduction d’indicateurs MACD permet de régler les paramètres, qui peuvent être ajustés en fonction des caractéristiques des différents marchés, et offre une grande flexibilité. La configuration du MACD garantit que les signaux de négociation sont pris en charge à la fois par les prix, les tendances et la dynamique, ce qui a une forte valeur d’application.

  4. Réglez le seuil d’arrêt de perte pour contrôler au maximum les pertes d’une seule transaction et éviter SIZE_MATHFUNC Le risque de perte individuelle est trop élevé. Un ratio raisonnable de stop-loss peut bloquer une partie des bénéfices et réduire l’exposition au risque de marché après la réalisation des bénéfices.

  5. Les paramètres de la stratégie sont flexibles et peuvent être ajustés en fonction des résultats de l’optimisation.

Analyse des risques

Les stratégies de tendance à la biconvergence présentent également des risques, principalement dans les domaines suivants:

  1. Lorsque les cours des actions sont très volatiles, il peut y avoir plusieurs croisements erronés entre les EMA et les SMA, ce qui entraîne des ouvertures et des fermetures fréquentes des signaux de négociation. Cela augmentera la fréquence des transactions et les frais de traitement.

  2. Il est possible que le MACD fasse une fausse percée, surtout lorsque la dynamique de l’oscillation est encore floue. Dans ce cas, le signal est également peu fiable et peut entraîner des pertes inutiles.

  3. La position et la proportion des stop-loss affectent grandement les résultats de la prise de profit. Si le stop-loss est trop petit, il y a un risque de couverture; et si le stop-loss est trop grand, la perte individuelle peut être excessive. Cela nécessite un test approfondi pour trouver les meilleurs paramètres.

  4. La moyenne mobile est un indicateur de suivi de la tendance, dont l’effet indicatif est réduit lorsque le prix se retourne rapidement. La stratégie peut ne pas être en mesure d’arrêter la perte et être renversée par le prix, ce qui entraîne de plus grandes pertes.

Les solutions sont les suivantes:

  1. En cas de fortes secousses, il est possible d’ajuster les paramètres de la moyenne mobile, en utilisant des EMA et des SMA à faible paramètre, pour réduire le nombre de croisements.

  2. L’ajout de conditions de filtrage de la rupture de la MACD vers le haut et vers le bas de l’axe zéro peut réduire la fausse rupture. Il est également possible d’envisager d’ajouter d’autres indicateurs à la combinaison, tels que KDJ, BOLL, etc.

  3. Les paramètres de positionnement et de proportion d’arrêt de perte nécessitent un retour d’expérience et une optimisation pour trouver les paramètres optimaux. Sur cette base, une surveillance continue et un ajustement dynamique doivent également être envisagés.

  4. Il est possible de mettre en place des mécanismes d’identification de retournements rapides des prix. Lorsque des retournements anormaux sont détectés, des mesures d’urgence sont prises pour réduire les positions ou suspendre la stratégie de négociation, afin de contrôler les marges de risque.

Direction d’optimisation

Il y a encore de la place pour une optimisation de la stratégie de tendance à la biconvergence, qui se concentre principalement sur les aspects suivants:

  1. Tester plus d’indicateurs pour les combiner et rechercher des paramètres plus optimaux. Par exemple, introduire un canal BOLL, tenir compte de l’impact de la volatilité, etc.

  2. Optimiser les paramètres de longueur des moyennes mobiles pour trouver la combinaison optimale de paramètres dans différentes conditions de marché. L’optimisation des paramètres de défilement est également une option.

  3. La mise en place d’une stratégie de stop loss plus scientifique et rationnelle, comme l’introduction d’un stop loss de suivi, ou la mise en place d’un ratio de risque-rendement dynamique basé sur des résultats statistiques historiques, etc., peut encore améliorer la stabilité de la stratégie.

  4. Créer des mécanismes de détection automatique et d’urgence en cas de retournement anormal des prix. Réduire activement les positions ou suspendre la stratégie dans des situations extrêmes pour éviter des pertes massives.

  5. Élargissement des variétés de négociation, telles que les devises étrangères, les monnaies numériques et d’autres variétés. Test de la robustesse des paramètres des différentes variétés, élargissement du champ d’application de la stratégie.

  6. Les stratégies de gestion de fonds pour optimiser les stratégies, telles que les opérations de quota, le ratio de position fixe, etc. Contrôler le risque de perte individuelle et rendre la courbe de fonds globale plus lisse.

Résumer

La stratégie de tendance croisée bi-homogène prend en compte de multiples facteurs et nécessite le soutien de plusieurs indicateurs tels que le prix, la tendance et la dynamique lors de l’émission d’un signal de négociation, afin d’assurer la fiabilité du signal. La stratégie utilise également un stop-loss mobile qui permet de contrôler efficacement le risque d’une seule transaction. Les paramètres de la stratégie sont flexibles, pratiques et adaptés à l’automatisation des transactions.

Cependant, aucune stratégie ne peut être parfaite. La stratégie peut rencontrer des difficultés dans l’application, telles que la fréquence des transactions, les fausses percées et la configuration des positions de stop-loss. Cela nécessite que nous nous engagions dans de nombreux domaines, tels que l’optimisation des combinaisons de paramètres, l’introduction de nouvelles combinaisons d’indicateurs techniques et l’amélioration des mécanismes de stop-loss, afin de renforcer encore la stabilité et la rentabilité de la stratégie.

Dans l’ensemble, la stratégie de tendance à la croisée de deux équilibre a formé un système de négociation relativement complet et rigoureux. Dans la recherche et l’application ultérieures, la stratégie est susceptible d’apporter une plus grande valeur de combat réelle grâce à une optimisation et une amélioration continues.

Code source de la stratégie
/*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)