Stratégie de rupture de tendance adaptative ATR

Auteur:ChaoZhang est là., Date: le 31 octobre 2023
Les étiquettes:

img

Résumé

Cette stratégie est une stratégie de rupture de tendance basée sur l'indicateur ATR. Son idée principale est de prendre des transactions de rupture de tendance lorsque le prix dépasse un certain multiple d'ATR. La stratégie comprend également la confirmation de la tendance et la limitation des transactions dans des plages de dates.

Principe

La stratégie utilise l'indicateur ATR pour mesurer la volatilité des prix. ATR signifie Average True Range et mesure la volatilité moyenne sur une période. Le paramètre de longueur de la stratégie calcule la période ATR et numATRs représente le multiplicateur ATR pour la rupture.

Lorsque le prix dépasse le multiple numATRs supérieur de l'ATR, une position longue est prise.

En outre, la stratégie comprend des variables bool needlong et needshort pour contrôler uniquement les transactions longues ou courtes.

La stratégie utilise une variable de taille pour déterminer la taille de la position et calcule la taille de l'ordre en fonction du pourcentage du capital du compte.

Les avantages

  • Utilise l'ATR pour s'adapter automatiquement à la volatilité du marché sans réglage manuel des profits/pertes.

  • La sélection est flexible: long, short ou long/short seulement.

  • Peut définir des plages de dates pour éviter les transactions lors d'événements importants.

  • Taille flexible des positions basée sur le pourcentage de fonds propres du compte.

Risques et solutions

  • L'ATR ne prend en compte que la volatilité des prix. Il peut avoir un stop loss insuffisant lors d'énormes fluctuations du marché. D'autres indicateurs peuvent être combinés.

  • Les limites de la plage de dates peuvent manquer des opportunités si aucune bonne configuration avant/après.

  • La taille en pourcentage des actions risque d'entraîner des pertes importantes sur les transactions uniques.

Idées d'optimisation

  • Ajouter des moyennes mobiles pour le filtre de tendance afin de réduire les faux bruits de rupture.

  • Testez les périodes ATR pour trouver les paramètres optimaux.

  • Combinez avec d'autres stratégies pour utiliser les points forts et améliorer la stabilité.

Conclusion

Il s'agit d'une tendance compréhensible à la suite d'une stratégie utilisant l'ATR pour s'adapter à la volatilité. L'optimisation des paramètres et la combinaison avec d'autres stratégies peuvent améliorer davantage les performances et la stabilité.


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Volty Strategy v1.0", shorttitle = "Volty 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
length = input(5)
numATRs = input(0.75)
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Indicator
atrs = sma(tr, length) * numATRs

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if (not na(close[length])) and needlong
    strategy.entry("L", strategy.long, lot, stop = close + atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needlong == false
    strategy.entry("L", strategy.long, 0, stop = close + atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needshort
    strategy.entry("S", strategy.short, lot, stop = close - atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needshort == false
    strategy.entry("S", strategy.short, 0, stop = close - atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

Plus de