Cette stratégie utilise l'indicateur Supertrend pour déterminer les tendances des prix et entre dans des positions longues ou courtes lorsque les tendances changent.
La stratégie a des plages de dates de backtesting intégrées et la possibilité de négocier uniquement à certaines heures de la journée et de fermer tous les métiers à la fin de cette période. Cela est particulièrement utile pour les actions de day trading. Lorsque l'option de la période est activée, vous pouvez choisir d'entrer dans la position actuelle immédiatement lorsque la période commence, ou attendre un changement de tendance pour entrer dans la première position.
La stratégie vous permet également de spécifier des niveaux de stop loss et de profit basés sur le pourcentage. Dans la plupart des cas, l'arrêt basé sur l'ATR fourni par Supertrend lui-même rend un stop loss supplémentaire inutile.
Enfin, il existe des champs d'alerte personnalisés pour les messages d'entrée et de sortie à utiliser avec les services de négociation automatisés.
La stratégie Supertrend est basée sur les principes clés suivants:
Calcul de la valeur ATR: peut choisir entre le calcul de la SMA ou l'indicateur ATR intégré. Formule SMA:
atr2 = sma(tr, Periods)
Calculez les bandes supérieure et inférieure. la bande supérieure est proche moins ATR multiplicateur fois ATR. la bande inférieure est proche plus multiplicateur fois ATR.
up = close - (Multiplier * atr)
dn = close + (Multiplier * atr)
Déterminez la direction de la tendance en comparant le prix aux bandes. Tendance haussière lorsque le prix dépasse la bande inférieure. Tendance baissière lorsque le prix dépasse la bande supérieure.
trend := trend == -1 and close > dn ? 1 : trend == 1 and close < up ? -1 : trend
Générer des signaux de négociation sur les changements de tendance, par exemple un signal de vente lors d'un passage de tendance haussière à tendance baissière:
sellSignal = trend == -1 and trend[1] == 1
Filtrez l'entrée en fonction des signaux et des conditions supplémentaires.
Utilisez le stop loss et le take profit pour bloquer les bénéfices ou limiter les risques.
Ce sont les principes de fonctionnement clés derrière la stratégie Supertrend. Combiné avec l'optimisation des paramètres, il peut produire de bons résultats commerciaux.
La stratégie Supertrend présente plusieurs avantages:
Supertrend lui-même identifie efficacement les tendances et est couramment utilisé pour les arrêts de trailing.
Les paramètres ATR personnalisables peuvent être optimisés entre les produits pour un meilleur ajustement.
Des intervalles de temps de backtest et de trading en direct configurables s'adaptent aux différentes sessions de trading.
L'option d'entrer immédiatement dans la première transaction ou d'attendre le signal s'adresse à différents produits.
Le stop loss et le take profit intégrés aident à améliorer la gestion des risques ou à générer plus de bénéfices.
Alertes commerciales personnalisables pour l'intégration avec les systèmes de négociation automatisés et les robots.
Il y a aussi quelques risques à prendre en considération:
Supertrend peut produire de faux signaux qui doivent être filtrés avec des conditions supplémentaires.
Les paramètres incorrects de l'ATR peuvent entraîner un sur-échange ou des tendances manquantes, ce qui nécessite une optimisation pour un meilleur équilibre.
Un stop-loss trop proche peut entraîner une sortie prématurée des transactions rentables.
Une mauvaise configuration des délais peut entraîner des manquements aux sessions de négociation ou des frais de marge inutilement élevés.
Ces risques peuvent être traités par des ajustements appropriés des paramètres ou des filtres supplémentaires pour améliorer la robustesse.
Certaines façons d'optimiser davantage la stratégie:
Testez différentes périodes d'ATR pour trouver le bon équilibre, généralement 10-20 fonctionne bien.
Essayez différentes valeurs de multiplicateur ATR, généralement 2-5 est approprié, ajustez pour trouver l'optimum.
Ajoutez des filtres comme MACD, RSI etc. pour réduire les faux signaux.
Optimiser les niveaux de stop loss et de profit pour obtenir les meilleurs résultats.
Testez différentes plages de temps de négociation, des durées plus courtes conviennent aux stratégies intraday et à haute fréquence.
Mettre en œuvre la sélection automatique des symboles pour suivre une dynamique ou une volatilité élevée.
Dans l'ensemble, il s'agit d'une stratégie de suivi des tendances assez courante et pratique. Il suit efficacement les tendances avec des paramètres personnalisables, mais comporte également des risques inhérents à gérer.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 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/ // © REV0LUTI0N //@version=4 // Strategy strategy("Supertrend Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash) Periods = input(title="ATR Period", type=input.integer, defval=10) src = input(hl2, title="Source") Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true) enableentry = input(true, title="Enter First Trade ASAP") waitentry = input(false, title="Wait To Enter First Trade") atr2 = sma(tr, Periods) atr= changeATR ? atr(Periods) : atr2 up=src-(Multiplier*atr) up1 = nz(up[1],up) up := close[1] > up1 ? max(up,up1) : up dn=src+(Multiplier*atr) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green) Long = (trend == 1 ? up : na) buySignal = trend == 1 and trend[1] == -1 dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) Short = (trend == 1 ? na : dn) sellSignal = trend == -1 and trend[1] == 1 // Strategy Backtesting startDate = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date') finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date') time_cond = true //Time Restriction Settings startendtime = input("", title='Time Frame To Enter Trades') enableclose = input(false, title='Enable Close Trade At End Of Time Frame') timetobuy = (time(timeframe.period, startendtime)) timetoclose = na(time(timeframe.period, startendtime)) // Stop Loss & Take Profit % Based enablesl = input(false, title='Enable Stop Loss') enabletp = input(false, title='Enable Take Profit') stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100 takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100 longStop = strategy.position_avg_price * (1 - stopTick) shortStop = strategy.position_avg_price * (1 + stopTick) shortTake = strategy.position_avg_price * (1 - takeTick) longTake = strategy.position_avg_price * (1 + takeTick) plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL") plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL") plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit") plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit") // Alert messages message_enterlong = input("", title="Long Entry message") message_entershort = input("", title="Short Entry message") message_closelong = input("", title="Close Long message") message_closeshort = input("", title="Close Short message") // Strategy Execution if Long and time_cond and timetobuy and enableentry strategy.entry("Long", strategy.long, alert_message = message_enterlong) if Short and time_cond and timetobuy and enableentry strategy.entry("Short", strategy.short, alert_message = message_entershort) if buySignal and time_cond and timetobuy and waitentry strategy.entry("Long", strategy.long, alert_message = message_enterlong) if sellSignal and time_cond and timetobuy and waitentry strategy.entry("Short", strategy.short, alert_message = message_entershort) if strategy.position_size > 0 and timetoclose and enableclose strategy.close_all(alert_message = message_closelong) if strategy.position_size < 0 and timetoclose and enableclose strategy.close_all(alert_message = message_closeshort) if strategy.position_size > 0 and enablesl and time_cond strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong) if strategy.position_size < 0 and enablesl and time_cond strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort) if strategy.position_size > 0 and enabletp and time_cond strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong) if strategy.position_size < 0 and enabletp and time_cond strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)