Cette stratégie utilise l'indicateur EMA pour identifier les tendances des prix et combine l'écart type pour calculer les signaux d'achat et de vente pour la tendance après la négociation.
La stratégie calcule d'abord la différence v entre le prix de clôture et l'EMA de la longueur ema_length. Ensuite, elle calcule le déviation standard dev de v sur les périodes de longueur ema_length. Ensuite, elle détermine le coefficient de direction k, avec k=1 pour le long et k=-1 pour le court. Le seuil de signal d'achat dev_limit est calculé par k * dev * facteur limite. Lorsque v traverse le dev_limit, un signal d'achat est déclenché. Le signal de sortie est lorsque v traverse 0.
La stratégie prévoit deux modes:
Achetez court, allez long quand v traverse sous la limite de dev_limit négative, pour suivre une tendance à la baisse.
Acheter long, aller long quand v traverse au-dessus de la limite positive de dev, pour suivre une tendance haussière.
En résumé, la stratégie calcule dynamiquement l'écart type de la différence entre le prix et l'EMA pour définir le seuil et suit les tendances. Le facteur contrôle la sensibilité des signaux d'achat. ema_length détermine la période EMA. Le mode d'achat contrôle la direction de l'ordre.
Les avantages de cette stratégie sont les suivants:
L'EMA identifie bien la direction de la tendance en stabilisant les prix.
Le seuil dynamique basé sur l'écart type s'adapte mieux que les seuils fixes.
Deux modes d'achat permettent de suivre une tendance haussière ou une tendance baissière.
Le facteur fournit une flexibilité dans l'ajustement de la sensibilité d'achat. ema_length permet l'optimisation de la période EMA.
La logique est simple et facile à comprendre et à modifier.
Le dimensionnement des positions peut être configuré de manière flexible pour suivre une tendance agressive.
Les risques de la stratégie:
L'EMA est en retard et risque de rater les points tournants.
Il s'appuie sur l'optimisation des paramètres. Des réglages incorrects entraînent une sensibilité insuffisante ou une sursensibilité.
Une tendance suivie entraîne des pertes plus importantes en cas d'inversion de tendance.
Les commutateurs long/short fréquents augmentent la fréquence des transactions.
Les signaux fréquents sur les marchés variés augmentent les coûts.
Pour faire face aux risques, envisagez d'ajouter un stop loss, d'optimiser les paramètres, d'ajouter des filtres pour éviter une survente, etc.
La stratégie peut être optimisée par:
Tester différentes périodes EMA pour trouver la longueur optimale.
Test de différentes valeurs de facteur pour trouver la meilleure sensibilité.
Optimisation des stratégies de dimensionnement de la position, par exemple la pyramide.
Ajout de filtres pour éviter les mauvais échanges sur les marchés agités.
Incorporer le stop loss pour contrôler les pertes d'une seule transaction.
Optimisation des paramètres séparément pour les deux modes d'achat.
Je cherche des signaux de renversement de tendance pour arrêter la tendance.
La stratégie identifie les tendances avec l'EMA et génère des ordres de seuil dynamiques pour suivre les tendances. La logique est simple et claire. La taille de la position peut être agressive pour la poursuite des tendances.
/*backtest start: 2023-10-06 00:00:00 end: 2023-11-05 00:00:00 period: 1h 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/ // © Azzrael // Based on EMA and EMA Oscilator https://www.tradingview.com/script/qM9wm0PW-EMA-Oscilator-Azzrael/ // (EMA - close) + Std Dev + Factor = detecting oversell/overbuy // Long only! // Pyramiding - sometimes, depends on ... // There 2 enter strategies in one script // 1 - Classic, buy on entering to OverSell zone (more profitable ~> 70%) // 2 - Crazy, buy on entering to OverBuy zone (catching trend and pyramiding, more net profit) // Exit - crossing zero of (EMA - close) //@version=5 strategy("STR:EMA Oscilator [Azzrael]", overlay=false, margin_long=100, margin_short=100, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=30, pyramiding=3) entry_name="Buy" ema_length = input.int(200, "Period", minval=2, step=10) limit = input.float(1.7, "Factor", minval=1, step=0.1, maxval=10) dno = input.string(defval="Buy on enter to OverSell", title="Model", options=["Buy on enter to OverSell", "Buy on enter to OverBuy"]) == "Buy on enter to OverSell" v = close - ta.ema(close, ema_length) dev = ta.stdev(v, ema_length) k = dno ? -1 : 1 dev_limit = k*dev*limit cond_long = dno ? ta.crossunder(v, dev_limit) : ta.crossover(v, dev_limit) cond_close = ta.cross(v, 0) // dev visualization sig_col = (dno and v <= dev_limit) or (not dno and v >= dev_limit) ? color.green : color.new(color.blue, 80) plot(dev_limit, color=color.green) plot(k*dev, color=color.new(color.blue, 60)) plot(v, color=sig_col ) hline(0) // Make love not war strategy.entry(entry_name, strategy.long, when=cond_long) strategy.close(entry_name, when=cond_close)